Skip to main content

rez_next_package/serialization/
mod.rs

1//! Package serialization and deserialization
2//!
3//! Organized into focused sub-modules:
4//! - `types`: data types (PackageFormat, SerializationOptions, PackageMetadata, PackageContainer)
5//! - `load`: deserialization (load_from_*)
6//! - `save`: serialization (save_to_*)
7
8mod load;
9mod save;
10pub mod types;
11
12#[cfg(test)]
13mod tests;
14
15pub use types::{PackageContainer, PackageFormat, PackageMetadata, SerializationOptions};
16
17use crate::Package;
18use rez_next_common::RezCoreError;
19use std::path::Path;
20
21use load::PackageLoader;
22use save::PackageSaver;
23
24/// Enhanced package serializer/deserializer (public facade).
25///
26/// Delegates to `PackageLoader` and `PackageSaver` internally.
27pub struct PackageSerializer;
28
29impl PackageSerializer {
30    // ── Load (deserialize) ────────────────────────────────────────────────────
31
32    /// Load a package from a file with options
33    pub fn load_from_file_with_options(
34        path: &Path,
35        options: Option<SerializationOptions>,
36    ) -> Result<PackageContainer, RezCoreError> {
37        PackageLoader::load_from_file_with_options(path, options)
38    }
39
40    /// Load a package from a file (legacy method)
41    pub fn load_from_file(path: &Path) -> Result<Package, RezCoreError> {
42        PackageLoader::load_from_file(path)
43    }
44
45    /// Load a package from a string
46    pub fn load_from_string(content: &str, format: PackageFormat) -> Result<Package, RezCoreError> {
47        PackageLoader::load_from_string(content, format)
48    }
49
50    /// Load a package from YAML content
51    pub fn load_from_yaml(content: &str) -> Result<Package, RezCoreError> {
52        PackageLoader::load_from_yaml(content)
53    }
54
55    /// Load a package from JSON content
56    pub fn load_from_json(content: &str) -> Result<Package, RezCoreError> {
57        PackageLoader::load_from_json(content)
58    }
59
60    /// Load a package from Python content using advanced AST parsing
61    pub fn load_from_python(content: &str) -> Result<Package, RezCoreError> {
62        PackageLoader::load_from_python(content)
63    }
64
65    /// Load a package from binary content
66    pub fn load_from_binary(content: &str) -> Result<Package, RezCoreError> {
67        PackageLoader::load_from_binary(content)
68    }
69
70    /// Load a package from TOML content
71    pub fn load_from_toml(content: &str) -> Result<Package, RezCoreError> {
72        PackageLoader::load_from_toml(content)
73    }
74
75    /// Load a package from XML content (simplified)
76    pub fn load_from_xml(content: &str) -> Result<Package, RezCoreError> {
77        PackageLoader::load_from_xml(content)
78    }
79
80    // ── Save (serialize) ──────────────────────────────────────────────────────
81
82    /// Save a package to a file with options
83    pub fn save_to_file_with_options(
84        package: &Package,
85        path: &Path,
86        format: PackageFormat,
87        options: Option<SerializationOptions>,
88    ) -> Result<(), RezCoreError> {
89        PackageSaver::save_to_file_with_options(package, path, format, options)
90    }
91
92    /// Save a package to a file (legacy method)
93    pub fn save_to_file(
94        package: &Package,
95        path: &Path,
96        format: PackageFormat,
97    ) -> Result<(), RezCoreError> {
98        PackageSaver::save_to_file(package, path, format)
99    }
100
101    /// Save a package to a string
102    pub fn save_to_string(
103        package: &Package,
104        format: PackageFormat,
105    ) -> Result<String, RezCoreError> {
106        PackageSaver::save_to_string(package, format)
107    }
108
109    /// Save a package to YAML format
110    pub fn save_to_yaml(package: &Package) -> Result<String, RezCoreError> {
111        PackageSaver::save_to_yaml(package)
112    }
113
114    /// Save a package to JSON format
115    pub fn save_to_json(package: &Package) -> Result<String, RezCoreError> {
116        PackageSaver::save_to_json(package)
117    }
118
119    /// Save a package to Python format
120    pub fn save_to_python(package: &Package) -> Result<String, RezCoreError> {
121        PackageSaver::save_to_python(package)
122    }
123
124    /// Save container to string with options
125    pub fn save_container_to_string(
126        container: &PackageContainer,
127        format: PackageFormat,
128        options: &SerializationOptions,
129    ) -> Result<String, RezCoreError> {
130        PackageSaver::save_container_to_string(container, format, options)
131    }
132}