Expand description
Apache Fory’s public Rust facade.
Derive macros create serializers for local types:
use fory::{Fory, ForyStruct};
#[derive(ForyStruct)]
struct User {
name: String,
age: u32,
}
let mut fory = Fory::builder().xlang(false).build();
fory.register::<User>(100)?;
let bytes = fory.serialize(&User {
name: "Ada".to_owned(),
age: 37,
})?;
let user: User = fory.deserialize(&bytes)?;A local serializer can target a type owned by another crate. External structural
serializers use #[fory(target = path::Type)]; opaque or invariant-bearing targets use a
manual Serializer. The serializer is selected explicitly at a field with
#[fory(with = UserSerializer)] or at a root with the *_with API family:
let bytes = fory.serialize_with::<UserSerializer>(&external_user)?;
let user = fory.deserialize_with::<UserSerializer>(&bytes)?;
let mut buffer = Vec::new();
fory.serialize_to_with::<UserSerializer>(&mut buffer, &external_user)?;
let mut reader = fory::Reader::new(&buffer);
let user = fory.deserialize_from_with::<UserSerializer>(&mut reader)?;Fory-owned carrier serializers compose an external child at a root without changing the carrier’s standard wire representation:
use fory::{HashMapSerializer, VecSerializer};
type Users = VecSerializer<UserSerializer>;
type Directory = HashMapSerializer<String, Users>;
let bytes = fory.serialize_with::<Directory>(&directory)?;
let decoded = fory.deserialize_with::<Directory>(&bytes)?;Application traits extend ForyObject, not Serializer. The concrete target list is
closed by register_trait_type!, while each target’s registered serializer determines its
serialization:
use fory::{register_trait_type, ForyObject};
trait Animal: ForyObject {
fn name(&self) -> &str;
}
register_trait_type!(Animal, Dog, third_party::Cat);Use register_trait_type!(sync Trait, Targets...) for traits and targets that are
Send + Sync. The generated TraitRcSerializer and TraitArcSerializer types support
explicit Rc<dyn Trait> and Arc<dyn Trait> roots without wrapper values.
Macros§
- register_
trait_ type - Generates serializers for a closed set of concrete application-trait targets.
Structs§
- ArcSerializer
- Statically composes
ArcSerializer<S>overS::Targetfor serializer-selected roots and nested carrier composition. Generated fields may select this exact carrier or recursively select child serializers; both forms use the same carrier body implementation. This zero-sized carrier is not registered independently. - ArcWeak
- A serializable runtime wrapper around
std::sync::Weak<T>. - ArcWeak
Serializer - Statically composes
ArcWeakSerializer<S>overS::Targetfor serializer-selected roots and nested carrier composition. Generated fields may select this exact carrier or recursively select child serializers; both forms use the same carrier body implementation. This zero-sized carrier is not registered independently. - Array
Serializer - Statically serializes
[S::Target; N]at roots or recursive carrier nodes. - BFloat16
- BTree
MapSerializer - Statically serializes
BTreeMap<KS::Target, VS::Target>at roots or recursive carrier nodes. This zero-sized carrier composes its key and value serializers and is not registered independently. - BTree
SetSerializer - Statically composes
BTreeSetSerializer<S>overS::Targetfor serializer-selected roots and nested carrier composition. Generated fields may select this exact carrier or recursively select child serializers; both forms use the same carrier body implementation. This zero-sized carrier is not registered independently. - Binary
Heap Serializer - Statically composes
BinaryHeapSerializer<S>overS::Targetfor serializer-selected roots and nested carrier composition. Generated fields may select this exact carrier or recursively select child serializers; both forms use the same carrier body implementation. This zero-sized carrier is not registered independently. - BoxSerializer
- Statically composes
BoxSerializer<S>overS::Targetfor serializer-selected roots and nested carrier composition. Generated fields may select this exact carrier or recursively select child serializers; both forms use the same carrier body implementation. This zero-sized carrier is not registered independently. - Date
- Date without timezone, represented as signed days since Unix epoch.
- Decimal
- Duration
- Signed duration, represented as seconds and normalized nanoseconds.
- Float16
- IEEE 754 binary16 (half-precision) floating-point type.
- Fory
- The main Fory serialization framework instance.
- Fory
Builder - Builder for configuring a
Foryinstance before first use. - Hash
MapSerializer - Statically serializes
HashMap<KS::Target, VS::Target>at roots or recursive carrier nodes. This zero-sized carrier composes its key and value serializers and is not registered independently. - Hash
SetSerializer - Statically composes
HashSetSerializer<S>overS::Targetfor serializer-selected roots and nested carrier composition. Generated fields may select this exact carrier or recursively select child serializers; both forms use the same carrier body implementation. This zero-sized carrier is not registered independently. - Linked
List Serializer - Statically composes
LinkedListSerializer<S>overS::Targetfor serializer-selected roots and nested carrier composition. Generated fields may select this exact carrier or recursively select child serializers; both forms use the same carrier body implementation. This zero-sized carrier is not registered independently. - Mutex
Serializer - Statically composes
MutexSerializer<S>overS::Targetfor serializer-selected roots and nested carrier composition. Generated fields may select this exact carrier or recursively select child serializers; both forms use the same carrier body implementation. This zero-sized carrier is not registered independently. - Option
Serializer - Fory-owned static composition for
Option<S::Target>. - RcSerializer
- Statically composes
RcSerializer<S>overS::Targetfor serializer-selected roots and nested carrier composition. Generated fields may select this exact carrier or recursively select child serializers; both forms use the same carrier body implementation. This zero-sized carrier is not registered independently. - RcWeak
- A serializable runtime wrapper around
std::rc::Weak<T>. - RcWeak
Serializer - Statically composes
RcWeakSerializer<S>overS::Targetfor serializer-selected roots and nested carrier composition. Generated fields may select this exact carrier or recursively select child serializers; both forms use the same carrier body implementation. This zero-sized carrier is not registered independently. - Read
Context - Deserialization state container used on a single thread at a time. Sharing the same instance across threads simultaneously causes undefined behavior.
- Reader
- RefCell
Serializer - Statically composes
RefCellSerializer<S>overS::Targetfor serializer-selected roots and nested carrier composition. Generated fields may select this exact carrier or recursively select child serializers; both forms use the same carrier body implementation. This zero-sized carrier is not registered independently. - Timestamp
- Point in time, represented as seconds and nanoseconds since Unix epoch.
- Tuple1
Serializer - Statically serializes the recursively formed tuple of each child serializer’s
Targetat roots or recursive carrier nodes. This zero-sized carrier is not registered independently. - Tuple2
Serializer - Statically serializes the recursively formed tuple of each child serializer’s
Targetat roots or recursive carrier nodes. This zero-sized carrier is not registered independently. - Tuple3
Serializer - Statically serializes the recursively formed tuple of each child serializer’s
Targetat roots or recursive carrier nodes. This zero-sized carrier is not registered independently. - Tuple4
Serializer - Statically serializes the recursively formed tuple of each child serializer’s
Targetat roots or recursive carrier nodes. This zero-sized carrier is not registered independently. - Tuple5
Serializer - Statically serializes the recursively formed tuple of each child serializer’s
Targetat roots or recursive carrier nodes. This zero-sized carrier is not registered independently. - Tuple6
Serializer - Statically serializes the recursively formed tuple of each child serializer’s
Targetat roots or recursive carrier nodes. This zero-sized carrier is not registered independently. - Tuple7
Serializer - Statically serializes the recursively formed tuple of each child serializer’s
Targetat roots or recursive carrier nodes. This zero-sized carrier is not registered independently. - Tuple8
Serializer - Statically serializes the recursively formed tuple of each child serializer’s
Targetat roots or recursive carrier nodes. This zero-sized carrier is not registered independently. - Tuple9
Serializer - Statically serializes the recursively formed tuple of each child serializer’s
Targetat roots or recursive carrier nodes. This zero-sized carrier is not registered independently. - Tuple10
Serializer - Statically serializes the recursively formed tuple of each child serializer’s
Targetat roots or recursive carrier nodes. This zero-sized carrier is not registered independently. - Tuple11
Serializer - Statically serializes the recursively formed tuple of each child serializer’s
Targetat roots or recursive carrier nodes. This zero-sized carrier is not registered independently. - Tuple12
Serializer - Statically serializes the recursively formed tuple of each child serializer’s
Targetat roots or recursive carrier nodes. This zero-sized carrier is not registered independently. - Tuple13
Serializer - Statically serializes the recursively formed tuple of each child serializer’s
Targetat roots or recursive carrier nodes. This zero-sized carrier is not registered independently. - Tuple14
Serializer - Statically serializes the recursively formed tuple of each child serializer’s
Targetat roots or recursive carrier nodes. This zero-sized carrier is not registered independently. - Tuple15
Serializer - Statically serializes the recursively formed tuple of each child serializer’s
Targetat roots or recursive carrier nodes. This zero-sized carrier is not registered independently. - Tuple16
Serializer - Statically serializes the recursively formed tuple of each child serializer’s
Targetat roots or recursive carrier nodes. This zero-sized carrier is not registered independently. - Tuple17
Serializer - Statically serializes the recursively formed tuple of each child serializer’s
Targetat roots or recursive carrier nodes. This zero-sized carrier is not registered independently. - Tuple18
Serializer - Statically serializes the recursively formed tuple of each child serializer’s
Targetat roots or recursive carrier nodes. This zero-sized carrier is not registered independently. - Tuple19
Serializer - Statically serializes the recursively formed tuple of each child serializer’s
Targetat roots or recursive carrier nodes. This zero-sized carrier is not registered independently. - Tuple20
Serializer - Statically serializes the recursively formed tuple of each child serializer’s
Targetat roots or recursive carrier nodes. This zero-sized carrier is not registered independently. - Tuple21
Serializer - Statically serializes the recursively formed tuple of each child serializer’s
Targetat roots or recursive carrier nodes. This zero-sized carrier is not registered independently. - Tuple22
Serializer - Statically serializes the recursively formed tuple of each child serializer’s
Targetat roots or recursive carrier nodes. This zero-sized carrier is not registered independently. - Type
Resolver - TypeResolver is a resolver for fast type/serializer dispatch.
- Unknown
Case - VecDeque
Serializer - Statically composes
VecDequeSerializer<S>overS::Targetfor serializer-selected roots and nested carrier composition. Generated fields may select this exact carrier or recursively select child serializers; both forms use the same carrier body implementation. This zero-sized carrier is not registered independently. - VecSerializer
- Statically serializes
Vec<S::Target>at roots or recursive carrier nodes. - Write
Context - Serialization state container used on a single thread at a time. Sharing the same instance across threads simultaneously causes undefined behavior.
- Writer
Enums§
- Error
- Error type for Fory serialization and deserialization operations.
- RefFlag
- RefMode
- Controls how reference and null flags are handled during serialization.
- TypeId
Traits§
- Fory
Object - Object-safe access to a concrete target’s
Anyidentity. - Serializer
- Static serialization behavior for one runtime
Serializer::Target. - Struct
Serializer - Schema metadata and compatible reads for derive-generated serializers.
Functions§
Derive Macros§
- Fory
Enum - Derive macro for pure enum serialization.
- ForyRow
- Derive macro for row-based serialization.
- Fory
Struct - Derive macro for struct serialization.
- Fory
Union - Derives serialization for data-carrying Rust enums.