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