15个版本
0.9.0 | 2021年1月24日 |
---|---|
0.8.1 | 2020年12月25日 |
0.7.16 | 2020年11月26日 |
#1425 in 编码
用于 persia-rpc
145KB
4K SLoC
示例
use std::borrow::Cow;
use persia_speedy::{Readable, Writable, Endianness};
#[derive(PartialEq, Debug, Readable, Writable)]
enum Enum {
A,
B,
C,
}
#[derive(PartialEq, Debug, Readable, Writable)]
struct Struct< 'a > {
number: u64,
string: String,
vector: Vec< u8 >,
cow: Cow< 'a, [i64] >,
float: f32,
enumeration: Enum
}
fn main() {
let original = Struct {
number: 0x12345678ABCDEF00,
string: "A totally pointless string".to_owned(),
vector: vec![ 1, 2, 3 ],
cow: Cow::Borrowed( &[ 4, 5, 6 ] ),
float: 3.1415,
enumeration: Enum::C
};
let endian = Endianness::LittleEndian;
let bytes = original.write_to_vec_with_ctx( endian ).unwrap();
let deserialized: Struct =
Struct::read_from_buffer_with_ctx( endian, &bytes ).unwrap();
assert_eq!( original, deserialized );
}
字段属性
#[persia_speedy(length= ...)]
可用于大多数标准容器以指定字段的长度。可以引用任何前面的字段。
例如
use persia_speedy::{Readable, Writable};
#[derive(Readable, Writable)]
struct Struct {
byte_count: u8,
#[speedy(length = byte_count / 4)]
data: Vec< u32 >
}
在序列化之前,您需要确保设置为 length
的值等于该字段的 .len()
;如果不是,则在尝试序列化时将得到错误。
设置此属性会按如下方式更改序列化格式
类型 | 序列化为 |
---|---|
Vec<T> |
[T] |
Cow<'a, [T]> |
[T] |
String |
[u8] |
Cow<'a, str> |
[u8] |
HashMap<K, V> |
[K,V] |
BTreeMap<K, V> |
[K,V] |
HashSet<T> |
[T] |
BTreeSet<T> |
[T] |
#[speedy(length_type= ...)]
可用于指定容器隐式长度字段在读取或写入时的确切大小。
可能值
u7
(与u8相同,但限制为7位,以与u64_varint
兼容)u8
u16
u32
(默认值)u64_varint
#[speedy(skip)]
在读取和写入时跳过给定的字段。
#[speedy(default_on_eof)]
如果在读取此字段时遇到EOF,则其值将设置为该类型的默认值,并且将忽略EOF。
#[speedy(constant_prefix= ...)]
指定一个静态字节数组,该数组将在给定字段之前写入或读取时存在。
枚举属性
#[speedy(tag_type= ...)]
可用于指定枚举标签在读取或写入时的确切大小。
可能值
u7
(与u8相同,但限制为7位,以与u64_varint
兼容)u8
u16
u32
(默认值)u64_varint
#[speedy(peek_tag)]
具有此属性的枚举在从流中读取时不会消耗其标签值,在写入时也不会写入其自己的标签。
枚举变体属性
#[speedy(tag= ...)]
指定用于给定枚举变体的预设标签值。
许可证
许可协议为以下之一
- Apache许可证,版本2.0,(LICENSE-APACHE 或 http://www.apache.org/licenses/LICENSE-2.0)
- MIT许可证(LICENSE-MIT 或 http://opensource.org/licenses/MIT)
由您选择。
贡献
除非您明确说明,否则根据Apache-2.0许可证定义,您有意提交的任何贡献,均应双重许可,如上所述,不附加任何额外条款或条件。
依赖关系
~5.5MB
~106K SLoC