blob: 7c2ec65c11ee7e56f096ba14bdb3c8cb3a8b90f8 [file]
// Copyright 2026 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#[cxx::bridge(namespace=data_decoder::xml::ffi)]
pub mod ffi {
unsafe extern "C++" {
include!("services/data_decoder/public/cpp/xml_dom.h");
include!("services/data_decoder/xml/dom_builder.h");
#[namespace = "data_decoder::xml"]
type Node;
fn create_element(local_name: &str, prefix: &str) -> UniquePtr<Node>;
fn create_text_node(text_content: &str) -> UniquePtr<Node>;
fn create_cdata_node(text_content: &str) -> UniquePtr<Node>;
fn set_attribute(element: Pin<&mut Node>, local_name: &str, prefix: &str, value: &str);
fn set_namespace(element: Pin<&mut Node>, prefix: &str, uri: &str);
fn add_child(parent: Pin<&mut Node>, child: UniquePtr<Node>);
}
extern "Rust" {
// TODO(dcheng): decide if we really need to handle both bytes and
// strings and/or where the conversion should happen.
fn decode_xml_bytes(xml: &[u8], err: Pin<&mut CxxString>) -> UniquePtr<Node>;
fn decode_xml_str(xml: &str, mut err: Pin<&mut CxxString>) -> UniquePtr<Node>;
}
}
use crate::{decode_xml_bytes, decode_xml_str};