Rust 序列化
Apache Fory™ Rust
Apache Fory™ 是一个极速的多语言序列化框架,由 JIT 编译和零拷贝技术驱动,在保持易用性和安全性的同时提供超高性能。
Rust 实现提供了多功能的高性能序列化,具备自动内存管理和编译时类型安全。
🚀 为什么选择 Apache Fory™ Rust?
- 🔥 极速性能:零拷贝反序列化和优化的二进制协议
- 🌍 跨语言:与 Java、Python、C++、Go、JavaScript 和 Rust 之间无缝序列化/反序列化数据
- 🎯 类型安全:通过派生宏进行编译时类型检查
- 🔄 循环引用:使用
Rc/Arc和弱指针自动追踪共享和循环引用 - 🧬 多态:使用
Box<dyn Trait>、Rc<dyn Trait>和Arc<dyn Trait>序列化 trait 对象 - 📦 Schema 演进:兼容模式支持独立的 schema 变更
- ⚡ 两种模式:对象图序列化和零拷贝的基于行的格式
📦 Crates
| Crate | 描述 | 版本 |
|---|---|---|
fory | 带派生宏的高级 API | https://crates.io/crates/fory |
fory-core | 核心序列化引擎 | https://crates.io/crates/fory-core |
fory-derive | 过程宏 | https://crates.io/crates/fory-derive |
🏃 快速开始
添加 Apache Fory™ 到你的 Cargo.toml:
[dependencies]
fory = "0.13"
基本示例
use fory::{Fory, Error, Reader};
use fory::ForyObject;
#[derive(ForyObject, Debug, PartialEq)]
struct User {
name: String,
age: i32,
email: String,
}
fn main() -> Result<(), Error> {
let mut fory = Fory::default();
fory.register::<User>(1)?;
let user = User {
name: "Alice".to_string(),
age: 30,
email: "alice@example.com".to_string(),
};
// 序列化
let bytes = fory.serialize(&user)?;
// 反序列化
let decoded: User = fory.deserialize(&bytes)?;
assert_eq!(user, decoded);
// 序列化到指定缓冲区
let mut buf: Vec<u8> = vec![];
fory.serialize_to(&user, &mut buf)?;
// 从指定缓冲区反序列化
let mut reader = Reader::new(&buf);
let decoded: User = fory.deserialize_from(&mut reader)?;
assert_eq!(user, decoded);
Ok(())
}