#fix #json #message-parser #fix-protocol

fixparser

一个用于解析 FIX 消息的 Rust/WASM 库

6 个版本

0.1.5 2020 年 6 月 28 日
0.1.4 2020 年 6 月 28 日

427WebAssembly

每月 21 次下载

MIT 许可证

21KB
356

fixparser

Crates.io Docs.rs

凭借 Rust + WASM,无需全局 FIX 字典即可解析 FIX 消息。

[dependencies]
fixparser = "0.1.5"

它目前支持以下输入/输出格式

输入

输出

  • Json (serde_json::value::Value)

在 WASM 中,输出是一个 JSON 字符串。

目标

拥有一个通用的低级机制,以便将 FIX 消息转换为更易于高级工具消费的形式。在这些工具中,您可以结合此库的输出(json)和 FIX 字典,让您的梦想成真 🤓。

示例

Rust

let input = "Recv | 8=FIX.4.4 | 555=2 | 600=CGY | 604=2 | 605=F7 | 605=CGYU0 | 600=CGY | 10=209";
println!("{}", fixparser::FixMessage::from_tag_value(&input).unwrap().to_json());
// this input has the non-printable SOH character (0x01) as the separator of the fields
let input = "8=FIX.4.4555=2600=CGY604=2605=F7605=CGYU0600=CGY10=209";
println!("{}", fixparser::FixMessage::from_tag_value(&input).unwrap().to_json());

对于这些示例中的任何一个,您都会得到以下输出

{"8":"FIX.4.4","555":[{"600":"CGY","604":[{"605":"F7"},{"605":"CGYU0"}]},{"600":"CGY"}],"10":"209"}

或者更简洁的(使用 jq

{
  "8": "FIX.4.4",
  "555": [
    {
      "600": "CGY",
      "604": [
        {
          "605": "F7"
        },
        {
          "605": "CGYU0"
        }
      ]
    },
    {
      "600": "CGY"
    }
  ],
  "10": "209"
}

试试看

cargo run --example from-stdin

WASM / JS

yarn add @whoan/fixparser
const js = import('@whoan/fixparser')
js.then(fixparser => console.log(fixparser.from_tag_value_to_json('8=FIX.4.4 | 10=909')))

优点

  • 支持重复组
  • 您不需要 FIX 字典。很容易创建一个工具来将输出(json)与字典结合
  • 只要它们是一致的,您就不需要指定输入字符串的分隔符。例如:0x01、| 等...
  • 您不需要修剪输入字符串,因为库可以检测消息的开始和结束
  • 您不需要在最后一个字段中使用分隔符(例如:SOH)
  • 它对消息进行最小验证,以允许解析具有错误值的 FIX 消息
  • 它提供了 WASM 绑定,以实现库的通用使用(例如:使用 wasmer

功能

您可以使用 debugging 功能调试库

fixparser = { version = "<version>", features = ["debugging"] }

希望拥有的功能

局限性

  • 在这种情况下,库需要做出假设,因为它没有字典就无法猜测格式。示例
8=FIX.4.4 | 1000=2 | 1001=1 | 1002=2 | 1001=10 | 1002=20 | 1003=30 | 10=209
              ^                                              ^
          group 1000                does 1003 belong to the second repetition of group 1000?

在这种情况下,它将假设 1003 不属于组。这样做,更容易与其他使用 FIX 字典的工具(即将推出?让我们看看)结合使用来修复它。

许可证

MIT

依赖关系

~4–6MB
~110K SLoC