asset_importer_rs/
lib.rs

1#[cfg(feature = "gltf2")]
2use asset_importer_rs_gltf::{Gltf2Exporter, Gltf2Importer, Output as Gltf2Output};
3#[cfg(feature = "gltf")]
4use asset_importer_rs_gltf_v1::{GltfExporter, GltfImporter, Output as GltfOutput};
5#[cfg(feature = "obj")]
6use asset_importer_rs_obj::ObjImporter;
7use asset_importer_rs_scene::AiScene;
8use enumflags2::BitFlags;
9
10use crate::error::AiExporterError;
11pub use crate::error::AiImporterError;
12use crate::exporter::{ExportFormatEntry, Exporter};
13pub use crate::importer::Importer;
14pub use crate::wrapper::{AiExportWrapper, AiImportWrapper};
15
16mod error;
17mod exporter;
18mod importer;
19mod wrapper;
20
21pub struct AssetImporter;
22
23impl AssetImporter {
24    pub fn importer() -> Importer {
25        Importer::new(vec![
26            #[cfg(feature = "obj")]
27            Box::new(AiImportWrapper::new(ObjImporter::new())),
28            #[cfg(feature = "gltf2")]
29            Box::new(AiImportWrapper::new(Gltf2Importer::new())),
30            #[cfg(feature = "gltf")]
31            Box::new(AiImportWrapper::new(GltfImporter::new())),
32        ])
33    }
34
35    pub fn exporter() -> Exporter {
36        Exporter::new(vec![
37            #[cfg(feature = "gltf2")]
38            ExportFormatEntry::new(
39                Box::new(AiExportWrapper::new(Gltf2Exporter::new(
40                    Gltf2Output::Standard,
41                ))),
42                "ggltf2".to_string(),
43                "GL Transmission Format v. 2".to_string(),
44                "gltf".to_string(),
45                BitFlags::empty(),
46            ),
47            #[cfg(feature = "gltf2")]
48            ExportFormatEntry::new(
49                Box::new(AiExportWrapper::new(Gltf2Exporter::new(
50                    Gltf2Output::Binary,
51                ))),
52                "glb2".to_string(),
53                "GL Transmission Format v. 2 (binary)".to_string(),
54                "glb".to_string(),
55                BitFlags::empty(),
56            ),
57            #[cfg(feature = "gltf")]
58            ExportFormatEntry::new(
59                Box::new(AiExportWrapper::new(GltfExporter::new(
60                    GltfOutput::Standard,
61                ))),
62                "gltf".to_string(),
63                "GL Transmission Format".to_string(),
64                "gltf".to_string(),
65                BitFlags::empty(),
66            ),
67            #[cfg(feature = "gltf")]
68            ExportFormatEntry::new(
69                Box::new(AiExportWrapper::new(GltfExporter::new(GltfOutput::Binary))),
70                "glb".to_string(),
71                "GL Transmission Format (binary)".to_string(),
72                "glb".to_string(),
73                BitFlags::empty(),
74            ),
75        ])
76    }
77
78    pub fn from_file(file_path: &str) -> Result<AiScene, AiImporterError> {
79        let importer = AssetImporter::importer();
80        importer.import_file(file_path)
81    }
82
83    pub fn export_file(scene: &AiScene, file_path: &str) -> Result<(), AiExporterError> {
84        let exporter = AssetImporter::exporter();
85        Ok(())
86    }
87}