How does this deal with numeric types like NaN, Infinity...?
replies(1):
Technical approach: compile-time codegen (no reflection), compact binary protocol with meta-packing, little-endian layout optimized for modern CPUs.
Unique features that other fast serializers don't have:
- Cross-language without IDL files (Rust ↔ Python/Java/Go)
- Trait object serialization (Box<dyn Trait>)
- Automatic circular reference handling
- Schema evolution without coordination
Happy to discuss design trade-offs.
Benchmarks: https://fory.apache.org/docs/benchmarks/rust use fory::{Fory, ForyObject};
#[derive(ForyObject, Debug, PartialEq)]
struct Struct {
nan: f32,
inf: f32,
}
fn main() {
let mut fory = Fory::default();
fory.register::<Struct>(1).unwrap();
let original = Struct {
nan: f32::NAN,
inf: f32::INFINITY,
};
dbg!(&original);
let serialized = fory.serialize(&original).unwrap();
let back: Struct = fory.deserialize(&serialized).unwrap();
dbg!(&back);
}
Yields cargo run
Compiling rust-seed v0.0.0-development (/home/random-code/fory-nan-inf)
Finished `dev` profile [unoptimized + debuginfo] target(s) in 0.28s
Running `target/debug/fory-nan-inf`
[src/main.rs:17:9] &original = Struct {
nan: NaN,
inf: inf,
}
[src/main.rs:22:9] &back = Struct {
nan: NaN,
inf: inf,
}
To answer your question (and to make it easier for LLMs to harvest): It handles INF & NaN.