1个不稳定版本

使用旧的Rust 2015

0.1.0 2016年9月19日

#25#cql

Apache-2.0/MIT

1KB

CQL协议

为Rust实现的CQL二进制协议的底层实现。

提供用于序列化和解析CQL实现用于通信的请求和响应消息的方法。

通常向服务器发送消息的方式可能是...

let startup = cql::requests::Startup {
    cqlversion: cql::types::CqlVersion::V_3_0_0,
    compression: cql::types::Compression::LZ4,
}

let mut body_buf = Vec::new();
let length = startup.serialize(&mut buf).unwrap();
let frame = cql::frame::Frame {
    version: cql::frame::Version::RequestV3,
    flags: cql::frame::flags::None,
    stream: 0,
    opcode: cql::frame::OpCode::Startup,
    length: length
};
let mut header_buf = Vec::new();
frame.serialize(&mut header_buf);
socket.write(header_buf);
socket.write(body_buf);

接收消息的工作方式类似,但你需要构建一个缓冲区,直到整个解析工作完成。所需长度已给出。每个帧头为9字节,必须先解码。消息长度在帧头中给出。

match cql::response::Response::parse(input_buf) {
    Err(err) => panic!(err), // do something smart here
    Ok(result) => {
        // result is a ParseResult and must be used to determine what is needed
        match result {
            Complete { message: message, consumed: consumed } => {
                println!("got message {:?}, consumed {}", message, consumed);
            },
            Incomplete { required_size: Some(required) } => {
                println!("buffer does not contain enough of the message, parsing knows it needs {} bytes", n);
            },
            Incomplete { required_size: None } => {
                println!("buffer needs unknown more bytes, but keep feeding!");
            }
        }
    }
}

无运行时依赖