diff --git a/src/lib.rs b/src/lib.rs index 174f565..c4e1d8a 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -46,7 +46,7 @@ pub use compression::Compression; pub use encoding_type::EncodingType; pub use printer::Printer; pub use error::{KbinError, KbinErrorKind, Result}; -pub use node::{ExtraNodes, Node}; +pub use node::{ExtraNodes, Node, NodeCollection}; pub use options::Options; pub use de::from_bytes; pub use ser::to_bytes; @@ -309,6 +309,16 @@ impl KbinXml { kbinxml.from_binary_internal(input) } + pub fn node_from_binary(input: &[u8]) -> Result<(Node, EncodingType)> { + let mut reader = Reader::new(input)?; + let collection = NodeCollection::from_iter(&mut reader).ok_or(KbinErrorKind::InvalidState)?; + + let node = collection.as_node()?; + let encoding = reader.encoding(); + + Ok((node, encoding)) + } + pub fn to_binary(input: &Element) -> Result> { let mut kbinxml = KbinXml::new(); kbinxml.to_binary_internal(input)