fbxcel_dom/v7400/document/
loader.rs

1//! FBX DOM loader.
2
3use fbxcel::{
4    pull_parser::v7400::Parser,
5    tree::v7400::{Loader as TreeLoader, Tree},
6};
7use log::trace;
8
9use crate::v7400::{
10    connection::ConnectionsCache, definition::DefinitionsCache, object::ObjectsCache, Document,
11    LoadError,
12};
13
14/// FBX DOM loader.
15#[derive(Default, Debug, Clone)]
16pub struct Loader;
17
18impl Loader {
19    /// Creates a new `Loader`.
20    pub fn new() -> Self {
21        Self::default()
22    }
23
24    /// Loads a document from the given FBX parser.
25    pub fn load_from_parser<R: std::io::Read>(
26        self,
27        parser: &mut Parser<R>,
28    ) -> Result<Document, LoadError> {
29        trace!("Loading FBX DOM from a parser");
30        let (tree, _) = TreeLoader::new().load(parser)?;
31        self.load_from_tree(tree)
32    }
33
34    /// Loads a document from the given FBX data tree.
35    pub fn load_from_tree(self, tree: Tree) -> Result<Document, LoadError> {
36        trace!("Loading FBX DOM from an FBX data tree");
37        let objects = ObjectsCache::from_tree(&tree)?;
38        let connections = ConnectionsCache::from_tree(&tree)?;
39        let definitions = DefinitionsCache::from_tree(&tree);
40        trace!("Loaded FBX DOM successfully");
41        Ok(Document {
42            tree,
43            objects,
44            connections,
45            definitions,
46        })
47    }
48}