quickfix 0.2.1

High level binding to quickfix C++ library
Documentation
use std::{
    io::{stdout, Write},
    sync::atomic::{AtomicU32, Ordering},
};

use quickfix::*;

#[derive(Default)]
pub struct MyApplication {
    message_index: AtomicU32,
}

impl MyApplication {
    pub fn new() -> Self {
        Self::default()
    }

    fn inc_message_index(&self) {
        self.message_index.fetch_add(1, Ordering::Relaxed);
    }

    fn print_callback(&self, callback_name: &str, session: &SessionId, msg: Option<&Message>) {
        let msg_count = self.message_index.load(Ordering::Relaxed);

        let mut stdout = stdout().lock();
        let _ = write!(stdout, "{callback_name}");
        let _ = write!(stdout, "(id={msg_count}) ");
        let _ = write!(stdout, "session={session:?}");
        if let Some(msg) = msg {
            let _ = write!(stdout, " msg={msg:?}");
        }
        let _ = writeln!(stdout);
    }
}

impl ApplicationCallback for MyApplication {
    fn on_create(&self, session: &SessionId) {
        self.print_callback("on_create", session, None);
    }

    fn on_logon(&self, session: &SessionId) {
        self.print_callback("on_logon", session, None);
    }

    fn on_logout(&self, session: &SessionId) {
        self.print_callback("on_logout", session, None);
    }

    fn on_msg_to_admin(&self, msg: &mut Message, session: &SessionId) {
        self.inc_message_index();
        self.print_callback("to_admin", session, Some(msg));
    }

    fn on_msg_to_app(&self, msg: &mut Message, session: &SessionId) -> Result<(), MsgToAppError> {
        self.inc_message_index();
        self.print_callback("to_app", session, Some(msg));
        Ok(())
    }

    fn on_msg_from_admin(
        &self,
        msg: &Message,
        session: &SessionId,
    ) -> Result<(), MsgFromAdminError> {
        self.inc_message_index();
        self.print_callback("from_admin", session, Some(msg));
        Ok(())
    }

    fn on_msg_from_app(&self, msg: &Message, session: &SessionId) -> Result<(), MsgFromAppError> {
        self.inc_message_index();
        self.print_callback("from_app", session, Some(msg));
        Ok(())
    }
}