Type Registration
This page covers type registration methods in Apache Fory™ Rust.
Register by ID
Register types with a numeric ID for fast, compact serialization:
use fory::Fory;
use fory::ForyObject;
#[derive(ForyObject)]
struct User {
name: String,
age: i32,
}
let mut fory = Fory::default();
fory.register::<User>(1)?;
let user = User {
name: "Alice".to_string(),
age: 30,
};
let bytes = fory.serialize(&user)?;
let decoded: User = fory.deserialize(&bytes)?;
Register by Namespace
For cross-language compatibility, register with namespace and type name:
let mut fory = Fory::default()
.compatible(true)
.xlang(true);
// Register with namespace-based naming
fory.register_by_namespace::<MyStruct>("com.example", "MyStruct");
Register Custom Serializer
For types that need custom serialization logic:
let mut fory = Fory::default();
fory.register_serializer::<CustomType>(100);
Registration Order
When using ID-based registration without explicit IDs, the registration order matters. Ensure consistent registration order between serialization and deserialization:
// Serializer side
let mut fory = Fory::default();
fory.register::<TypeA>(1)?;
fory.register::<TypeB>(2)?;
fory.register::<TypeC>(3)?;
// Deserializer side - MUST use same order
let mut fory = Fory::default();
fory.register::<TypeA>(1)?;
fory.register::<TypeB>(2)?;
fory.register::<TypeC>(3)?;
Thread-Safe Registration
Perform all registrations before spawning threads:
use std::sync::Arc;
use std::thread;
let mut fory = Fory::default();
fory.register::<User>(1)?;
fory.register::<Order>(2)?;
// Now share across threads
let fory = Arc::new(fory);
let handles: Vec<_> = (0..4)
.map(|_| {
let shared = Arc::clone(&fory);
thread::spawn(move || {
// Use fory for serialization
})
})
.collect();
Best Practices
- Use consistent IDs: Same type ID across all languages for cross-language compatibility
- Register before threading: Complete all registrations before spawning threads
- Use namespace for xlang: Makes type names consistent across languages
- Explicit IDs for stability: Avoid auto-generated IDs in production
Related Topics
- Configuration - Fory builder options
- Cross-Language - XLANG mode registration
- Custom Serializers - Custom serialization