8个版本

0.1.7 2022年5月9日
0.1.6 2022年5月9日

#138 in #protocol

MIT/Apache

42KB
1K SLoC

rt_proto

tickbh rust二进制协议

支持类型

基本类型包含"u8", "i8", "u16", "i16", "u32", "i32", "u64", "i64", "varint", "float", "string", "raw", "map", "array"等

示例proto

extern crate rt_proto as rt;
use rt::{Value, Buffer};

use std::collections::{HashMap};
fn main()
{
    println!("welcome to tickdream rust protocol");

    let mut hash_value = HashMap::<Value, Value>::new();
    hash_value.insert(Value::Str("name".to_string()), Value::Str("I'm a chinese people".to_string()));
    hash_value.insert(Value::Str("sub_name".to_string()), Value::Str("tickdream".to_string()));
    hash_value.insert(Value::Str("index".to_string()), Value::U16(1 as u16));

    {
        let mut buffer = Buffer::new();
        rt::encode_proto(&mut buffer, &"cmd_test_op".to_string(), vec![Value::Map(hash_value.clone())]).unwrap();

        // just read field
        let read = rt::decode_proto(&mut buffer).unwrap();
        match read {
            (name, val) => {
                assert_eq!(name, "cmd_test_op".to_string());
                assert_eq!(val[0], Value::Map(hash_value));
                assert_eq!(val.len(), 1);
            }
        }
    }
}

它将Vec编码为proto名称,如"cmd_test_op"定义的参数是[map]

兼容性

它将确保解码后的数据最大兼容性

  • 旧协议可以解码新协议,如果新协议没有更改旧字段信息,但会丢失一些信息
  • 新协议可以解码旧协议的所有数据

依赖关系

~225KB