fbxcel_dom/v7400/document/
loader.rs1use 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#[derive(Default, Debug, Clone)]
16pub struct Loader;
17
18impl Loader {
19 pub fn new() -> Self {
21 Self::default()
22 }
23
24 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 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}