Skip to main content

Crate fory

Crate fory 

Source
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> over S::Target for 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>.
ArcWeakSerializer
Statically composes ArcWeakSerializer<S> over S::Target for 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.
ArraySerializer
Statically serializes [S::Target; N] at roots or recursive carrier nodes.
BFloat16
BTreeMapSerializer
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.
BTreeSetSerializer
Statically composes BTreeSetSerializer<S> over S::Target for 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.
BinaryHeapSerializer
Statically composes BinaryHeapSerializer<S> over S::Target for 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> over S::Target for 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.
ForyBuilder
Builder for configuring a Fory instance before first use.
HashMapSerializer
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.
HashSetSerializer
Statically composes HashSetSerializer<S> over S::Target for 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.
LinkedListSerializer
Statically composes LinkedListSerializer<S> over S::Target for 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.
MutexSerializer
Statically composes MutexSerializer<S> over S::Target for 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.
OptionSerializer
Fory-owned static composition for Option<S::Target>.
RcSerializer
Statically composes RcSerializer<S> over S::Target for 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>.
RcWeakSerializer
Statically composes RcWeakSerializer<S> over S::Target for 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.
ReadContext
Deserialization state container used on a single thread at a time. Sharing the same instance across threads simultaneously causes undefined behavior.
Reader
RefCellSerializer
Statically composes RefCellSerializer<S> over S::Target for 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.
Tuple1Serializer
Statically serializes the recursively formed tuple of each child serializer’s Target at roots or recursive carrier nodes. This zero-sized carrier is not registered independently.
Tuple2Serializer
Statically serializes the recursively formed tuple of each child serializer’s Target at roots or recursive carrier nodes. This zero-sized carrier is not registered independently.
Tuple3Serializer
Statically serializes the recursively formed tuple of each child serializer’s Target at roots or recursive carrier nodes. This zero-sized carrier is not registered independently.
Tuple4Serializer
Statically serializes the recursively formed tuple of each child serializer’s Target at roots or recursive carrier nodes. This zero-sized carrier is not registered independently.
Tuple5Serializer
Statically serializes the recursively formed tuple of each child serializer’s Target at roots or recursive carrier nodes. This zero-sized carrier is not registered independently.
Tuple6Serializer
Statically serializes the recursively formed tuple of each child serializer’s Target at roots or recursive carrier nodes. This zero-sized carrier is not registered independently.
Tuple7Serializer
Statically serializes the recursively formed tuple of each child serializer’s Target at roots or recursive carrier nodes. This zero-sized carrier is not registered independently.
Tuple8Serializer
Statically serializes the recursively formed tuple of each child serializer’s Target at roots or recursive carrier nodes. This zero-sized carrier is not registered independently.
Tuple9Serializer
Statically serializes the recursively formed tuple of each child serializer’s Target at roots or recursive carrier nodes. This zero-sized carrier is not registered independently.
Tuple10Serializer
Statically serializes the recursively formed tuple of each child serializer’s Target at roots or recursive carrier nodes. This zero-sized carrier is not registered independently.
Tuple11Serializer
Statically serializes the recursively formed tuple of each child serializer’s Target at roots or recursive carrier nodes. This zero-sized carrier is not registered independently.
Tuple12Serializer
Statically serializes the recursively formed tuple of each child serializer’s Target at roots or recursive carrier nodes. This zero-sized carrier is not registered independently.
Tuple13Serializer
Statically serializes the recursively formed tuple of each child serializer’s Target at roots or recursive carrier nodes. This zero-sized carrier is not registered independently.
Tuple14Serializer
Statically serializes the recursively formed tuple of each child serializer’s Target at roots or recursive carrier nodes. This zero-sized carrier is not registered independently.
Tuple15Serializer
Statically serializes the recursively formed tuple of each child serializer’s Target at roots or recursive carrier nodes. This zero-sized carrier is not registered independently.
Tuple16Serializer
Statically serializes the recursively formed tuple of each child serializer’s Target at roots or recursive carrier nodes. This zero-sized carrier is not registered independently.
Tuple17Serializer
Statically serializes the recursively formed tuple of each child serializer’s Target at roots or recursive carrier nodes. This zero-sized carrier is not registered independently.
Tuple18Serializer
Statically serializes the recursively formed tuple of each child serializer’s Target at roots or recursive carrier nodes. This zero-sized carrier is not registered independently.
Tuple19Serializer
Statically serializes the recursively formed tuple of each child serializer’s Target at roots or recursive carrier nodes. This zero-sized carrier is not registered independently.
Tuple20Serializer
Statically serializes the recursively formed tuple of each child serializer’s Target at roots or recursive carrier nodes. This zero-sized carrier is not registered independently.
Tuple21Serializer
Statically serializes the recursively formed tuple of each child serializer’s Target at roots or recursive carrier nodes. This zero-sized carrier is not registered independently.
Tuple22Serializer
Statically serializes the recursively formed tuple of each child serializer’s Target at roots or recursive carrier nodes. This zero-sized carrier is not registered independently.
TypeResolver
TypeResolver is a resolver for fast type/serializer dispatch.
UnknownCase
VecDequeSerializer
Statically composes VecDequeSerializer<S> over S::Target for 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.
WriteContext
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§

ForyObject
Object-safe access to a concrete target’s Any identity.
Serializer
Static serialization behavior for one runtime Serializer::Target.
StructSerializer
Schema metadata and compatible reads for derive-generated serializers.

Functions§

from_row
to_row

Derive Macros§

ForyEnum
Derive macro for pure enum serialization.
ForyRow
Derive macro for row-based serialization.
ForyStruct
Derive macro for struct serialization.
ForyUnion
Derives serialization for data-carrying Rust enums.