use iri_string::types::IriStr;
use xee_interpreter::{
context::DocumentsRef,
xml::{DocumentHandle, DocumentsError},
};
use xot::Xot;
#[derive(Debug)]
pub struct Documents {
pub(crate) xot: Xot,
pub(crate) documents: DocumentsRef,
}
impl Documents {
pub fn new() -> Self {
Self {
xot: Xot::new(),
documents: DocumentsRef::new(),
}
}
pub fn add_string(
&mut self,
uri: &IriStr,
xml: &str,
) -> Result<DocumentHandle, DocumentsError> {
self.documents
.borrow_mut()
.add_string(&mut self.xot, Some(uri), xml)
}
pub fn add_string_without_uri(&mut self, xml: &str) -> Result<DocumentHandle, DocumentsError> {
self.documents
.borrow_mut()
.add_string(&mut self.xot, None, xml)
}
pub fn document_node(&self, handle: DocumentHandle) -> Option<xot::Node> {
self.documents.borrow().get_node_by_handle(handle)
}
pub fn documents(&self) -> &DocumentsRef {
&self.documents
}
pub fn xot(&self) -> &Xot {
&self.xot
}
pub fn xot_mut(&mut self) -> &mut Xot {
&mut self.xot
}
}
impl Default for Documents {
fn default() -> Self {
Self::new()
}
}