Skip to main content

morphir_core/naming/
mod.rs

1#![allow(clippy::duplicate_mod)]
2pub mod fqname;
3pub mod interner;
4pub mod module_name;
5pub mod name;
6pub mod package_name;
7pub mod path;
8pub mod qname;
9pub mod stem;
10
11// Re-export common types
12pub use fqname::FQName;
13pub use interner::{Word, intern, resolve};
14pub use module_name::ModuleName;
15pub use name::{CANONICAL_STYLE, Name, NameStyle, Segment};
16pub use package_name::PackageName;
17pub use path::Path;
18pub use qname::QName;
19pub use stem::{MIN_TRUNCATED_STEM_BUDGET, escaped_path, file_stem, is_stem_of, truncate_stem};
20
21/// Namespace for serialization codecs
22pub mod codecs {
23    /// Classic (Legacy/V3) serialization logic
24    pub mod classic {
25        use crate::naming::{Name, Path};
26        use serde::Serializer;
27
28        pub fn serialize_name<S>(name: &Name, serializer: S) -> Result<S::Ok, S::Error>
29        where
30            S: Serializer,
31        {
32            // Legacy Name: ["word", "word"]
33            serializer.collect_seq(name.words())
34        }
35
36        pub fn serialize_path<S>(path: &Path, serializer: S) -> Result<S::Ok, S::Error>
37        where
38            S: Serializer,
39        {
40            // Legacy Path: [Name, Name] where Name is ["word", "word"]
41            let parts: Vec<Vec<String>> = path.segments.iter().map(Name::words).collect();
42            serializer.collect_seq(parts)
43        }
44    }
45}