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}