1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
//! A Financial Information eXchange
//! ([FIX](https://www.fixtrading.org/standards/)) protocol implementation in Rust.
//!
//! FerrumFIX is a collection of reusable components to produce and consume
//! FIX-compliant data. It is *not* a FIX engine, although you can very easily
//! build one with FerrumFIX. FerrumFIX is intended to be:
//!
//! - **Comprehensive**. Most standards adopted by the FIX Community are
//! either available or planned, from session layers to encodings and
//! dictionary-related logic.
//! - **Foundational**. FerrumFIX is foundational in the sense that it exposes a
//! large amount of primitives in its public interface, so that users can
//! easily build upon them to implement custom solutions tailored for their
//! needs. You'll often find that there are many ways of doing the same thing.
//! It's up to you to choose whatever works best.
//! - **Unopinionated**. We try to provide good defaults, but you can discard
//! them entirely and provide your own should you choose to do so.
//! Customization is mostly done via Rust traits, which allows for inlining and
//! maintains great performance.
//! - **Fast**. Everything is planned around zero-copy and zero-allocations in
//! the hot paths.
//!
//! Please check out the [README](https://github.com/neysofu/fefix/) for more
//! general information regarding FerrumFIX.
//!
//! # Cargo features
//!
//! FerrumFIX puts a lot of functionality behind optional features in order to
//! optimize compilation times. The following features are available:
//!
//! ### `fix40`, `fix41`, `fix42`, `fix43`, `fix44`, `fix50`, `fix50sp1`, `fix50sp2`, `fixt11`
//!
//! Version-specific FIX utilities. See the modules within [`definitions`] and
//! the similarly named [`Dictionary`] methods.
//!
//! ### `utils-chrono`, `utils-decimal`, `utils-rust-decimal`
//!
//! [`FixValue`] implementations for third-party crates and type conversions.
//!
//! ### `utils-slog`
//!
//! Logging of [`tagvalue::Message`]s.
//!
//! ### `utils-bytes`, `utils-tokio`
//!
//! FIX decoders and encoders that integrate nicely with the Tokio ecosystem.
//!
//! ### `json-encoding`
//!
//! Decode and encode FIX messages with JSON.
//!
//! ### `codegen`
//!
//! This feature it intended to be used within Cargo's `[build-dependencies]`, like this:
//!
//! ```toml
//! fefix = { version = "0.1", features = ["codegen"] }
//! ```
//!
//! `codegen` allows you to generate Rust files with lots of FIX version
//! -specific constants, types, and documentation. This is not mandatory by any
//! means and you can decide to simply use [`Dictionary`], which provides
//! dynamic access to mostly the same information, but you'll lose on
//! performance, type safety, and quality of life. There's no reason not to use
//! `codegen` if your use case allows it (it likely does!).
//!
//! # FAQ
//!
//! - **Q.** I simply want to read FIX messages. Where do I start?
//! **A.** Use [`fefix::tagvalue::Decoder`](crate::tagvalue::Decoder) and
//! [`fefix::tagvalue::DecoderBuffered`](crate::tagvalue::DecoderBuffered).
//! The former is for individual messages, the latter is for streams.
//!
//! - **Q.** What about `serde` integration?
//! **A.** FIX semantics don't map well to `serde` and there are subtle
//! performance implications. It's not a good idea.
//!
//! # External resources
//!
//! - [`https://fixtrading.org/standards`](https://fixtrading.org/standards).
//! - [`https://fiximate.fixtrading.org`](https://fiximate.fixtrading.org).
//! - [`https://github.com/FIXTradingCommunity`](https://github.com/FIXTradingCommunity).
//! - [`https://forum.fixtrading.org`](https://forum.fixtrading.org).
// Only enables the `doc_cfg` feature when its feature is defined.
pub use codegen;
pub use Buffer;
pub use Dictionary;
pub use dict;
pub use TagU16;
pub use FixValue;
// We don't show derive macros to pollute the docs.
pub use FixValue;
/// Allows to get mutable and immutable references to configuration options.