Main idea of this project is to provide a minimal safe and working bridge between rust and C++ quickfix library.
Not all methods, functions, classes, nor features of the original library will be exposed to Rust crate. Target is just to have minimal features to create small and safe applications like:
- some program that can send order / receive messages to adjust strategy from.
- basic router with no smart order router capabilities.
What is already bind and working in this crate:
- Basic structure binding
Settings
/LogFactory
/MessageStoreFactory
/Message
/Group
/SessionID
/...
. - Reading / writing messages.
- Sending messages using session ID.
SocketAcceptor
/SocketInitiator
.Application
callbacks as a Rust trait.
What I do not plan to bind from this crate:
-
SSL support.
Use binary like
stunnel
to emulate the feature. It is simpler to use than the original SSL quickfix, even if it add some performances overhead. -
Python / Ruby binding.
Use original library instead obviously.
-
Threaded versions of socket acceptor / initiator.
Multithreading model is just too different between Rust / C++. It is much more simple to handle correctly multithreading from Rust side and use single thread C++ socket handler.
-
Autotools build toolchain.
Just use
cmake
once and for all ! We are in 2023+ and not targeting OS from the 80s. -
FIX 5x messages generated code.
FIX 5x XML definition is a little bit weird ... For example:
- In MatchType some tag is defined multiple times. Generated enum are so inconsistent and cannot be safely generated.
- There are probably other incompatibility but I stopped here ...
You can edit XML spec to your need and create a package with desired spec locally.
Check FAQ for more info on this. -
All binding of
LogFactory
.I just provide Rust standard trait. You can implement whatever you want using standard Rust crate and impl 3 callbacks (logger / redis / syslog / sql / ...).
Moreover Rust file descriptor are protected by mutex, so this avoid mixing log from C++ / Rust in the same program.
-
Custom
MessageStoreFactory
from rust.For now, only
FileMessageStoreFactory
andMemoryMessageStoreFactory
are bind. You can use also useMySqlMessageStoreFactory
andPostgresMessageStoreFactory
when enabling crate feature flag. Implementing message store from rust side is a little bit tricky and I am not 100% sure of the correct way to proceed. -
Exotic operating system.
AIX / Solaris are not targeted. They are not Rust Tier1 for now.