1#![allow(non_camel_case_types)]
2#![allow(non_snake_case)]
3
4use std::{ffi, ptr::NonNull};
10
11pub const CALLBACK_OK: i8 = 0;
12pub const CALLBACK_RESULT_DO_NOT_SEND: i8 = -1;
13pub const CALLBACK_RESULT_FIELD_NOT_FOUND: i8 = -2;
14pub const CALLBACK_RESULT_INCORRECT_DATA_FORMAT: i8 = -3;
15pub const CALLBACK_RESULT_INCORRECT_TAG_VALUE: i8 = -4;
16pub const CALLBACK_RESULT_REJECT_LOGON: i8 = -5;
17pub const CALLBACK_RESULT_UNSUPPORTED_MESSAGE_TYPE: i8 = -6;
18
19pub type NullableCStr = Option<NonNull<ffi::c_char>>;
20
21#[derive(Debug, Clone, Copy, PartialEq, Eq)]
22#[repr(transparent)]
23pub struct FixSessionSettings_t(NonNull<ffi::c_void>);
24
25#[derive(Debug, Clone, Copy, PartialEq, Eq)]
26#[repr(transparent)]
27pub struct FixDictionary_t(NonNull<ffi::c_void>);
28
29#[derive(Debug, Clone, Copy, PartialEq, Eq)]
30#[repr(transparent)]
31pub struct FixDataDictionary_t(NonNull<ffi::c_void>);
32
33#[derive(Debug, Clone, Copy, PartialEq, Eq)]
34#[repr(transparent)]
35pub struct FixMessageStoreFactory_t(NonNull<ffi::c_void>);
36
37#[derive(Debug, Clone, Copy, PartialEq, Eq)]
38#[repr(transparent)]
39pub struct FixLogFactory_t(NonNull<ffi::c_void>);
40
41#[derive(Debug, Clone, Copy, PartialEq, Eq)]
42#[repr(transparent)]
43pub struct FixApplication_t(NonNull<ffi::c_void>);
44
45#[derive(Debug, Clone, Copy, PartialEq, Eq)]
46#[repr(transparent)]
47pub struct FixSession_t(NonNull<ffi::c_void>);
48
49#[derive(Debug, Clone, Copy, PartialEq, Eq)]
50#[repr(transparent)]
51pub struct FixSessionID_t(NonNull<ffi::c_void>);
52
53#[derive(Debug, Clone, Copy, PartialEq, Eq)]
54#[repr(transparent)]
55pub struct FixMessage_t(NonNull<ffi::c_void>);
56
57#[derive(Debug, Clone, Copy, PartialEq, Eq)]
58#[repr(transparent)]
59pub struct FixAcceptor_t(NonNull<ffi::c_void>);
60
61#[derive(Debug, Clone, Copy, PartialEq, Eq)]
62#[repr(transparent)]
63pub struct FixInitiator_t(NonNull<ffi::c_void>);
64
65#[derive(Debug, Clone, Copy, PartialEq, Eq)]
66#[repr(transparent)]
67pub struct FixHeader_t(NonNull<ffi::c_void>);
68
69#[derive(Debug, Clone, Copy, PartialEq, Eq)]
70#[repr(transparent)]
71pub struct FixTrailer_t(NonNull<ffi::c_void>);
72
73#[derive(Debug, Clone, Copy, PartialEq, Eq)]
74#[repr(transparent)]
75pub struct FixGroup_t(NonNull<ffi::c_void>);
76
77#[derive(Debug, Clone, Copy)]
78#[repr(C)]
79pub struct FixApplicationCallbacks_t {
80 pub onCreate: extern "C" fn(*const ffi::c_void, FixSessionID_t),
81 pub onLogon: extern "C" fn(*const ffi::c_void, FixSessionID_t),
82 pub onLogout: extern "C" fn(*const ffi::c_void, FixSessionID_t),
83 pub toAdmin: extern "C" fn(*const ffi::c_void, FixMessage_t, FixSessionID_t),
84 pub toApp: extern "C" fn(*const ffi::c_void, FixMessage_t, FixSessionID_t) -> i8,
85 pub fromAdmin: extern "C" fn(*const ffi::c_void, FixMessage_t, FixSessionID_t) -> i8,
86 pub fromApp: extern "C" fn(*const ffi::c_void, FixMessage_t, FixSessionID_t) -> i8,
87}
88
89#[derive(Debug, Clone, Copy)]
90#[repr(C)]
91pub struct FixLogCallbacks_t {
92 pub onIncoming: extern "C" fn(
93 data: *const ffi::c_void,
94 sessionId: Option<FixSessionID_t>,
95 msg: *const ffi::c_char,
96 ),
97 pub onOutgoing: extern "C" fn(
98 data: *const ffi::c_void,
99 sessionId: Option<FixSessionID_t>,
100 msg: *const ffi::c_char,
101 ),
102 pub onEvent: extern "C" fn(
103 data: *const ffi::c_void,
104 sessionId: Option<FixSessionID_t>,
105 msg: *const ffi::c_char,
106 ),
107}
108
109#[link(name = "quickfixbind")]
110extern "C" {
111
112 pub fn Fix_getLastErrorMessage() -> Option<NonNull<ffi::c_char>>;
115
116 pub fn Fix_getLastErrorCode() -> i8;
117
118 pub fn Fix_clearLastErrorMessage();
119
120 pub fn FixSessionSettings_new() -> Option<FixSessionSettings_t>;
123
124 pub fn FixSessionSettings_fromPath(
125 configPath: *const ffi::c_char,
126 ) -> Option<FixSessionSettings_t>;
127
128 pub fn FixSessionSettings_getGlobalRef(obj: FixSessionSettings_t) -> Option<FixDictionary_t>;
129
130 pub fn FixSessionSettings_getSessionRef(
131 obj: FixSessionSettings_t,
132 id: FixSessionID_t,
133 ) -> Option<FixDictionary_t>;
134
135 #[must_use]
136 pub fn FixSessionSettings_setGlobal(obj: FixSessionSettings_t, value: FixDictionary_t) -> i8;
137
138 #[must_use]
139 pub fn FixSessionSettings_setSession(
140 obj: FixSessionSettings_t,
141 id: FixSessionID_t,
142 value: FixDictionary_t,
143 ) -> i8;
144
145 pub fn FixSessionSettings_delete(obj: FixSessionSettings_t);
146
147 pub fn FixDictionary_new(name: *const ffi::c_char) -> Option<FixDictionary_t>;
150
151 #[must_use]
152 pub fn FixDictionary_setString(
153 obj: FixDictionary_t,
154 key: *const ffi::c_char,
155 value: *const ffi::c_char,
156 ) -> i8;
157
158 #[must_use]
159 pub fn FixDictionary_setInt(obj: FixDictionary_t, key: *const ffi::c_char, value: i32) -> i8;
160
161 #[must_use]
162 pub fn FixDictionary_setDouble(obj: FixDictionary_t, key: *const ffi::c_char, value: f64)
163 -> i8;
164
165 #[must_use]
166 pub fn FixDictionary_setBool(obj: FixDictionary_t, key: *const ffi::c_char, value: i8) -> i8;
167
168 #[must_use]
169 pub fn FixDictionary_setDay(obj: FixDictionary_t, key: *const ffi::c_char, value: i32) -> i8;
170
171 pub fn FixDictionary_getStringLen(obj: FixDictionary_t, key: *const ffi::c_char) -> i64;
172
173 #[must_use]
174 pub fn FixDictionary_readString(
175 obj: FixDictionary_t,
176 key: *const ffi::c_char,
177 buffer: *mut ffi::c_char,
178 buffer_len: u64,
179 ) -> i8;
180
181 pub fn FixDictionary_getInt(obj: FixDictionary_t, key: *const ffi::c_char) -> i32;
182
183 pub fn FixDictionary_getDouble(obj: FixDictionary_t, key: *const ffi::c_char) -> f64;
184
185 pub fn FixDictionary_getBool(obj: FixDictionary_t, key: *const ffi::c_char) -> i8;
186
187 pub fn FixDictionary_getDay(obj: FixDictionary_t, key: *const ffi::c_char) -> i32;
188
189 pub fn FixDictionary_hasKey(obj: FixDictionary_t, key: *const ffi::c_char) -> i8;
190
191 pub fn FixDictionary_delete(obj: FixDictionary_t);
192
193 pub fn FixDataDictionary_new() -> Option<FixDataDictionary_t>;
196
197 pub fn FixDataDictionary_fromPath(
198 configPath: *const ffi::c_char,
199 ) -> Option<FixDataDictionary_t>;
200
201 pub fn FixDataDictionary_delete(obj: FixDataDictionary_t);
202
203 pub fn FixFileMessageStoreFactory_new(
206 settings: FixSessionSettings_t,
207 ) -> Option<FixMessageStoreFactory_t>;
208
209 pub fn FixMemoryMessageStoreFactory_new() -> Option<FixMessageStoreFactory_t>;
210
211 pub fn FixNullMessageStoreFactory_new() -> Option<FixMessageStoreFactory_t>;
212
213 #[cfg(feature = "build-with-mysql")]
214 pub fn FixMysqlMessageStoreFactory_new(
215 settings: FixSessionSettings_t,
216 ) -> Option<FixMessageStoreFactory_t>;
217
218 #[cfg(feature = "build-with-postgres")]
219 pub fn FixPostgresMessageStoreFactory_new(
220 settings: FixSessionSettings_t,
221 ) -> Option<FixMessageStoreFactory_t>;
222
223 pub fn FixMessageStoreFactory_delete(obj: FixMessageStoreFactory_t);
224
225 pub fn FixLogFactory_new(
228 data: *const ffi::c_void,
229 callbacks: *const FixLogCallbacks_t,
230 ) -> Option<FixLogFactory_t>;
231
232 pub fn FixLogFactory_delete(obj: FixLogFactory_t);
233
234 pub fn FixApplication_new(
237 data: *const ffi::c_void,
238 callbacks: *const FixApplicationCallbacks_t,
239 ) -> Option<FixApplication_t>;
240
241 pub fn FixApplication_delete(obj: FixApplication_t);
242
243 pub fn FixAcceptor_new(
246 application: FixApplication_t,
247 storeFactory: FixMessageStoreFactory_t,
248 settings: FixSessionSettings_t,
249 logFactory: FixLogFactory_t,
250 isMultiThreaded: i8,
251 isSslEnabled: i8,
252 ) -> Option<FixAcceptor_t>;
253
254 #[must_use]
255 pub fn FixAcceptor_start(obj: FixAcceptor_t) -> i8;
256
257 #[must_use]
258 pub fn FixAcceptor_block(obj: FixAcceptor_t) -> i8;
259
260 #[must_use]
261 pub fn FixAcceptor_poll(obj: FixAcceptor_t) -> i8;
262
263 #[must_use]
264 pub fn FixAcceptor_stop(obj: FixAcceptor_t) -> i8;
265
266 #[must_use]
267 pub fn FixAcceptor_isLoggedOn(obj: FixAcceptor_t) -> i8;
268
269 #[must_use]
270 pub fn FixAcceptor_isStopped(obj: FixAcceptor_t) -> i8;
271
272 pub fn FixAcceptor_getSession(
273 obj: FixAcceptor_t,
274 sessionId: FixSessionID_t,
275 ) -> Option<FixSession_t>;
276
277 pub fn FixAcceptor_delete(obj: FixAcceptor_t);
278
279 pub fn FixInitiator_new(
282 application: FixApplication_t,
283 storeFactory: FixMessageStoreFactory_t,
284 settings: FixSessionSettings_t,
285 logFactory: FixLogFactory_t,
286 isMultiThreaded: i8,
287 isSslEnabled: i8,
288 ) -> Option<FixInitiator_t>;
289
290 #[must_use]
291 pub fn FixInitiator_start(obj: FixInitiator_t) -> i8;
292
293 #[must_use]
294 pub fn FixInitiator_block(obj: FixInitiator_t) -> i8;
295
296 #[must_use]
297 pub fn FixInitiator_poll(obj: FixInitiator_t) -> i8;
298
299 #[must_use]
300 pub fn FixInitiator_stop(obj: FixInitiator_t) -> i8;
301
302 #[must_use]
303 pub fn FixInitiator_isLoggedOn(obj: FixInitiator_t) -> i8;
304
305 #[must_use]
306 pub fn FixInitiator_isStopped(obj: FixInitiator_t) -> i8;
307
308 pub fn FixInitiator_getSession(
309 obj: FixInitiator_t,
310 sessionId: FixSessionID_t,
311 ) -> Option<FixSession_t>;
312
313 pub fn FixInitiator_delete(obj: FixInitiator_t);
314
315 pub fn FixSessionID_new(
318 beginString: *const ffi::c_char,
319 senderCompID: *const ffi::c_char,
320 targetCompID: *const ffi::c_char,
321 sessionQualifier: *const ffi::c_char,
322 ) -> Option<FixSessionID_t>;
323
324 pub fn FixSessionID_copy(src: FixSessionID_t) -> Option<FixSessionID_t>;
325
326 pub fn FixSessionID_getBeginString(obj: FixSessionID_t) -> NullableCStr;
327
328 pub fn FixSessionID_getSenderCompID(obj: FixSessionID_t) -> NullableCStr;
329
330 pub fn FixSessionID_getTargetCompID(obj: FixSessionID_t) -> NullableCStr;
331
332 pub fn FixSessionID_getSessionQualifier(obj: FixSessionID_t) -> NullableCStr;
333
334 pub fn FixSessionID_isFIXT(obj: FixSessionID_t) -> i8;
335
336 pub fn FixSessionID_toString(obj: FixSessionID_t) -> NullableCStr;
337
338 pub fn FixSessionID_delete(obj: FixSessionID_t);
339
340 pub fn FixMessage_new() -> Option<FixMessage_t>;
343
344 pub fn FixMessage_copy(src: FixMessage_t) -> Option<FixMessage_t>;
345
346 pub fn FixMessage_fromString(text: *const ffi::c_char) -> Option<FixMessage_t>;
347
348 pub fn FixMessage_fromStringAndDictionary(
349 text: *const ffi::c_char,
350 dictionary: FixDataDictionary_t,
351 ) -> Option<FixMessage_t>;
352
353 #[must_use]
354 pub fn FixMessage_setField(obj: FixMessage_t, tag: i32, value: *const ffi::c_char) -> i8;
355
356 #[must_use]
357 pub fn FixMessage_getField(obj: FixMessage_t, tag: i32) -> NullableCStr;
358
359 #[must_use]
360 pub fn FixMessage_removeField(obj: FixMessage_t, tag: i32) -> i8;
361
362 #[must_use]
363 pub fn FixMessage_addGroup(obj: FixMessage_t, group: FixGroup_t) -> i8;
364
365 pub fn FixMessage_getStringLen(obj: FixMessage_t) -> i64;
366
367 #[must_use]
368 pub fn FixMessage_readString(
369 obj: FixMessage_t,
370 buffer: *mut ffi::c_char,
371 buffer_len: u64,
372 ) -> i8;
373
374 pub fn FixMessage_delete(obj: FixMessage_t);
375
376 pub fn FixHeader_new() -> Option<FixHeader_t>;
379
380 pub fn FixHeader_copy(src: FixHeader_t) -> Option<FixHeader_t>;
381
382 pub fn FixMessage_copyHeader(obj: FixMessage_t) -> Option<FixHeader_t>;
383
384 pub fn FixMessage_getHeaderRef(obj: FixMessage_t) -> Option<FixHeader_t>;
385
386 pub fn FixHeader_getField(obj: FixHeader_t, tag: i32) -> NullableCStr;
387
388 #[must_use]
389 pub fn FixHeader_setField(obj: FixHeader_t, tag: i32, value: *const ffi::c_char) -> i8;
390
391 #[must_use]
392 pub fn FixHeader_removeField(obj: FixHeader_t, tag: i32) -> i8;
393
394 #[must_use]
395 pub fn FixHeader_addGroup(obj: FixHeader_t, group: FixGroup_t) -> i8;
396
397 pub fn FixHeader_delete(obj: FixHeader_t);
398
399 pub fn FixTrailer_new() -> Option<FixTrailer_t>;
402
403 pub fn FixTrailer_copy(src: FixTrailer_t) -> Option<FixTrailer_t>;
404
405 pub fn FixMessage_copyTrailer(obj: FixMessage_t) -> Option<FixTrailer_t>;
406
407 pub fn FixMessage_getTrailerRef(obj: FixMessage_t) -> Option<FixTrailer_t>;
408
409 pub fn FixTrailer_getField(obj: FixTrailer_t, tag: i32) -> NullableCStr;
410
411 #[must_use]
412 pub fn FixTrailer_setField(obj: FixTrailer_t, tag: i32, value: *const ffi::c_char) -> i8;
413
414 #[must_use]
415 pub fn FixTrailer_removeField(obj: FixTrailer_t, tag: i32) -> i8;
416
417 #[must_use]
418 pub fn FixTrailer_addGroup(obj: FixTrailer_t, group: FixGroup_t) -> i8;
419
420 pub fn FixTrailer_delete(obj: FixTrailer_t);
421
422 pub fn FixGroup_new(fieldId: i32, delim: i32, order: *const i32) -> Option<FixGroup_t>;
425
426 pub fn FixGroup_copy(src: FixGroup_t) -> Option<FixGroup_t>;
427
428 pub fn FixMessage_copyGroup(obj: FixMessage_t, num: i32, tag: i32) -> Option<FixGroup_t>;
429
430 pub fn FixHeader_copyGroup(obj: FixHeader_t, num: i32, tag: i32) -> Option<FixGroup_t>;
431
432 pub fn FixTrailer_copyGroup(obj: FixTrailer_t, num: i32, tag: i32) -> Option<FixGroup_t>;
433
434 pub fn FixGroup_copyGroup(obj: FixGroup_t, num: i32, tag: i32) -> Option<FixGroup_t>;
435
436 pub fn FixMessage_getGroupRef(obj: FixMessage_t, num: i32, tag: i32) -> Option<FixGroup_t>;
437
438 pub fn FixGroup_getFieldId(obj: FixGroup_t) -> i32;
439
440 pub fn FixGroup_getDelim(obj: FixGroup_t) -> i32;
441
442 pub fn FixGroup_getField(obj: FixGroup_t, tag: i32) -> NullableCStr;
443
444 #[must_use]
445 pub fn FixGroup_setField(obj: FixGroup_t, tag: i32, value: *const ffi::c_char) -> i8;
446
447 #[must_use]
448 pub fn FixGroup_removeField(obj: FixGroup_t, tag: i32) -> i8;
449
450 #[must_use]
451 pub fn FixGroup_addGroup(obj: FixGroup_t, group: FixGroup_t) -> i8;
452
453 pub fn FixGroup_delete(obj: FixGroup_t);
454
455 pub fn FixSession_sendToTarget(msg: FixMessage_t, session_id: FixSessionID_t) -> i8;
458 pub fn FixSession_lookup(session_id: FixSessionID_t) -> Option<FixSession_t>;
459 #[must_use]
460 pub fn FixSession_logout(session: FixSession_t) -> i8;
461 #[must_use]
462 pub fn FixSession_isLoggedOn(session: FixSession_t) -> i8;
463 #[must_use]
464 pub fn FixSession_send(session: FixSession_t, msg: FixMessage_t) -> i8;
465 #[must_use]
466 pub fn FixSession_reset(session: FixSession_t) -> i8;
467 #[must_use]
468 pub fn FixSession_logon(session: FixSession_t) -> i8;
469}