2 个版本
0.1.1 | 2021 年 4 月 2 日 |
---|---|
0.1.0 | 2021 年 3 月 27 日 |
#2198 in 解析器实现
35KB
721 代码行
使用原生 Rust 连接到 kdb+ 服务。提供对 kdb+ 连接的支持,使用未压缩序列化和反序列化,遵循 Kx 文档。
功能
- 完全使用稳定功能以 Rust 原生方式编写
- 利用 Rust 的类型和枚举系统与 kdb+ 类型系统完美匹配
- 输出可读于 kdb+ 的格式
rsq::KObj
,例如(`TSLA;`Q;653.20;200)
- 支持原子类型(0-19h)、列表、字典和表格
缺点
由于 rsq
是完全用 Rust 编写的,因此它可以在语言的任何稳定版本上运行。这牺牲了不使用压缩/解压缩的能力,这仅使用专有 Kx 提供的 c.so
才能实现。因此,这个库主要用于不需要压缩的应用程序。这包括 feedhandlers、实时消费者等,因为 kdb+ 仅在某些条件下压缩 。
使用方法
将以下内容放入您的 Cargo.toml
[dependencies]
rsq = "0.1"
示例
股票行情订阅者
以下代码将订阅所有符号的普通股票行情,并使用基本的 println!
宏将实时数据打印到 stdout
use rsq::{Kdb, KObj, KType};
let mut kdb = Kdb::new("localhost", 5001, "username", "password");
kdb.send_async(&KObj::List(vec![
KObj::Atom(KType::Symbol(".u.sub".to_string())),
KObj::Atom(KType::Symbol("trade".to_string())),
KObj::Atom(KType::Symbol("".to_string()))
])).unwrap();
loop {
println!("{}",kdb.read());
};
输出
(`upd;`trade;flip (`time;`sym;`price;`size)!((enlist 20:57:00.000);(enlist `TSLA);(enlist 653.1f);(enlist 50j)))
(`upd;`trade;flip (`time;`sym;`price;`size)!((enlist 20:59:00.000);(enlist `TSLA);(enlist 653.2f);(enlist 30j)))
(`upd;`trade;flip (`time;`sym;`price;`size)!((enlist 20:59:30.000);(enlist `TSLA);(enlist 653.1f);(enlist 100j)))
依赖项
~1.5MB
~27K SLoC