arthurlm / quickfix-rs

Unofficial rust binding of QuickFIX library
https://docs.rs/quickfix/latest/quickfix/
Other
13 stars 5 forks source link
finance fix fix-api fix-engine fix-protocol fixprotocol rust

QuickFIX Rust

CI workflow MSRV codecov dependency status

This project is an unofficial binding between quickfix library and Rust projects.

Features

Documentation

External website:

Examples

Here is the minimal application you can write to getting started with 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(())
}

You may consider checking out this directory for more examples.

Is it ready for production ?

Yes. But keep in mind that not every feature of the original FIX library are available. If some of your needs are missing: PR / feedbacks are welcomed 😁!

API MAY CHANGE IN FUTURE VERSION\ Crate is still in the reviewing process. Feel free to participate and share your point of view on this github issue.

NOTE: I am personally not using for now the generated message struct. I know they works fine thanks to unit tests and can be used in production code. Feedback on this part are welcomed !

Project status

I am not actively developing many more features to this project.\ To me it is actually pretty completed !

If something is missing to you, feel free to open an issue / create PR. Contribution are welcomed.

Build requirements

Following package must be install to build the library: