2 个版本

0.1.1 2021 年 4 月 2 日
0.1.0 2021 年 3 月 27 日

#2198 in 解析器实现

MIT 许可证

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