1use std::fmt::{self, Display, Formatter};
4
5use num_enum::{IntoPrimitive, TryFromPrimitive};
6
7use crate::{Error, Result};
8
9#[derive(
11 Clone, Copy, Debug, PartialEq, Eq, PartialOrd, Ord, Hash, IntoPrimitive, TryFromPrimitive,
12)]
13#[non_exhaustive]
14#[repr(u16)]
15pub enum Venue {
16 Glbx = 1,
18 Xnas = 2,
20 Xbos = 3,
22 Xpsx = 4,
24 Bats = 5,
26 Baty = 6,
28 Edga = 7,
30 Edgx = 8,
32 Xnys = 9,
34 Xcis = 10,
36 Xase = 11,
38 Arcx = 12,
40 Xchi = 13,
42 Iexg = 14,
44 Finn = 15,
46 Finc = 16,
48 Finy = 17,
50 Memx = 18,
52 Eprl = 19,
54 Amxo = 20,
56 Xbox = 21,
58 Xcbo = 22,
60 Emld = 23,
62 Edgo = 24,
64 Gmni = 25,
66 Xisx = 26,
68 Mcry = 27,
70 Xmio = 28,
72 Arco = 29,
74 Opra = 30,
76 Mprl = 31,
78 Xndq = 32,
80 Xbxo = 33,
82 C2Ox = 34,
84 Xphl = 35,
86 Bato = 36,
88 Mxop = 37,
90 Ifeu = 38,
92 Ndex = 39,
94 Dbeq = 40,
96 Sphr = 41,
98 Ltse = 42,
100 Xoff = 43,
102 Aspn = 44,
104 Asmt = 45,
106 Aspi = 46,
108 Equs = 47,
110 Ifus = 48,
112 Ifll = 49,
114 Xeur = 50,
116 Xeee = 51,
118 Xcbf = 52,
120}
121
122pub const VENUE_COUNT: usize = 52;
124
125impl Venue {
126 pub const fn as_str(&self) -> &'static str {
128 match self {
129 Self::Glbx => "GLBX",
130 Self::Xnas => "XNAS",
131 Self::Xbos => "XBOS",
132 Self::Xpsx => "XPSX",
133 Self::Bats => "BATS",
134 Self::Baty => "BATY",
135 Self::Edga => "EDGA",
136 Self::Edgx => "EDGX",
137 Self::Xnys => "XNYS",
138 Self::Xcis => "XCIS",
139 Self::Xase => "XASE",
140 Self::Arcx => "ARCX",
141 Self::Xchi => "XCHI",
142 Self::Iexg => "IEXG",
143 Self::Finn => "FINN",
144 Self::Finc => "FINC",
145 Self::Finy => "FINY",
146 Self::Memx => "MEMX",
147 Self::Eprl => "EPRL",
148 Self::Amxo => "AMXO",
149 Self::Xbox => "XBOX",
150 Self::Xcbo => "XCBO",
151 Self::Emld => "EMLD",
152 Self::Edgo => "EDGO",
153 Self::Gmni => "GMNI",
154 Self::Xisx => "XISX",
155 Self::Mcry => "MCRY",
156 Self::Xmio => "XMIO",
157 Self::Arco => "ARCO",
158 Self::Opra => "OPRA",
159 Self::Mprl => "MPRL",
160 Self::Xndq => "XNDQ",
161 Self::Xbxo => "XBXO",
162 Self::C2Ox => "C2OX",
163 Self::Xphl => "XPHL",
164 Self::Bato => "BATO",
165 Self::Mxop => "MXOP",
166 Self::Ifeu => "IFEU",
167 Self::Ndex => "NDEX",
168 Self::Dbeq => "DBEQ",
169 Self::Sphr => "SPHR",
170 Self::Ltse => "LTSE",
171 Self::Xoff => "XOFF",
172 Self::Aspn => "ASPN",
173 Self::Asmt => "ASMT",
174 Self::Aspi => "ASPI",
175 Self::Equs => "EQUS",
176 Self::Ifus => "IFUS",
177 Self::Ifll => "IFLL",
178 Self::Xeur => "XEUR",
179 Self::Xeee => "XEEE",
180 Self::Xcbf => "XCBF",
181 }
182 }
183}
184
185impl AsRef<str> for Venue {
186 fn as_ref(&self) -> &str {
187 self.as_str()
188 }
189}
190
191impl Display for Venue {
192 fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result {
193 f.write_str(self.as_str())
194 }
195}
196
197impl std::str::FromStr for Venue {
198 type Err = Error;
199
200 fn from_str(s: &str) -> Result<Self> {
201 match s {
202 "GLBX" => Ok(Self::Glbx),
203 "XNAS" => Ok(Self::Xnas),
204 "XBOS" => Ok(Self::Xbos),
205 "XPSX" => Ok(Self::Xpsx),
206 "BATS" => Ok(Self::Bats),
207 "BATY" => Ok(Self::Baty),
208 "EDGA" => Ok(Self::Edga),
209 "EDGX" => Ok(Self::Edgx),
210 "XNYS" => Ok(Self::Xnys),
211 "XCIS" => Ok(Self::Xcis),
212 "XASE" => Ok(Self::Xase),
213 "ARCX" => Ok(Self::Arcx),
214 "XCHI" => Ok(Self::Xchi),
215 "IEXG" => Ok(Self::Iexg),
216 "FINN" => Ok(Self::Finn),
217 "FINC" => Ok(Self::Finc),
218 "FINY" => Ok(Self::Finy),
219 "MEMX" => Ok(Self::Memx),
220 "EPRL" => Ok(Self::Eprl),
221 "AMXO" => Ok(Self::Amxo),
222 "XBOX" => Ok(Self::Xbox),
223 "XCBO" => Ok(Self::Xcbo),
224 "EMLD" => Ok(Self::Emld),
225 "EDGO" => Ok(Self::Edgo),
226 "GMNI" => Ok(Self::Gmni),
227 "XISX" => Ok(Self::Xisx),
228 "MCRY" => Ok(Self::Mcry),
229 "XMIO" => Ok(Self::Xmio),
230 "ARCO" => Ok(Self::Arco),
231 "OPRA" => Ok(Self::Opra),
232 "MPRL" => Ok(Self::Mprl),
233 "XNDQ" => Ok(Self::Xndq),
234 "XBXO" => Ok(Self::Xbxo),
235 "C2OX" => Ok(Self::C2Ox),
236 "XPHL" => Ok(Self::Xphl),
237 "BATO" => Ok(Self::Bato),
238 "MXOP" => Ok(Self::Mxop),
239 "IFEU" => Ok(Self::Ifeu),
240 "NDEX" => Ok(Self::Ndex),
241 "DBEQ" => Ok(Self::Dbeq),
242 "SPHR" => Ok(Self::Sphr),
243 "LTSE" => Ok(Self::Ltse),
244 "XOFF" => Ok(Self::Xoff),
245 "ASPN" => Ok(Self::Aspn),
246 "ASMT" => Ok(Self::Asmt),
247 "ASPI" => Ok(Self::Aspi),
248 "EQUS" => Ok(Self::Equs),
249 "IFUS" => Ok(Self::Ifus),
250 "IFLL" => Ok(Self::Ifll),
251 "XEUR" => Ok(Self::Xeur),
252 "XEEE" => Ok(Self::Xeee),
253 "XCBF" => Ok(Self::Xcbf),
254 _ => Err(Error::conversion::<Self>(s)),
255 }
256 }
257}
258
259#[derive(
261 Clone, Copy, Debug, PartialEq, Eq, PartialOrd, Ord, Hash, IntoPrimitive, TryFromPrimitive,
262)]
263#[non_exhaustive]
264#[repr(u16)]
265pub enum Dataset {
266 GlbxMdp3 = 1,
268 XnasItch = 2,
270 XbosItch = 3,
272 XpsxItch = 4,
274 BatsPitch = 5,
276 BatyPitch = 6,
278 EdgaPitch = 7,
280 EdgxPitch = 8,
282 XnysPillar = 9,
284 XcisPillar = 10,
286 XasePillar = 11,
288 XchiPillar = 12,
290 XcisBbo = 13,
292 XcisTrades = 14,
294 MemxMemoir = 15,
296 EprlDom = 16,
298 #[deprecated(since = "0.17.0")]
300 FinnNls = 17,
301 #[deprecated(since = "0.17.0")]
303 FinyTrades = 18,
304 OpraPillar = 19,
306 DbeqBasic = 20,
308 ArcxPillar = 21,
310 IexgTops = 22,
312 EqusPlus = 23,
314 XnysBbo = 24,
316 XnysTrades = 25,
318 XnasQbbo = 26,
320 XnasNls = 27,
322 IfeuImpact = 28,
324 NdexImpact = 29,
326 EqusAll = 30,
328 XnasBasic = 31,
330 EqusSummary = 32,
332 XcisTradesbbo = 33,
334 XnysTradesbbo = 34,
336 EqusMini = 35,
338 IfusImpact = 36,
340 IfllImpact = 37,
342 XeurEobi = 38,
344 XeeeEobi = 39,
346 XcbfPitch = 40,
348}
349
350pub const DATASET_COUNT: usize = 40;
352
353impl Dataset {
354 pub const fn as_str(&self) -> &'static str {
356 match self {
357 Self::GlbxMdp3 => "GLBX.MDP3",
358 Self::XnasItch => "XNAS.ITCH",
359 Self::XbosItch => "XBOS.ITCH",
360 Self::XpsxItch => "XPSX.ITCH",
361 Self::BatsPitch => "BATS.PITCH",
362 Self::BatyPitch => "BATY.PITCH",
363 Self::EdgaPitch => "EDGA.PITCH",
364 Self::EdgxPitch => "EDGX.PITCH",
365 Self::XnysPillar => "XNYS.PILLAR",
366 Self::XcisPillar => "XCIS.PILLAR",
367 Self::XasePillar => "XASE.PILLAR",
368 Self::XchiPillar => "XCHI.PILLAR",
369 Self::XcisBbo => "XCIS.BBO",
370 Self::XcisTrades => "XCIS.TRADES",
371 Self::MemxMemoir => "MEMX.MEMOIR",
372 Self::EprlDom => "EPRL.DOM",
373 #[allow(deprecated)]
374 Self::FinnNls => "FINN.NLS",
375 #[allow(deprecated)]
376 Self::FinyTrades => "FINY.TRADES",
377 Self::OpraPillar => "OPRA.PILLAR",
378 Self::DbeqBasic => "DBEQ.BASIC",
379 Self::ArcxPillar => "ARCX.PILLAR",
380 Self::IexgTops => "IEXG.TOPS",
381 Self::EqusPlus => "EQUS.PLUS",
382 Self::XnysBbo => "XNYS.BBO",
383 Self::XnysTrades => "XNYS.TRADES",
384 Self::XnasQbbo => "XNAS.QBBO",
385 Self::XnasNls => "XNAS.NLS",
386 Self::IfeuImpact => "IFEU.IMPACT",
387 Self::NdexImpact => "NDEX.IMPACT",
388 Self::EqusAll => "EQUS.ALL",
389 Self::XnasBasic => "XNAS.BASIC",
390 Self::EqusSummary => "EQUS.SUMMARY",
391 Self::XcisTradesbbo => "XCIS.TRADESBBO",
392 Self::XnysTradesbbo => "XNYS.TRADESBBO",
393 Self::EqusMini => "EQUS.MINI",
394 Self::IfusImpact => "IFUS.IMPACT",
395 Self::IfllImpact => "IFLL.IMPACT",
396 Self::XeurEobi => "XEUR.EOBI",
397 Self::XeeeEobi => "XEEE.EOBI",
398 Self::XcbfPitch => "XCBF.PITCH",
399 }
400 }
401
402 pub const fn publishers(&self) -> &'static [Publisher] {
404 match self {
405 Self::GlbxMdp3 => &[Publisher::GlbxMdp3Glbx],
406 Self::XnasItch => &[Publisher::XnasItchXnas],
407 Self::XbosItch => &[Publisher::XbosItchXbos],
408 Self::XpsxItch => &[Publisher::XpsxItchXpsx],
409 Self::BatsPitch => &[Publisher::BatsPitchBats],
410 Self::BatyPitch => &[Publisher::BatyPitchBaty],
411 Self::EdgaPitch => &[Publisher::EdgaPitchEdga],
412 Self::EdgxPitch => &[Publisher::EdgxPitchEdgx],
413 Self::XnysPillar => &[Publisher::XnysPillarXnys],
414 Self::XcisPillar => &[Publisher::XcisPillarXcis],
415 Self::XasePillar => &[Publisher::XasePillarXase],
416 Self::XchiPillar => &[Publisher::XchiPillarXchi],
417 Self::XcisBbo => &[Publisher::XcisBboXcis],
418 Self::XcisTrades => &[Publisher::XcisTradesXcis],
419 Self::MemxMemoir => &[Publisher::MemxMemoirMemx],
420 Self::EprlDom => &[Publisher::EprlDomEprl],
421 #[allow(deprecated)]
422 Self::FinnNls => &[],
423 #[allow(deprecated)]
424 Self::FinyTrades => &[],
425 Self::OpraPillar => &[
426 Publisher::OpraPillarAmxo,
427 Publisher::OpraPillarXbox,
428 Publisher::OpraPillarXcbo,
429 Publisher::OpraPillarEmld,
430 Publisher::OpraPillarEdgo,
431 Publisher::OpraPillarGmni,
432 Publisher::OpraPillarXisx,
433 Publisher::OpraPillarMcry,
434 Publisher::OpraPillarXmio,
435 Publisher::OpraPillarArco,
436 Publisher::OpraPillarOpra,
437 Publisher::OpraPillarMprl,
438 Publisher::OpraPillarXndq,
439 Publisher::OpraPillarXbxo,
440 Publisher::OpraPillarC2Ox,
441 Publisher::OpraPillarXphl,
442 Publisher::OpraPillarBato,
443 Publisher::OpraPillarMxop,
444 Publisher::OpraPillarSphr,
445 ],
446 Self::DbeqBasic => &[
447 Publisher::DbeqBasicXchi,
448 Publisher::DbeqBasicXcis,
449 Publisher::DbeqBasicIexg,
450 Publisher::DbeqBasicEprl,
451 Publisher::DbeqBasicDbeq,
452 ],
453 Self::ArcxPillar => &[Publisher::ArcxPillarArcx],
454 Self::IexgTops => &[Publisher::IexgTopsIexg],
455 Self::EqusPlus => &[
456 Publisher::EqusPlusXchi,
457 Publisher::EqusPlusXcis,
458 Publisher::EqusPlusIexg,
459 Publisher::EqusPlusEprl,
460 Publisher::EqusPlusXnas,
461 Publisher::EqusPlusXnys,
462 Publisher::EqusPlusFinn,
463 Publisher::EqusPlusFiny,
464 Publisher::EqusPlusFinc,
465 Publisher::EqusPlusEqus,
466 ],
467 Self::XnysBbo => &[Publisher::XnysBboXnys],
468 Self::XnysTrades => &[
469 Publisher::XnysTradesFiny,
470 Publisher::XnysTradesXnys,
471 Publisher::XnysTradesEqus,
472 ],
473 Self::XnasQbbo => &[Publisher::XnasQbboXnas],
474 Self::XnasNls => &[
475 Publisher::XnasNlsFinn,
476 Publisher::XnasNlsFinc,
477 Publisher::XnasNlsXnas,
478 Publisher::XnasNlsXbos,
479 Publisher::XnasNlsXpsx,
480 ],
481 Self::IfeuImpact => &[Publisher::IfeuImpactIfeu, Publisher::IfeuImpactXoff],
482 Self::NdexImpact => &[Publisher::NdexImpactNdex, Publisher::NdexImpactXoff],
483 Self::EqusAll => &[
484 Publisher::EqusAllXchi,
485 Publisher::EqusAllXcis,
486 Publisher::EqusAllIexg,
487 Publisher::EqusAllEprl,
488 Publisher::EqusAllXnas,
489 Publisher::EqusAllXnys,
490 Publisher::EqusAllFinn,
491 Publisher::EqusAllFiny,
492 Publisher::EqusAllFinc,
493 Publisher::EqusAllBats,
494 Publisher::EqusAllBaty,
495 Publisher::EqusAllEdga,
496 Publisher::EqusAllEdgx,
497 Publisher::EqusAllXbos,
498 Publisher::EqusAllXpsx,
499 Publisher::EqusAllMemx,
500 Publisher::EqusAllXase,
501 Publisher::EqusAllArcx,
502 Publisher::EqusAllLtse,
503 Publisher::EqusAllEqus,
504 ],
505 Self::XnasBasic => &[
506 Publisher::XnasBasicXnas,
507 Publisher::XnasBasicFinn,
508 Publisher::XnasBasicFinc,
509 Publisher::XnasBasicXbos,
510 Publisher::XnasBasicXpsx,
511 Publisher::XnasBasicEqus,
512 ],
513 Self::EqusSummary => &[Publisher::EqusSummaryEqus],
514 Self::XcisTradesbbo => &[Publisher::XcisTradesbboXcis],
515 Self::XnysTradesbbo => &[Publisher::XnysTradesbboXnys],
516 Self::EqusMini => &[Publisher::EqusMiniEqus],
517 Self::IfusImpact => &[Publisher::IfusImpactIfus, Publisher::IfusImpactXoff],
518 Self::IfllImpact => &[Publisher::IfllImpactIfll, Publisher::IfllImpactXoff],
519 Self::XeurEobi => &[Publisher::XeurEobiXeur, Publisher::XeurEobiXoff],
520 Self::XeeeEobi => &[Publisher::XeeeEobiXeee, Publisher::XeeeEobiXoff],
521 Self::XcbfPitch => &[Publisher::XcbfPitchXcbf, Publisher::XcbfPitchXoff],
522 }
523 }
524}
525
526impl AsRef<str> for Dataset {
527 fn as_ref(&self) -> &str {
528 self.as_str()
529 }
530}
531
532impl Display for Dataset {
533 fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result {
534 f.write_str(self.as_str())
535 }
536}
537
538impl std::str::FromStr for Dataset {
539 type Err = Error;
540
541 fn from_str(s: &str) -> Result<Self> {
542 match s {
543 "GLBX.MDP3" => Ok(Self::GlbxMdp3),
544 "XNAS.ITCH" => Ok(Self::XnasItch),
545 "XBOS.ITCH" => Ok(Self::XbosItch),
546 "XPSX.ITCH" => Ok(Self::XpsxItch),
547 "BATS.PITCH" => Ok(Self::BatsPitch),
548 "BATY.PITCH" => Ok(Self::BatyPitch),
549 "EDGA.PITCH" => Ok(Self::EdgaPitch),
550 "EDGX.PITCH" => Ok(Self::EdgxPitch),
551 "XNYS.PILLAR" => Ok(Self::XnysPillar),
552 "XCIS.PILLAR" => Ok(Self::XcisPillar),
553 "XASE.PILLAR" => Ok(Self::XasePillar),
554 "XCHI.PILLAR" => Ok(Self::XchiPillar),
555 "XCIS.BBO" => Ok(Self::XcisBbo),
556 "XCIS.TRADES" => Ok(Self::XcisTrades),
557 "MEMX.MEMOIR" => Ok(Self::MemxMemoir),
558 "EPRL.DOM" => Ok(Self::EprlDom),
559 #[allow(deprecated)]
560 "FINN.NLS" => Ok(Self::FinnNls),
561 #[allow(deprecated)]
562 "FINY.TRADES" => Ok(Self::FinyTrades),
563 "OPRA.PILLAR" => Ok(Self::OpraPillar),
564 "DBEQ.BASIC" => Ok(Self::DbeqBasic),
565 "ARCX.PILLAR" => Ok(Self::ArcxPillar),
566 "IEXG.TOPS" => Ok(Self::IexgTops),
567 "EQUS.PLUS" => Ok(Self::EqusPlus),
568 "XNYS.BBO" => Ok(Self::XnysBbo),
569 "XNYS.TRADES" => Ok(Self::XnysTrades),
570 "XNAS.QBBO" => Ok(Self::XnasQbbo),
571 "XNAS.NLS" => Ok(Self::XnasNls),
572 "IFEU.IMPACT" => Ok(Self::IfeuImpact),
573 "NDEX.IMPACT" => Ok(Self::NdexImpact),
574 "EQUS.ALL" => Ok(Self::EqusAll),
575 "XNAS.BASIC" => Ok(Self::XnasBasic),
576 "EQUS.SUMMARY" => Ok(Self::EqusSummary),
577 "XCIS.TRADESBBO" => Ok(Self::XcisTradesbbo),
578 "XNYS.TRADESBBO" => Ok(Self::XnysTradesbbo),
579 "EQUS.MINI" => Ok(Self::EqusMini),
580 "IFUS.IMPACT" => Ok(Self::IfusImpact),
581 "IFLL.IMPACT" => Ok(Self::IfllImpact),
582 "XEUR.EOBI" => Ok(Self::XeurEobi),
583 "XEEE.EOBI" => Ok(Self::XeeeEobi),
584 "XCBF.PITCH" => Ok(Self::XcbfPitch),
585 _ => Err(Error::conversion::<Self>(s)),
586 }
587 }
588}
589
590#[derive(
592 Clone, Copy, Debug, PartialEq, Eq, PartialOrd, Ord, Hash, IntoPrimitive, TryFromPrimitive,
593)]
594#[non_exhaustive]
595#[repr(u16)]
596pub enum Publisher {
597 GlbxMdp3Glbx = 1,
599 XnasItchXnas = 2,
601 XbosItchXbos = 3,
603 XpsxItchXpsx = 4,
605 BatsPitchBats = 5,
607 BatyPitchBaty = 6,
609 EdgaPitchEdga = 7,
611 EdgxPitchEdgx = 8,
613 XnysPillarXnys = 9,
615 XcisPillarXcis = 10,
617 XasePillarXase = 11,
619 XchiPillarXchi = 12,
621 XcisBboXcis = 13,
623 XcisTradesXcis = 14,
625 MemxMemoirMemx = 15,
627 EprlDomEprl = 16,
629 XnasNlsFinn = 17,
631 XnasNlsFinc = 18,
633 XnysTradesFiny = 19,
635 OpraPillarAmxo = 20,
637 OpraPillarXbox = 21,
639 OpraPillarXcbo = 22,
641 OpraPillarEmld = 23,
643 OpraPillarEdgo = 24,
645 OpraPillarGmni = 25,
647 OpraPillarXisx = 26,
649 OpraPillarMcry = 27,
651 OpraPillarXmio = 28,
653 OpraPillarArco = 29,
655 OpraPillarOpra = 30,
657 OpraPillarMprl = 31,
659 OpraPillarXndq = 32,
661 OpraPillarXbxo = 33,
663 OpraPillarC2Ox = 34,
665 OpraPillarXphl = 35,
667 OpraPillarBato = 36,
669 OpraPillarMxop = 37,
671 IexgTopsIexg = 38,
673 DbeqBasicXchi = 39,
675 DbeqBasicXcis = 40,
677 DbeqBasicIexg = 41,
679 DbeqBasicEprl = 42,
681 ArcxPillarArcx = 43,
683 XnysBboXnys = 44,
685 XnysTradesXnys = 45,
687 XnasQbboXnas = 46,
689 XnasNlsXnas = 47,
691 EqusPlusXchi = 48,
693 EqusPlusXcis = 49,
695 EqusPlusIexg = 50,
697 EqusPlusEprl = 51,
699 EqusPlusXnas = 52,
701 EqusPlusXnys = 53,
703 EqusPlusFinn = 54,
705 EqusPlusFiny = 55,
707 EqusPlusFinc = 56,
709 IfeuImpactIfeu = 57,
711 NdexImpactNdex = 58,
713 DbeqBasicDbeq = 59,
715 EqusPlusEqus = 60,
717 OpraPillarSphr = 61,
719 EqusAllXchi = 62,
721 EqusAllXcis = 63,
723 EqusAllIexg = 64,
725 EqusAllEprl = 65,
727 EqusAllXnas = 66,
729 EqusAllXnys = 67,
731 EqusAllFinn = 68,
733 EqusAllFiny = 69,
735 EqusAllFinc = 70,
737 EqusAllBats = 71,
739 EqusAllBaty = 72,
741 EqusAllEdga = 73,
743 EqusAllEdgx = 74,
745 EqusAllXbos = 75,
747 EqusAllXpsx = 76,
749 EqusAllMemx = 77,
751 EqusAllXase = 78,
753 EqusAllArcx = 79,
755 EqusAllLtse = 80,
757 XnasBasicXnas = 81,
759 XnasBasicFinn = 82,
761 XnasBasicFinc = 83,
763 IfeuImpactXoff = 84,
765 NdexImpactXoff = 85,
767 XnasNlsXbos = 86,
769 XnasNlsXpsx = 87,
771 XnasBasicXbos = 88,
773 XnasBasicXpsx = 89,
775 EqusSummaryEqus = 90,
777 XcisTradesbboXcis = 91,
779 XnysTradesbboXnys = 92,
781 XnasBasicEqus = 93,
783 EqusAllEqus = 94,
785 EqusMiniEqus = 95,
787 XnysTradesEqus = 96,
789 IfusImpactIfus = 97,
791 IfusImpactXoff = 98,
793 IfllImpactIfll = 99,
795 IfllImpactXoff = 100,
797 XeurEobiXeur = 101,
799 XeeeEobiXeee = 102,
801 XeurEobiXoff = 103,
803 XeeeEobiXoff = 104,
805 XcbfPitchXcbf = 105,
807 XcbfPitchXoff = 106,
809}
810
811pub const PUBLISHER_COUNT: usize = 106;
813
814impl Publisher {
815 pub const fn as_str(&self) -> &'static str {
817 match self {
818 Self::GlbxMdp3Glbx => "GLBX.MDP3.GLBX",
819 Self::XnasItchXnas => "XNAS.ITCH.XNAS",
820 Self::XbosItchXbos => "XBOS.ITCH.XBOS",
821 Self::XpsxItchXpsx => "XPSX.ITCH.XPSX",
822 Self::BatsPitchBats => "BATS.PITCH.BATS",
823 Self::BatyPitchBaty => "BATY.PITCH.BATY",
824 Self::EdgaPitchEdga => "EDGA.PITCH.EDGA",
825 Self::EdgxPitchEdgx => "EDGX.PITCH.EDGX",
826 Self::XnysPillarXnys => "XNYS.PILLAR.XNYS",
827 Self::XcisPillarXcis => "XCIS.PILLAR.XCIS",
828 Self::XasePillarXase => "XASE.PILLAR.XASE",
829 Self::XchiPillarXchi => "XCHI.PILLAR.XCHI",
830 Self::XcisBboXcis => "XCIS.BBO.XCIS",
831 Self::XcisTradesXcis => "XCIS.TRADES.XCIS",
832 Self::MemxMemoirMemx => "MEMX.MEMOIR.MEMX",
833 Self::EprlDomEprl => "EPRL.DOM.EPRL",
834 Self::XnasNlsFinn => "XNAS.NLS.FINN",
835 Self::XnasNlsFinc => "XNAS.NLS.FINC",
836 Self::XnysTradesFiny => "XNYS.TRADES.FINY",
837 Self::OpraPillarAmxo => "OPRA.PILLAR.AMXO",
838 Self::OpraPillarXbox => "OPRA.PILLAR.XBOX",
839 Self::OpraPillarXcbo => "OPRA.PILLAR.XCBO",
840 Self::OpraPillarEmld => "OPRA.PILLAR.EMLD",
841 Self::OpraPillarEdgo => "OPRA.PILLAR.EDGO",
842 Self::OpraPillarGmni => "OPRA.PILLAR.GMNI",
843 Self::OpraPillarXisx => "OPRA.PILLAR.XISX",
844 Self::OpraPillarMcry => "OPRA.PILLAR.MCRY",
845 Self::OpraPillarXmio => "OPRA.PILLAR.XMIO",
846 Self::OpraPillarArco => "OPRA.PILLAR.ARCO",
847 Self::OpraPillarOpra => "OPRA.PILLAR.OPRA",
848 Self::OpraPillarMprl => "OPRA.PILLAR.MPRL",
849 Self::OpraPillarXndq => "OPRA.PILLAR.XNDQ",
850 Self::OpraPillarXbxo => "OPRA.PILLAR.XBXO",
851 Self::OpraPillarC2Ox => "OPRA.PILLAR.C2OX",
852 Self::OpraPillarXphl => "OPRA.PILLAR.XPHL",
853 Self::OpraPillarBato => "OPRA.PILLAR.BATO",
854 Self::OpraPillarMxop => "OPRA.PILLAR.MXOP",
855 Self::IexgTopsIexg => "IEXG.TOPS.IEXG",
856 Self::DbeqBasicXchi => "DBEQ.BASIC.XCHI",
857 Self::DbeqBasicXcis => "DBEQ.BASIC.XCIS",
858 Self::DbeqBasicIexg => "DBEQ.BASIC.IEXG",
859 Self::DbeqBasicEprl => "DBEQ.BASIC.EPRL",
860 Self::ArcxPillarArcx => "ARCX.PILLAR.ARCX",
861 Self::XnysBboXnys => "XNYS.BBO.XNYS",
862 Self::XnysTradesXnys => "XNYS.TRADES.XNYS",
863 Self::XnasQbboXnas => "XNAS.QBBO.XNAS",
864 Self::XnasNlsXnas => "XNAS.NLS.XNAS",
865 Self::EqusPlusXchi => "EQUS.PLUS.XCHI",
866 Self::EqusPlusXcis => "EQUS.PLUS.XCIS",
867 Self::EqusPlusIexg => "EQUS.PLUS.IEXG",
868 Self::EqusPlusEprl => "EQUS.PLUS.EPRL",
869 Self::EqusPlusXnas => "EQUS.PLUS.XNAS",
870 Self::EqusPlusXnys => "EQUS.PLUS.XNYS",
871 Self::EqusPlusFinn => "EQUS.PLUS.FINN",
872 Self::EqusPlusFiny => "EQUS.PLUS.FINY",
873 Self::EqusPlusFinc => "EQUS.PLUS.FINC",
874 Self::IfeuImpactIfeu => "IFEU.IMPACT.IFEU",
875 Self::NdexImpactNdex => "NDEX.IMPACT.NDEX",
876 Self::DbeqBasicDbeq => "DBEQ.BASIC.DBEQ",
877 Self::EqusPlusEqus => "EQUS.PLUS.EQUS",
878 Self::OpraPillarSphr => "OPRA.PILLAR.SPHR",
879 Self::EqusAllXchi => "EQUS.ALL.XCHI",
880 Self::EqusAllXcis => "EQUS.ALL.XCIS",
881 Self::EqusAllIexg => "EQUS.ALL.IEXG",
882 Self::EqusAllEprl => "EQUS.ALL.EPRL",
883 Self::EqusAllXnas => "EQUS.ALL.XNAS",
884 Self::EqusAllXnys => "EQUS.ALL.XNYS",
885 Self::EqusAllFinn => "EQUS.ALL.FINN",
886 Self::EqusAllFiny => "EQUS.ALL.FINY",
887 Self::EqusAllFinc => "EQUS.ALL.FINC",
888 Self::EqusAllBats => "EQUS.ALL.BATS",
889 Self::EqusAllBaty => "EQUS.ALL.BATY",
890 Self::EqusAllEdga => "EQUS.ALL.EDGA",
891 Self::EqusAllEdgx => "EQUS.ALL.EDGX",
892 Self::EqusAllXbos => "EQUS.ALL.XBOS",
893 Self::EqusAllXpsx => "EQUS.ALL.XPSX",
894 Self::EqusAllMemx => "EQUS.ALL.MEMX",
895 Self::EqusAllXase => "EQUS.ALL.XASE",
896 Self::EqusAllArcx => "EQUS.ALL.ARCX",
897 Self::EqusAllLtse => "EQUS.ALL.LTSE",
898 Self::XnasBasicXnas => "XNAS.BASIC.XNAS",
899 Self::XnasBasicFinn => "XNAS.BASIC.FINN",
900 Self::XnasBasicFinc => "XNAS.BASIC.FINC",
901 Self::IfeuImpactXoff => "IFEU.IMPACT.XOFF",
902 Self::NdexImpactXoff => "NDEX.IMPACT.XOFF",
903 Self::XnasNlsXbos => "XNAS.NLS.XBOS",
904 Self::XnasNlsXpsx => "XNAS.NLS.XPSX",
905 Self::XnasBasicXbos => "XNAS.BASIC.XBOS",
906 Self::XnasBasicXpsx => "XNAS.BASIC.XPSX",
907 Self::EqusSummaryEqus => "EQUS.SUMMARY.EQUS",
908 Self::XcisTradesbboXcis => "XCIS.TRADESBBO.XCIS",
909 Self::XnysTradesbboXnys => "XNYS.TRADESBBO.XNYS",
910 Self::XnasBasicEqus => "XNAS.BASIC.EQUS",
911 Self::EqusAllEqus => "EQUS.ALL.EQUS",
912 Self::EqusMiniEqus => "EQUS.MINI.EQUS",
913 Self::XnysTradesEqus => "XNYS.TRADES.EQUS",
914 Self::IfusImpactIfus => "IFUS.IMPACT.IFUS",
915 Self::IfusImpactXoff => "IFUS.IMPACT.XOFF",
916 Self::IfllImpactIfll => "IFLL.IMPACT.IFLL",
917 Self::IfllImpactXoff => "IFLL.IMPACT.XOFF",
918 Self::XeurEobiXeur => "XEUR.EOBI.XEUR",
919 Self::XeeeEobiXeee => "XEEE.EOBI.XEEE",
920 Self::XeurEobiXoff => "XEUR.EOBI.XOFF",
921 Self::XeeeEobiXoff => "XEEE.EOBI.XOFF",
922 Self::XcbfPitchXcbf => "XCBF.PITCH.XCBF",
923 Self::XcbfPitchXoff => "XCBF.PITCH.XOFF",
924 }
925 }
926
927 pub const fn venue(&self) -> Venue {
929 match self {
930 Self::GlbxMdp3Glbx => Venue::Glbx,
931 Self::XnasItchXnas => Venue::Xnas,
932 Self::XbosItchXbos => Venue::Xbos,
933 Self::XpsxItchXpsx => Venue::Xpsx,
934 Self::BatsPitchBats => Venue::Bats,
935 Self::BatyPitchBaty => Venue::Baty,
936 Self::EdgaPitchEdga => Venue::Edga,
937 Self::EdgxPitchEdgx => Venue::Edgx,
938 Self::XnysPillarXnys => Venue::Xnys,
939 Self::XcisPillarXcis => Venue::Xcis,
940 Self::XasePillarXase => Venue::Xase,
941 Self::XchiPillarXchi => Venue::Xchi,
942 Self::XcisBboXcis => Venue::Xcis,
943 Self::XcisTradesXcis => Venue::Xcis,
944 Self::MemxMemoirMemx => Venue::Memx,
945 Self::EprlDomEprl => Venue::Eprl,
946 Self::XnasNlsFinn => Venue::Finn,
947 Self::XnasNlsFinc => Venue::Finc,
948 Self::XnysTradesFiny => Venue::Finy,
949 Self::OpraPillarAmxo => Venue::Amxo,
950 Self::OpraPillarXbox => Venue::Xbox,
951 Self::OpraPillarXcbo => Venue::Xcbo,
952 Self::OpraPillarEmld => Venue::Emld,
953 Self::OpraPillarEdgo => Venue::Edgo,
954 Self::OpraPillarGmni => Venue::Gmni,
955 Self::OpraPillarXisx => Venue::Xisx,
956 Self::OpraPillarMcry => Venue::Mcry,
957 Self::OpraPillarXmio => Venue::Xmio,
958 Self::OpraPillarArco => Venue::Arco,
959 Self::OpraPillarOpra => Venue::Opra,
960 Self::OpraPillarMprl => Venue::Mprl,
961 Self::OpraPillarXndq => Venue::Xndq,
962 Self::OpraPillarXbxo => Venue::Xbxo,
963 Self::OpraPillarC2Ox => Venue::C2Ox,
964 Self::OpraPillarXphl => Venue::Xphl,
965 Self::OpraPillarBato => Venue::Bato,
966 Self::OpraPillarMxop => Venue::Mxop,
967 Self::IexgTopsIexg => Venue::Iexg,
968 Self::DbeqBasicXchi => Venue::Xchi,
969 Self::DbeqBasicXcis => Venue::Xcis,
970 Self::DbeqBasicIexg => Venue::Iexg,
971 Self::DbeqBasicEprl => Venue::Eprl,
972 Self::ArcxPillarArcx => Venue::Arcx,
973 Self::XnysBboXnys => Venue::Xnys,
974 Self::XnysTradesXnys => Venue::Xnys,
975 Self::XnasQbboXnas => Venue::Xnas,
976 Self::XnasNlsXnas => Venue::Xnas,
977 Self::EqusPlusXchi => Venue::Xchi,
978 Self::EqusPlusXcis => Venue::Xcis,
979 Self::EqusPlusIexg => Venue::Iexg,
980 Self::EqusPlusEprl => Venue::Eprl,
981 Self::EqusPlusXnas => Venue::Xnas,
982 Self::EqusPlusXnys => Venue::Xnys,
983 Self::EqusPlusFinn => Venue::Finn,
984 Self::EqusPlusFiny => Venue::Finy,
985 Self::EqusPlusFinc => Venue::Finc,
986 Self::IfeuImpactIfeu => Venue::Ifeu,
987 Self::NdexImpactNdex => Venue::Ndex,
988 Self::DbeqBasicDbeq => Venue::Dbeq,
989 Self::EqusPlusEqus => Venue::Equs,
990 Self::OpraPillarSphr => Venue::Sphr,
991 Self::EqusAllXchi => Venue::Xchi,
992 Self::EqusAllXcis => Venue::Xcis,
993 Self::EqusAllIexg => Venue::Iexg,
994 Self::EqusAllEprl => Venue::Eprl,
995 Self::EqusAllXnas => Venue::Xnas,
996 Self::EqusAllXnys => Venue::Xnys,
997 Self::EqusAllFinn => Venue::Finn,
998 Self::EqusAllFiny => Venue::Finy,
999 Self::EqusAllFinc => Venue::Finc,
1000 Self::EqusAllBats => Venue::Bats,
1001 Self::EqusAllBaty => Venue::Baty,
1002 Self::EqusAllEdga => Venue::Edga,
1003 Self::EqusAllEdgx => Venue::Edgx,
1004 Self::EqusAllXbos => Venue::Xbos,
1005 Self::EqusAllXpsx => Venue::Xpsx,
1006 Self::EqusAllMemx => Venue::Memx,
1007 Self::EqusAllXase => Venue::Xase,
1008 Self::EqusAllArcx => Venue::Arcx,
1009 Self::EqusAllLtse => Venue::Ltse,
1010 Self::XnasBasicXnas => Venue::Xnas,
1011 Self::XnasBasicFinn => Venue::Finn,
1012 Self::XnasBasicFinc => Venue::Finc,
1013 Self::IfeuImpactXoff => Venue::Xoff,
1014 Self::NdexImpactXoff => Venue::Xoff,
1015 Self::XnasNlsXbos => Venue::Xbos,
1016 Self::XnasNlsXpsx => Venue::Xpsx,
1017 Self::XnasBasicXbos => Venue::Xbos,
1018 Self::XnasBasicXpsx => Venue::Xpsx,
1019 Self::EqusSummaryEqus => Venue::Equs,
1020 Self::XcisTradesbboXcis => Venue::Xcis,
1021 Self::XnysTradesbboXnys => Venue::Xnys,
1022 Self::XnasBasicEqus => Venue::Equs,
1023 Self::EqusAllEqus => Venue::Equs,
1024 Self::EqusMiniEqus => Venue::Equs,
1025 Self::XnysTradesEqus => Venue::Equs,
1026 Self::IfusImpactIfus => Venue::Ifus,
1027 Self::IfusImpactXoff => Venue::Xoff,
1028 Self::IfllImpactIfll => Venue::Ifll,
1029 Self::IfllImpactXoff => Venue::Xoff,
1030 Self::XeurEobiXeur => Venue::Xeur,
1031 Self::XeeeEobiXeee => Venue::Xeee,
1032 Self::XeurEobiXoff => Venue::Xoff,
1033 Self::XeeeEobiXoff => Venue::Xoff,
1034 Self::XcbfPitchXcbf => Venue::Xcbf,
1035 Self::XcbfPitchXoff => Venue::Xoff,
1036 }
1037 }
1038
1039 pub const fn dataset(&self) -> Dataset {
1041 match self {
1042 Self::GlbxMdp3Glbx => Dataset::GlbxMdp3,
1043 Self::XnasItchXnas => Dataset::XnasItch,
1044 Self::XbosItchXbos => Dataset::XbosItch,
1045 Self::XpsxItchXpsx => Dataset::XpsxItch,
1046 Self::BatsPitchBats => Dataset::BatsPitch,
1047 Self::BatyPitchBaty => Dataset::BatyPitch,
1048 Self::EdgaPitchEdga => Dataset::EdgaPitch,
1049 Self::EdgxPitchEdgx => Dataset::EdgxPitch,
1050 Self::XnysPillarXnys => Dataset::XnysPillar,
1051 Self::XcisPillarXcis => Dataset::XcisPillar,
1052 Self::XasePillarXase => Dataset::XasePillar,
1053 Self::XchiPillarXchi => Dataset::XchiPillar,
1054 Self::XcisBboXcis => Dataset::XcisBbo,
1055 Self::XcisTradesXcis => Dataset::XcisTrades,
1056 Self::MemxMemoirMemx => Dataset::MemxMemoir,
1057 Self::EprlDomEprl => Dataset::EprlDom,
1058 Self::XnasNlsFinn => Dataset::XnasNls,
1059 Self::XnasNlsFinc => Dataset::XnasNls,
1060 Self::XnysTradesFiny => Dataset::XnysTrades,
1061 Self::OpraPillarAmxo => Dataset::OpraPillar,
1062 Self::OpraPillarXbox => Dataset::OpraPillar,
1063 Self::OpraPillarXcbo => Dataset::OpraPillar,
1064 Self::OpraPillarEmld => Dataset::OpraPillar,
1065 Self::OpraPillarEdgo => Dataset::OpraPillar,
1066 Self::OpraPillarGmni => Dataset::OpraPillar,
1067 Self::OpraPillarXisx => Dataset::OpraPillar,
1068 Self::OpraPillarMcry => Dataset::OpraPillar,
1069 Self::OpraPillarXmio => Dataset::OpraPillar,
1070 Self::OpraPillarArco => Dataset::OpraPillar,
1071 Self::OpraPillarOpra => Dataset::OpraPillar,
1072 Self::OpraPillarMprl => Dataset::OpraPillar,
1073 Self::OpraPillarXndq => Dataset::OpraPillar,
1074 Self::OpraPillarXbxo => Dataset::OpraPillar,
1075 Self::OpraPillarC2Ox => Dataset::OpraPillar,
1076 Self::OpraPillarXphl => Dataset::OpraPillar,
1077 Self::OpraPillarBato => Dataset::OpraPillar,
1078 Self::OpraPillarMxop => Dataset::OpraPillar,
1079 Self::IexgTopsIexg => Dataset::IexgTops,
1080 Self::DbeqBasicXchi => Dataset::DbeqBasic,
1081 Self::DbeqBasicXcis => Dataset::DbeqBasic,
1082 Self::DbeqBasicIexg => Dataset::DbeqBasic,
1083 Self::DbeqBasicEprl => Dataset::DbeqBasic,
1084 Self::ArcxPillarArcx => Dataset::ArcxPillar,
1085 Self::XnysBboXnys => Dataset::XnysBbo,
1086 Self::XnysTradesXnys => Dataset::XnysTrades,
1087 Self::XnasQbboXnas => Dataset::XnasQbbo,
1088 Self::XnasNlsXnas => Dataset::XnasNls,
1089 Self::EqusPlusXchi => Dataset::EqusPlus,
1090 Self::EqusPlusXcis => Dataset::EqusPlus,
1091 Self::EqusPlusIexg => Dataset::EqusPlus,
1092 Self::EqusPlusEprl => Dataset::EqusPlus,
1093 Self::EqusPlusXnas => Dataset::EqusPlus,
1094 Self::EqusPlusXnys => Dataset::EqusPlus,
1095 Self::EqusPlusFinn => Dataset::EqusPlus,
1096 Self::EqusPlusFiny => Dataset::EqusPlus,
1097 Self::EqusPlusFinc => Dataset::EqusPlus,
1098 Self::IfeuImpactIfeu => Dataset::IfeuImpact,
1099 Self::NdexImpactNdex => Dataset::NdexImpact,
1100 Self::DbeqBasicDbeq => Dataset::DbeqBasic,
1101 Self::EqusPlusEqus => Dataset::EqusPlus,
1102 Self::OpraPillarSphr => Dataset::OpraPillar,
1103 Self::EqusAllXchi => Dataset::EqusAll,
1104 Self::EqusAllXcis => Dataset::EqusAll,
1105 Self::EqusAllIexg => Dataset::EqusAll,
1106 Self::EqusAllEprl => Dataset::EqusAll,
1107 Self::EqusAllXnas => Dataset::EqusAll,
1108 Self::EqusAllXnys => Dataset::EqusAll,
1109 Self::EqusAllFinn => Dataset::EqusAll,
1110 Self::EqusAllFiny => Dataset::EqusAll,
1111 Self::EqusAllFinc => Dataset::EqusAll,
1112 Self::EqusAllBats => Dataset::EqusAll,
1113 Self::EqusAllBaty => Dataset::EqusAll,
1114 Self::EqusAllEdga => Dataset::EqusAll,
1115 Self::EqusAllEdgx => Dataset::EqusAll,
1116 Self::EqusAllXbos => Dataset::EqusAll,
1117 Self::EqusAllXpsx => Dataset::EqusAll,
1118 Self::EqusAllMemx => Dataset::EqusAll,
1119 Self::EqusAllXase => Dataset::EqusAll,
1120 Self::EqusAllArcx => Dataset::EqusAll,
1121 Self::EqusAllLtse => Dataset::EqusAll,
1122 Self::XnasBasicXnas => Dataset::XnasBasic,
1123 Self::XnasBasicFinn => Dataset::XnasBasic,
1124 Self::XnasBasicFinc => Dataset::XnasBasic,
1125 Self::IfeuImpactXoff => Dataset::IfeuImpact,
1126 Self::NdexImpactXoff => Dataset::NdexImpact,
1127 Self::XnasNlsXbos => Dataset::XnasNls,
1128 Self::XnasNlsXpsx => Dataset::XnasNls,
1129 Self::XnasBasicXbos => Dataset::XnasBasic,
1130 Self::XnasBasicXpsx => Dataset::XnasBasic,
1131 Self::EqusSummaryEqus => Dataset::EqusSummary,
1132 Self::XcisTradesbboXcis => Dataset::XcisTradesbbo,
1133 Self::XnysTradesbboXnys => Dataset::XnysTradesbbo,
1134 Self::XnasBasicEqus => Dataset::XnasBasic,
1135 Self::EqusAllEqus => Dataset::EqusAll,
1136 Self::EqusMiniEqus => Dataset::EqusMini,
1137 Self::XnysTradesEqus => Dataset::XnysTrades,
1138 Self::IfusImpactIfus => Dataset::IfusImpact,
1139 Self::IfusImpactXoff => Dataset::IfusImpact,
1140 Self::IfllImpactIfll => Dataset::IfllImpact,
1141 Self::IfllImpactXoff => Dataset::IfllImpact,
1142 Self::XeurEobiXeur => Dataset::XeurEobi,
1143 Self::XeeeEobiXeee => Dataset::XeeeEobi,
1144 Self::XeurEobiXoff => Dataset::XeurEobi,
1145 Self::XeeeEobiXoff => Dataset::XeeeEobi,
1146 Self::XcbfPitchXcbf => Dataset::XcbfPitch,
1147 Self::XcbfPitchXoff => Dataset::XcbfPitch,
1148 }
1149 }
1150
1151 pub fn from_dataset_venue(dataset: Dataset, venue: Venue) -> Result<Self> {
1156 match (dataset, venue) {
1157 (Dataset::GlbxMdp3, Venue::Glbx) => Ok(Self::GlbxMdp3Glbx),
1158 (Dataset::XnasItch, Venue::Xnas) => Ok(Self::XnasItchXnas),
1159 (Dataset::XbosItch, Venue::Xbos) => Ok(Self::XbosItchXbos),
1160 (Dataset::XpsxItch, Venue::Xpsx) => Ok(Self::XpsxItchXpsx),
1161 (Dataset::BatsPitch, Venue::Bats) => Ok(Self::BatsPitchBats),
1162 (Dataset::BatyPitch, Venue::Baty) => Ok(Self::BatyPitchBaty),
1163 (Dataset::EdgaPitch, Venue::Edga) => Ok(Self::EdgaPitchEdga),
1164 (Dataset::EdgxPitch, Venue::Edgx) => Ok(Self::EdgxPitchEdgx),
1165 (Dataset::XnysPillar, Venue::Xnys) => Ok(Self::XnysPillarXnys),
1166 (Dataset::XcisPillar, Venue::Xcis) => Ok(Self::XcisPillarXcis),
1167 (Dataset::XasePillar, Venue::Xase) => Ok(Self::XasePillarXase),
1168 (Dataset::XchiPillar, Venue::Xchi) => Ok(Self::XchiPillarXchi),
1169 (Dataset::XcisBbo, Venue::Xcis) => Ok(Self::XcisBboXcis),
1170 (Dataset::XcisTrades, Venue::Xcis) => Ok(Self::XcisTradesXcis),
1171 (Dataset::MemxMemoir, Venue::Memx) => Ok(Self::MemxMemoirMemx),
1172 (Dataset::EprlDom, Venue::Eprl) => Ok(Self::EprlDomEprl),
1173 (Dataset::XnasNls, Venue::Finn) => Ok(Self::XnasNlsFinn),
1174 (Dataset::XnasNls, Venue::Finc) => Ok(Self::XnasNlsFinc),
1175 (Dataset::XnysTrades, Venue::Finy) => Ok(Self::XnysTradesFiny),
1176 (Dataset::OpraPillar, Venue::Amxo) => Ok(Self::OpraPillarAmxo),
1177 (Dataset::OpraPillar, Venue::Xbox) => Ok(Self::OpraPillarXbox),
1178 (Dataset::OpraPillar, Venue::Xcbo) => Ok(Self::OpraPillarXcbo),
1179 (Dataset::OpraPillar, Venue::Emld) => Ok(Self::OpraPillarEmld),
1180 (Dataset::OpraPillar, Venue::Edgo) => Ok(Self::OpraPillarEdgo),
1181 (Dataset::OpraPillar, Venue::Gmni) => Ok(Self::OpraPillarGmni),
1182 (Dataset::OpraPillar, Venue::Xisx) => Ok(Self::OpraPillarXisx),
1183 (Dataset::OpraPillar, Venue::Mcry) => Ok(Self::OpraPillarMcry),
1184 (Dataset::OpraPillar, Venue::Xmio) => Ok(Self::OpraPillarXmio),
1185 (Dataset::OpraPillar, Venue::Arco) => Ok(Self::OpraPillarArco),
1186 (Dataset::OpraPillar, Venue::Opra) => Ok(Self::OpraPillarOpra),
1187 (Dataset::OpraPillar, Venue::Mprl) => Ok(Self::OpraPillarMprl),
1188 (Dataset::OpraPillar, Venue::Xndq) => Ok(Self::OpraPillarXndq),
1189 (Dataset::OpraPillar, Venue::Xbxo) => Ok(Self::OpraPillarXbxo),
1190 (Dataset::OpraPillar, Venue::C2Ox) => Ok(Self::OpraPillarC2Ox),
1191 (Dataset::OpraPillar, Venue::Xphl) => Ok(Self::OpraPillarXphl),
1192 (Dataset::OpraPillar, Venue::Bato) => Ok(Self::OpraPillarBato),
1193 (Dataset::OpraPillar, Venue::Mxop) => Ok(Self::OpraPillarMxop),
1194 (Dataset::IexgTops, Venue::Iexg) => Ok(Self::IexgTopsIexg),
1195 (Dataset::DbeqBasic, Venue::Xchi) => Ok(Self::DbeqBasicXchi),
1196 (Dataset::DbeqBasic, Venue::Xcis) => Ok(Self::DbeqBasicXcis),
1197 (Dataset::DbeqBasic, Venue::Iexg) => Ok(Self::DbeqBasicIexg),
1198 (Dataset::DbeqBasic, Venue::Eprl) => Ok(Self::DbeqBasicEprl),
1199 (Dataset::ArcxPillar, Venue::Arcx) => Ok(Self::ArcxPillarArcx),
1200 (Dataset::XnysBbo, Venue::Xnys) => Ok(Self::XnysBboXnys),
1201 (Dataset::XnysTrades, Venue::Xnys) => Ok(Self::XnysTradesXnys),
1202 (Dataset::XnasQbbo, Venue::Xnas) => Ok(Self::XnasQbboXnas),
1203 (Dataset::XnasNls, Venue::Xnas) => Ok(Self::XnasNlsXnas),
1204 (Dataset::EqusPlus, Venue::Xchi) => Ok(Self::EqusPlusXchi),
1205 (Dataset::EqusPlus, Venue::Xcis) => Ok(Self::EqusPlusXcis),
1206 (Dataset::EqusPlus, Venue::Iexg) => Ok(Self::EqusPlusIexg),
1207 (Dataset::EqusPlus, Venue::Eprl) => Ok(Self::EqusPlusEprl),
1208 (Dataset::EqusPlus, Venue::Xnas) => Ok(Self::EqusPlusXnas),
1209 (Dataset::EqusPlus, Venue::Xnys) => Ok(Self::EqusPlusXnys),
1210 (Dataset::EqusPlus, Venue::Finn) => Ok(Self::EqusPlusFinn),
1211 (Dataset::EqusPlus, Venue::Finy) => Ok(Self::EqusPlusFiny),
1212 (Dataset::EqusPlus, Venue::Finc) => Ok(Self::EqusPlusFinc),
1213 (Dataset::IfeuImpact, Venue::Ifeu) => Ok(Self::IfeuImpactIfeu),
1214 (Dataset::NdexImpact, Venue::Ndex) => Ok(Self::NdexImpactNdex),
1215 (Dataset::DbeqBasic, Venue::Dbeq) => Ok(Self::DbeqBasicDbeq),
1216 (Dataset::EqusPlus, Venue::Equs) => Ok(Self::EqusPlusEqus),
1217 (Dataset::OpraPillar, Venue::Sphr) => Ok(Self::OpraPillarSphr),
1218 (Dataset::EqusAll, Venue::Xchi) => Ok(Self::EqusAllXchi),
1219 (Dataset::EqusAll, Venue::Xcis) => Ok(Self::EqusAllXcis),
1220 (Dataset::EqusAll, Venue::Iexg) => Ok(Self::EqusAllIexg),
1221 (Dataset::EqusAll, Venue::Eprl) => Ok(Self::EqusAllEprl),
1222 (Dataset::EqusAll, Venue::Xnas) => Ok(Self::EqusAllXnas),
1223 (Dataset::EqusAll, Venue::Xnys) => Ok(Self::EqusAllXnys),
1224 (Dataset::EqusAll, Venue::Finn) => Ok(Self::EqusAllFinn),
1225 (Dataset::EqusAll, Venue::Finy) => Ok(Self::EqusAllFiny),
1226 (Dataset::EqusAll, Venue::Finc) => Ok(Self::EqusAllFinc),
1227 (Dataset::EqusAll, Venue::Bats) => Ok(Self::EqusAllBats),
1228 (Dataset::EqusAll, Venue::Baty) => Ok(Self::EqusAllBaty),
1229 (Dataset::EqusAll, Venue::Edga) => Ok(Self::EqusAllEdga),
1230 (Dataset::EqusAll, Venue::Edgx) => Ok(Self::EqusAllEdgx),
1231 (Dataset::EqusAll, Venue::Xbos) => Ok(Self::EqusAllXbos),
1232 (Dataset::EqusAll, Venue::Xpsx) => Ok(Self::EqusAllXpsx),
1233 (Dataset::EqusAll, Venue::Memx) => Ok(Self::EqusAllMemx),
1234 (Dataset::EqusAll, Venue::Xase) => Ok(Self::EqusAllXase),
1235 (Dataset::EqusAll, Venue::Arcx) => Ok(Self::EqusAllArcx),
1236 (Dataset::EqusAll, Venue::Ltse) => Ok(Self::EqusAllLtse),
1237 (Dataset::XnasBasic, Venue::Xnas) => Ok(Self::XnasBasicXnas),
1238 (Dataset::XnasBasic, Venue::Finn) => Ok(Self::XnasBasicFinn),
1239 (Dataset::XnasBasic, Venue::Finc) => Ok(Self::XnasBasicFinc),
1240 (Dataset::IfeuImpact, Venue::Xoff) => Ok(Self::IfeuImpactXoff),
1241 (Dataset::NdexImpact, Venue::Xoff) => Ok(Self::NdexImpactXoff),
1242 (Dataset::XnasNls, Venue::Xbos) => Ok(Self::XnasNlsXbos),
1243 (Dataset::XnasNls, Venue::Xpsx) => Ok(Self::XnasNlsXpsx),
1244 (Dataset::XnasBasic, Venue::Xbos) => Ok(Self::XnasBasicXbos),
1245 (Dataset::XnasBasic, Venue::Xpsx) => Ok(Self::XnasBasicXpsx),
1246 (Dataset::EqusSummary, Venue::Equs) => Ok(Self::EqusSummaryEqus),
1247 (Dataset::XcisTradesbbo, Venue::Xcis) => Ok(Self::XcisTradesbboXcis),
1248 (Dataset::XnysTradesbbo, Venue::Xnys) => Ok(Self::XnysTradesbboXnys),
1249 (Dataset::XnasBasic, Venue::Equs) => Ok(Self::XnasBasicEqus),
1250 (Dataset::EqusAll, Venue::Equs) => Ok(Self::EqusAllEqus),
1251 (Dataset::EqusMini, Venue::Equs) => Ok(Self::EqusMiniEqus),
1252 (Dataset::XnysTrades, Venue::Equs) => Ok(Self::XnysTradesEqus),
1253 (Dataset::IfusImpact, Venue::Ifus) => Ok(Self::IfusImpactIfus),
1254 (Dataset::IfusImpact, Venue::Xoff) => Ok(Self::IfusImpactXoff),
1255 (Dataset::IfllImpact, Venue::Ifll) => Ok(Self::IfllImpactIfll),
1256 (Dataset::IfllImpact, Venue::Xoff) => Ok(Self::IfllImpactXoff),
1257 (Dataset::XeurEobi, Venue::Xeur) => Ok(Self::XeurEobiXeur),
1258 (Dataset::XeeeEobi, Venue::Xeee) => Ok(Self::XeeeEobiXeee),
1259 (Dataset::XeurEobi, Venue::Xoff) => Ok(Self::XeurEobiXoff),
1260 (Dataset::XeeeEobi, Venue::Xoff) => Ok(Self::XeeeEobiXoff),
1261 (Dataset::XcbfPitch, Venue::Xcbf) => Ok(Self::XcbfPitchXcbf),
1262 (Dataset::XcbfPitch, Venue::Xoff) => Ok(Self::XcbfPitchXoff),
1263 _ => Err(Error::conversion::<Self>(format!("({dataset}, {venue})"))),
1264 }
1265 }
1266}
1267
1268impl AsRef<str> for Publisher {
1269 fn as_ref(&self) -> &str {
1270 self.as_str()
1271 }
1272}
1273
1274impl Display for Publisher {
1275 fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result {
1276 f.write_str(self.as_str())
1277 }
1278}
1279
1280impl std::str::FromStr for Publisher {
1281 type Err = Error;
1282
1283 fn from_str(s: &str) -> Result<Self> {
1284 match s {
1285 "GLBX.MDP3.GLBX" => Ok(Self::GlbxMdp3Glbx),
1286 "XNAS.ITCH.XNAS" => Ok(Self::XnasItchXnas),
1287 "XBOS.ITCH.XBOS" => Ok(Self::XbosItchXbos),
1288 "XPSX.ITCH.XPSX" => Ok(Self::XpsxItchXpsx),
1289 "BATS.PITCH.BATS" => Ok(Self::BatsPitchBats),
1290 "BATY.PITCH.BATY" => Ok(Self::BatyPitchBaty),
1291 "EDGA.PITCH.EDGA" => Ok(Self::EdgaPitchEdga),
1292 "EDGX.PITCH.EDGX" => Ok(Self::EdgxPitchEdgx),
1293 "XNYS.PILLAR.XNYS" => Ok(Self::XnysPillarXnys),
1294 "XCIS.PILLAR.XCIS" => Ok(Self::XcisPillarXcis),
1295 "XASE.PILLAR.XASE" => Ok(Self::XasePillarXase),
1296 "XCHI.PILLAR.XCHI" => Ok(Self::XchiPillarXchi),
1297 "XCIS.BBO.XCIS" => Ok(Self::XcisBboXcis),
1298 "XCIS.TRADES.XCIS" => Ok(Self::XcisTradesXcis),
1299 "MEMX.MEMOIR.MEMX" => Ok(Self::MemxMemoirMemx),
1300 "EPRL.DOM.EPRL" => Ok(Self::EprlDomEprl),
1301 "XNAS.NLS.FINN" => Ok(Self::XnasNlsFinn),
1302 "XNAS.NLS.FINC" => Ok(Self::XnasNlsFinc),
1303 "XNYS.TRADES.FINY" => Ok(Self::XnysTradesFiny),
1304 "OPRA.PILLAR.AMXO" => Ok(Self::OpraPillarAmxo),
1305 "OPRA.PILLAR.XBOX" => Ok(Self::OpraPillarXbox),
1306 "OPRA.PILLAR.XCBO" => Ok(Self::OpraPillarXcbo),
1307 "OPRA.PILLAR.EMLD" => Ok(Self::OpraPillarEmld),
1308 "OPRA.PILLAR.EDGO" => Ok(Self::OpraPillarEdgo),
1309 "OPRA.PILLAR.GMNI" => Ok(Self::OpraPillarGmni),
1310 "OPRA.PILLAR.XISX" => Ok(Self::OpraPillarXisx),
1311 "OPRA.PILLAR.MCRY" => Ok(Self::OpraPillarMcry),
1312 "OPRA.PILLAR.XMIO" => Ok(Self::OpraPillarXmio),
1313 "OPRA.PILLAR.ARCO" => Ok(Self::OpraPillarArco),
1314 "OPRA.PILLAR.OPRA" => Ok(Self::OpraPillarOpra),
1315 "OPRA.PILLAR.MPRL" => Ok(Self::OpraPillarMprl),
1316 "OPRA.PILLAR.XNDQ" => Ok(Self::OpraPillarXndq),
1317 "OPRA.PILLAR.XBXO" => Ok(Self::OpraPillarXbxo),
1318 "OPRA.PILLAR.C2OX" => Ok(Self::OpraPillarC2Ox),
1319 "OPRA.PILLAR.XPHL" => Ok(Self::OpraPillarXphl),
1320 "OPRA.PILLAR.BATO" => Ok(Self::OpraPillarBato),
1321 "OPRA.PILLAR.MXOP" => Ok(Self::OpraPillarMxop),
1322 "IEXG.TOPS.IEXG" => Ok(Self::IexgTopsIexg),
1323 "DBEQ.BASIC.XCHI" => Ok(Self::DbeqBasicXchi),
1324 "DBEQ.BASIC.XCIS" => Ok(Self::DbeqBasicXcis),
1325 "DBEQ.BASIC.IEXG" => Ok(Self::DbeqBasicIexg),
1326 "DBEQ.BASIC.EPRL" => Ok(Self::DbeqBasicEprl),
1327 "ARCX.PILLAR.ARCX" => Ok(Self::ArcxPillarArcx),
1328 "XNYS.BBO.XNYS" => Ok(Self::XnysBboXnys),
1329 "XNYS.TRADES.XNYS" => Ok(Self::XnysTradesXnys),
1330 "XNAS.QBBO.XNAS" => Ok(Self::XnasQbboXnas),
1331 "XNAS.NLS.XNAS" => Ok(Self::XnasNlsXnas),
1332 "EQUS.PLUS.XCHI" => Ok(Self::EqusPlusXchi),
1333 "EQUS.PLUS.XCIS" => Ok(Self::EqusPlusXcis),
1334 "EQUS.PLUS.IEXG" => Ok(Self::EqusPlusIexg),
1335 "EQUS.PLUS.EPRL" => Ok(Self::EqusPlusEprl),
1336 "EQUS.PLUS.XNAS" => Ok(Self::EqusPlusXnas),
1337 "EQUS.PLUS.XNYS" => Ok(Self::EqusPlusXnys),
1338 "EQUS.PLUS.FINN" => Ok(Self::EqusPlusFinn),
1339 "EQUS.PLUS.FINY" => Ok(Self::EqusPlusFiny),
1340 "EQUS.PLUS.FINC" => Ok(Self::EqusPlusFinc),
1341 "IFEU.IMPACT.IFEU" => Ok(Self::IfeuImpactIfeu),
1342 "NDEX.IMPACT.NDEX" => Ok(Self::NdexImpactNdex),
1343 "DBEQ.BASIC.DBEQ" => Ok(Self::DbeqBasicDbeq),
1344 "EQUS.PLUS.EQUS" => Ok(Self::EqusPlusEqus),
1345 "OPRA.PILLAR.SPHR" => Ok(Self::OpraPillarSphr),
1346 "EQUS.ALL.XCHI" => Ok(Self::EqusAllXchi),
1347 "EQUS.ALL.XCIS" => Ok(Self::EqusAllXcis),
1348 "EQUS.ALL.IEXG" => Ok(Self::EqusAllIexg),
1349 "EQUS.ALL.EPRL" => Ok(Self::EqusAllEprl),
1350 "EQUS.ALL.XNAS" => Ok(Self::EqusAllXnas),
1351 "EQUS.ALL.XNYS" => Ok(Self::EqusAllXnys),
1352 "EQUS.ALL.FINN" => Ok(Self::EqusAllFinn),
1353 "EQUS.ALL.FINY" => Ok(Self::EqusAllFiny),
1354 "EQUS.ALL.FINC" => Ok(Self::EqusAllFinc),
1355 "EQUS.ALL.BATS" => Ok(Self::EqusAllBats),
1356 "EQUS.ALL.BATY" => Ok(Self::EqusAllBaty),
1357 "EQUS.ALL.EDGA" => Ok(Self::EqusAllEdga),
1358 "EQUS.ALL.EDGX" => Ok(Self::EqusAllEdgx),
1359 "EQUS.ALL.XBOS" => Ok(Self::EqusAllXbos),
1360 "EQUS.ALL.XPSX" => Ok(Self::EqusAllXpsx),
1361 "EQUS.ALL.MEMX" => Ok(Self::EqusAllMemx),
1362 "EQUS.ALL.XASE" => Ok(Self::EqusAllXase),
1363 "EQUS.ALL.ARCX" => Ok(Self::EqusAllArcx),
1364 "EQUS.ALL.LTSE" => Ok(Self::EqusAllLtse),
1365 "XNAS.BASIC.XNAS" => Ok(Self::XnasBasicXnas),
1366 "XNAS.BASIC.FINN" => Ok(Self::XnasBasicFinn),
1367 "XNAS.BASIC.FINC" => Ok(Self::XnasBasicFinc),
1368 "IFEU.IMPACT.XOFF" => Ok(Self::IfeuImpactXoff),
1369 "NDEX.IMPACT.XOFF" => Ok(Self::NdexImpactXoff),
1370 "XNAS.NLS.XBOS" => Ok(Self::XnasNlsXbos),
1371 "XNAS.NLS.XPSX" => Ok(Self::XnasNlsXpsx),
1372 "XNAS.BASIC.XBOS" => Ok(Self::XnasBasicXbos),
1373 "XNAS.BASIC.XPSX" => Ok(Self::XnasBasicXpsx),
1374 "EQUS.SUMMARY.EQUS" => Ok(Self::EqusSummaryEqus),
1375 "XCIS.TRADESBBO.XCIS" => Ok(Self::XcisTradesbboXcis),
1376 "XNYS.TRADESBBO.XNYS" => Ok(Self::XnysTradesbboXnys),
1377 "XNAS.BASIC.EQUS" => Ok(Self::XnasBasicEqus),
1378 "EQUS.ALL.EQUS" => Ok(Self::EqusAllEqus),
1379 "EQUS.MINI.EQUS" => Ok(Self::EqusMiniEqus),
1380 "XNYS.TRADES.EQUS" => Ok(Self::XnysTradesEqus),
1381 "IFUS.IMPACT.IFUS" => Ok(Self::IfusImpactIfus),
1382 "IFUS.IMPACT.XOFF" => Ok(Self::IfusImpactXoff),
1383 "IFLL.IMPACT.IFLL" => Ok(Self::IfllImpactIfll),
1384 "IFLL.IMPACT.XOFF" => Ok(Self::IfllImpactXoff),
1385 "XEUR.EOBI.XEUR" => Ok(Self::XeurEobiXeur),
1386 "XEEE.EOBI.XEEE" => Ok(Self::XeeeEobiXeee),
1387 "XEUR.EOBI.XOFF" => Ok(Self::XeurEobiXoff),
1388 "XEEE.EOBI.XOFF" => Ok(Self::XeeeEobiXoff),
1389 "XCBF.PITCH.XCBF" => Ok(Self::XcbfPitchXcbf),
1390 "XCBF.PITCH.XOFF" => Ok(Self::XcbfPitchXoff),
1391 _ => Err(Error::conversion::<Self>(s)),
1392 }
1393 }
1394}
1395
1396#[cfg(feature = "serde")]
1397mod deserialize {
1398 use std::str::FromStr;
1399
1400 use serde::{de, Deserialize, Deserializer, Serialize};
1401
1402 use super::*;
1403
1404 impl<'de> Deserialize<'de> for Venue {
1405 fn deserialize<D: Deserializer<'de>>(
1406 deserializer: D,
1407 ) -> std::result::Result<Self, D::Error> {
1408 let str = String::deserialize(deserializer)?;
1409 FromStr::from_str(&str).map_err(de::Error::custom)
1410 }
1411 }
1412
1413 impl Serialize for Venue {
1414 fn serialize<S>(&self, serializer: S) -> std::result::Result<S::Ok, S::Error>
1415 where
1416 S: serde::Serializer,
1417 {
1418 self.as_str().serialize(serializer)
1419 }
1420 }
1421
1422 impl<'de> Deserialize<'de> for Dataset {
1423 fn deserialize<D: Deserializer<'de>>(
1424 deserializer: D,
1425 ) -> std::result::Result<Self, D::Error> {
1426 let str = String::deserialize(deserializer)?;
1427 FromStr::from_str(&str).map_err(de::Error::custom)
1428 }
1429 }
1430
1431 impl Serialize for Dataset {
1432 fn serialize<S>(&self, serializer: S) -> std::result::Result<S::Ok, S::Error>
1433 where
1434 S: serde::Serializer,
1435 {
1436 self.as_str().serialize(serializer)
1437 }
1438 }
1439
1440 impl<'de> Deserialize<'de> for Publisher {
1441 fn deserialize<D: Deserializer<'de>>(
1442 deserializer: D,
1443 ) -> std::result::Result<Self, D::Error> {
1444 let str = String::deserialize(deserializer)?;
1445 FromStr::from_str(&str).map_err(de::Error::custom)
1446 }
1447 }
1448
1449 impl Serialize for Publisher {
1450 fn serialize<S>(&self, serializer: S) -> std::result::Result<S::Ok, S::Error>
1451 where
1452 S: serde::Serializer,
1453 {
1454 self.as_str().serialize(serializer)
1455 }
1456 }
1457}
1458
1459#[cfg(feature = "python")]
1460mod python {
1461 use std::fmt::{self, Write};
1462
1463 use crate::python::WritePyRepr;
1464
1465 use super::*;
1466
1467 impl WritePyRepr for Publisher {
1468 fn write_py_repr(&self, s: &mut String) -> fmt::Result {
1469 write!(s, "{} ({:?})", self.as_str(), *self as u16)
1470 }
1471 }
1472}