Crates.io | fixparser |
lib.rs | fixparser |
version | 0.1.5 |
source | src |
created_at | 2020-06-23 04:00:14.006961 |
updated_at | 2020-06-28 21:25:31.688522 |
description | A Rust/WASM library to parse FIX messages. |
homepage | https://github.com/whoan/fixparser |
repository | https://github.com/whoan/fixparser |
max_upload_size | |
id | 256956 |
size | 38,423 |
Parse FIX messages without a FIX dictionary universally thanks to Rust + WASM.
[dependencies]
fixparser = "0.1.5"
It currently supports the following input/output formats:
Input:
Output:
serde_json::value::Value
)In WASM, the output is a JSON string.
To have a universal low-level mechanism to convert FIX messages to something easier to consume by higher-level tools. In such tools, you can combine the output of this library (json) with a FIX dictionary and let your dreams come true :nerd_face:.
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());
For any of those examples you will have this output:
{"8":"FIX.4.4","555":[{"600":"CGY","604":[{"605":"F7"},{"605":"CGYU0"}]},{"600":"CGY"}],"10":"209"}
Or prettier (jq
'ed):
{
"8": "FIX.4.4",
"555": [
{
"600": "CGY",
"604": [
{
"605": "F7"
},
{
"605": "CGYU0"
}
]
},
{
"600": "CGY"
}
],
"10": "209"
}
Give it a try:
cargo run --example from-stdin
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')))
You can debug the library using the debugging
feature:
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?
In such a scenario, it will assume 1003 does NOT belong to the group. Doing so, it's easier to fix it with the help of other tools which use FIX dictionaries (coming soon? let's see).