4个版本

0.1.4 2024年3月21日
0.1.3 2024年2月13日
0.1.1 2024年2月12日
0.1.0 2024年2月12日

15财务 中排名

Download history 85/week @ 2024-04-20 66/week @ 2024-04-27 92/week @ 2024-05-04 186/week @ 2024-05-11 162/week @ 2024-05-18 134/week @ 2024-05-25 119/week @ 2024-06-01 75/week @ 2024-06-08 101/week @ 2024-06-15 103/week @ 2024-06-22 10/week @ 2024-06-29 62/week @ 2024-07-06 284/week @ 2024-07-13 237/week @ 2024-07-20 244/week @ 2024-07-27 247/week @ 2024-08-03

1,017 每月下载量
用于 7 crates

MIT OR Apache-1.1

1MB
28K SLoC

C++ 25K SLoC // 0.1% comments Rust 2K SLoC // 0.1% comments C 190 SLoC // 0.3% comments Automake 186 SLoC Shell 11 SLoC // 0.4% comments

QuickFIX Rust

CI workflow MSRV codecov dependency status

本项目是非官方quickfix 库与Rust项目之间的绑定。

功能

  • quickfix 库之上提供基本的和安全性的API包装器。
  • 在Rust Tier 1支持的任何硬件和操作系统上运行(Windows 7+、MacOS 10.12+ 和 Linux)。
  • 由于项目分为最小的crates,因此仅包含和编译所需的内容。
  • 消息解码/编码包括运行时验证。
  • 支持FIX版本4x(版本5x可以从XML规范文件中本地构建)。
  • 基于规范的运行时消息验证。
  • 基于规范的生成类型安全的FIX消息、字段和重复组。
  • 会话状态存储选项:SQL、文件、内存。
  • 日志选项:stdout、stderr、log 或任何其他crate,如果您实现了自己的trait。

文档

外部网站

示例

以下是最简单的应用程序,可用于入门QuickFix

use std::{
    env,
    io::{stdin, Read},
    process::exit,
};

use quickfix::*;

#[derive(Default)]
pub struct MyApplication;

impl ApplicationCallback for MyApplication {
    // Implement whatever callback you need

    fn on_create(&self, _session: &SessionId) {
        // Do whatever you want here 😁
    }
}

fn main() -> Result<(), QuickFixError> {
    let args: Vec<_> = env::args().collect();
    let Some(config_file) = args.get(1) else {
        eprintln!("Bad program usage: {} <config_file>", args[0]);
        exit(1);
    };

    let settings = SessionSettings::try_from_path(config_file)?;
    let store_factory = FileMessageStoreFactory::try_new(&settings)?;
    let log_factory = LogFactory::try_new(&StdLogger::Stdout)?;
    let app = Application::try_new(&MyApplication)?;

    let mut acceptor = SocketAcceptor::try_new(&settings, &app, &store_factory, &log_factory)?;
    acceptor.start()?;

    println!(">> App running, press 'q' to quit");
    let mut stdin = stdin().lock();
    let mut stdin_buf = [0];
    loop {
        let _ = stdin.read_exact(&mut stdin_buf);
        if stdin_buf[0] == b'q' {
            break;
        }
    }

    acceptor.stop()?;
    Ok(())
}

您可以考虑查看这个目录以获取更多示例。

是否已准备好投入生产?

是的。但请注意,原始FIX库的并非所有功能都可用。如果您缺少某些需求:欢迎提交PR/反馈😁!

API可能会在未来版本中更改
该包仍在审查过程中。请随时参与并在此GitHub问题中分享您的观点。

注意:我个人目前不使用生成的消息结构体。我知道它们在单元测试中表现良好,可用于生产代码。欢迎对此部分提供反馈!

项目状态

我不会积极开发此项目的更多功能。
对我来说,它实际上已经相当完整了!

如果您缺少某些内容,请随时提出问题/创建PR。欢迎贡献。

构建要求

以下包必须安装才能构建库

  • cmake
  • C++编译器(具有C++17支持)
  • rustup / rustc / cargo(显然 😉)
  • rustfmt用于从规范自动生成消息。

依赖项

~0.3–1MB
~23K SLoC