1use std::convert::{TryFrom, TryInto};
10
11#[repr(u16)]
13#[derive(Debug, Clone, Copy, Eq, PartialEq, Ord, PartialOrd, Hash)]
14pub enum BinlogVersion {
15 Version1 = 1,
17 Version2,
19 Version3,
21 Version4,
23}
24
25impl From<BinlogVersion> for u16 {
26 fn from(x: BinlogVersion) -> Self {
27 x as u16
28 }
29}
30
31#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, thiserror::Error)]
32#[error("Unknown binlog version {0}")]
33#[repr(transparent)]
34pub struct UnknownBinlogVersion(pub u16);
35
36impl From<UnknownBinlogVersion> for u16 {
37 fn from(x: UnknownBinlogVersion) -> Self {
38 x.0
39 }
40}
41
42impl TryFrom<u16> for BinlogVersion {
43 type Error = UnknownBinlogVersion;
44
45 fn try_from(value: u16) -> Result<Self, Self::Error> {
46 match value {
47 1 => Ok(Self::Version1),
48 2 => Ok(Self::Version2),
49 3 => Ok(Self::Version3),
50 4 => Ok(Self::Version4),
51 x => Err(UnknownBinlogVersion(x)),
52 }
53 }
54}
55
56#[allow(non_camel_case_types)]
58#[repr(u8)]
59#[derive(Debug, Clone, Copy, Eq, PartialEq, Hash)]
60pub enum EventType {
61 UNKNOWN_EVENT = 0x00,
63 START_EVENT_V3 = 0x01,
67 QUERY_EVENT = 0x02,
70 STOP_EVENT = 0x03,
72 ROTATE_EVENT = 0x04,
75 INTVAR_EVENT = 0x05,
76 LOAD_EVENT = 0x06,
77 SLAVE_EVENT = 0x07,
79 CREATE_FILE_EVENT = 0x08,
80 APPEND_BLOCK_EVENT = 0x09,
81 EXEC_LOAD_EVENT = 0x0a,
82 DELETE_FILE_EVENT = 0x0b,
83 NEW_LOAD_EVENT = 0x0c,
84 RAND_EVENT = 0x0d,
85 USER_VAR_EVENT = 0x0e,
86 FORMAT_DESCRIPTION_EVENT = 0x0f,
92 XID_EVENT = 0x10,
93 BEGIN_LOAD_QUERY_EVENT = 0x11,
94 EXECUTE_LOAD_QUERY_EVENT = 0x12,
95 TABLE_MAP_EVENT = 0x13,
96 PRE_GA_WRITE_ROWS_EVENT = 0x14,
97 PRE_GA_UPDATE_ROWS_EVENT = 0x15,
98 PRE_GA_DELETE_ROWS_EVENT = 0x16,
99 WRITE_ROWS_EVENT_V1 = 0x17,
100 UPDATE_ROWS_EVENT_V1 = 0x18,
101 DELETE_ROWS_EVENT_V1 = 0x19,
102 INCIDENT_EVENT = 0x1a,
103 HEARTBEAT_EVENT = 0x1b,
104 IGNORABLE_EVENT = 0x1c,
105 ROWS_QUERY_EVENT = 0x1d,
106 WRITE_ROWS_EVENT = 0x1e,
107 UPDATE_ROWS_EVENT = 0x1f,
108 DELETE_ROWS_EVENT = 0x20,
109 GTID_EVENT = 0x21,
110 ANONYMOUS_GTID_EVENT = 0x22,
111 PREVIOUS_GTIDS_EVENT = 0x23,
112 TRANSACTION_CONTEXT_EVENT = 0x24,
113 VIEW_CHANGE_EVENT = 0x25,
114 XA_PREPARE_LOG_EVENT = 0x26,
116 PARTIAL_UPDATE_ROWS_EVENT = 0x27,
119 TRANSACTION_PAYLOAD_EVENT = 0x28,
120 GTID_TAGGED_LOG_EVENT = 0x2a,
126 ENUM_END_EVENT,
128}
129
130#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, thiserror::Error)]
131#[error("Unknown event type {0}")]
132#[repr(transparent)]
133pub struct UnknownEventType(pub u8);
134
135impl From<UnknownEventType> for u8 {
136 fn from(x: UnknownEventType) -> Self {
137 x.0
138 }
139}
140
141impl TryFrom<u8> for EventType {
142 type Error = UnknownEventType;
143
144 fn try_from(byte: u8) -> Result<Self, UnknownEventType> {
145 match byte {
146 0x00 => Ok(Self::UNKNOWN_EVENT),
147 0x01 => Ok(Self::START_EVENT_V3),
148 0x02 => Ok(Self::QUERY_EVENT),
149 0x03 => Ok(Self::STOP_EVENT),
150 0x04 => Ok(Self::ROTATE_EVENT),
151 0x05 => Ok(Self::INTVAR_EVENT),
152 0x06 => Ok(Self::LOAD_EVENT),
153 0x07 => Ok(Self::SLAVE_EVENT),
154 0x08 => Ok(Self::CREATE_FILE_EVENT),
155 0x09 => Ok(Self::APPEND_BLOCK_EVENT),
156 0x0a => Ok(Self::EXEC_LOAD_EVENT),
157 0x0b => Ok(Self::DELETE_FILE_EVENT),
158 0x0c => Ok(Self::NEW_LOAD_EVENT),
159 0x0d => Ok(Self::RAND_EVENT),
160 0x0e => Ok(Self::USER_VAR_EVENT),
161 0x0f => Ok(Self::FORMAT_DESCRIPTION_EVENT),
162 0x10 => Ok(Self::XID_EVENT),
163 0x11 => Ok(Self::BEGIN_LOAD_QUERY_EVENT),
164 0x12 => Ok(Self::EXECUTE_LOAD_QUERY_EVENT),
165 0x13 => Ok(Self::TABLE_MAP_EVENT),
166 0x14 => Ok(Self::PRE_GA_WRITE_ROWS_EVENT),
167 0x15 => Ok(Self::PRE_GA_UPDATE_ROWS_EVENT),
168 0x16 => Ok(Self::PRE_GA_DELETE_ROWS_EVENT),
169 0x17 => Ok(Self::WRITE_ROWS_EVENT_V1),
170 0x18 => Ok(Self::UPDATE_ROWS_EVENT_V1),
171 0x19 => Ok(Self::DELETE_ROWS_EVENT_V1),
172 0x1a => Ok(Self::INCIDENT_EVENT),
173 0x1b => Ok(Self::HEARTBEAT_EVENT),
174 0x1c => Ok(Self::IGNORABLE_EVENT),
175 0x1d => Ok(Self::ROWS_QUERY_EVENT),
176 0x1e => Ok(Self::WRITE_ROWS_EVENT),
177 0x1f => Ok(Self::UPDATE_ROWS_EVENT),
178 0x20 => Ok(Self::DELETE_ROWS_EVENT),
179 0x21 => Ok(Self::GTID_EVENT),
180 0x22 => Ok(Self::ANONYMOUS_GTID_EVENT),
181 0x23 => Ok(Self::PREVIOUS_GTIDS_EVENT),
182 0x24 => Ok(Self::TRANSACTION_CONTEXT_EVENT),
183 0x25 => Ok(Self::VIEW_CHANGE_EVENT),
184 0x26 => Ok(Self::XA_PREPARE_LOG_EVENT),
185 0x27 => Ok(Self::PARTIAL_UPDATE_ROWS_EVENT),
186 0x28 => Ok(Self::TRANSACTION_PAYLOAD_EVENT),
187 0x2a => Ok(Self::GTID_TAGGED_LOG_EVENT),
188 x => Err(UnknownEventType(x)),
189 }
190 }
191}
192
193my_bitflags! {
194 EventFlags,
195 #[error("Unknown flags in the raw value of EventFlags (raw={0:b})")]
196 UnknownEventFlags,
197 u16,
198
199 #[derive(PartialEq, Eq, Hash, Debug, Clone, Copy)]
201 pub struct EventFlags: u16 {
202 const LOG_EVENT_BINLOG_IN_USE_F = 0x0001;
205
206 const LOG_EVENT_FORCED_ROTATE_F = 0x0002;
208
209 const LOG_EVENT_THREAD_SPECIFIC_F = 0x0004;
211
212 const LOG_EVENT_SUPPRESS_USE_F = 0x0008;
214
215 const LOG_EVENT_UPDATE_TABLE_MAP_VERSION_F = 0x0010;
217
218 const LOG_EVENT_ARTIFICIAL_F = 0x0020;
220
221 const LOG_EVENT_RELAY_LOG_F = 0x0040;
223
224 const LOG_EVENT_IGNORABLE_F = 0x0080;
226
227 const LOG_EVENT_NO_FILTER_F = 0x0100;
231
232 const LOG_EVENT_MTS_ISOLATE_F = 0x0200;
235 }
236}
237
238#[derive(Debug, Clone, Copy, Eq, PartialEq, Hash)]
240#[allow(non_camel_case_types)]
241#[repr(u8)]
242pub enum BinlogChecksumAlg {
243 BINLOG_CHECKSUM_ALG_OFF = 0,
245 BINLOG_CHECKSUM_ALG_CRC32 = 1,
247}
248
249#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, thiserror::Error)]
250#[error("Unknown checksum algorithm {0}")]
251#[repr(transparent)]
252pub struct UnknownChecksumAlg(pub u8);
253
254impl From<UnknownChecksumAlg> for u8 {
255 fn from(x: UnknownChecksumAlg) -> Self {
256 x.0
257 }
258}
259
260impl TryFrom<u8> for BinlogChecksumAlg {
261 type Error = UnknownChecksumAlg;
262
263 fn try_from(value: u8) -> Result<Self, Self::Error> {
264 match value {
265 0 => Ok(Self::BINLOG_CHECKSUM_ALG_OFF),
266 1 => Ok(Self::BINLOG_CHECKSUM_ALG_CRC32),
267 x => Err(UnknownChecksumAlg(x)),
268 }
269 }
270}
271
272#[repr(u8)]
274#[allow(non_camel_case_types)]
275#[derive(Debug, Clone, Copy, Eq, PartialEq, Hash)]
276pub enum StatusVarKey {
277 Flags2 = 0,
279 SqlMode,
281 Catalog,
289 AutoIncrement,
296 Charset,
304 TimeZone,
311 CatalogNz,
318 LcTimeNames,
322 CharsetDatabase,
324 TableMapForUpdate,
327 MasterDataWritten,
329 Invoker,
338 UpdatedDbNames,
346 Microseconds,
348 CommitTs,
349 CommitTs2,
350 ExplicitDefaultsForTimestamp,
352 DdlLoggedWithXid,
355 DefaultCollationForUtf8mb4,
358 SqlRequirePrimaryKey,
360 DefaultTableEncryption,
362}
363
364#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, thiserror::Error)]
365#[error("Unknown status var key {0}")]
366#[repr(transparent)]
367pub struct UnknownStatusVarKey(pub u8);
368
369impl TryFrom<u8> for StatusVarKey {
370 type Error = UnknownStatusVarKey;
371 fn try_from(value: u8) -> Result<Self, Self::Error> {
372 match value {
373 0 => Ok(StatusVarKey::Flags2),
374 1 => Ok(StatusVarKey::SqlMode),
375 2 => Ok(StatusVarKey::Catalog),
376 3 => Ok(StatusVarKey::AutoIncrement),
377 4 => Ok(StatusVarKey::Charset),
378 5 => Ok(StatusVarKey::TimeZone),
379 6 => Ok(StatusVarKey::CatalogNz),
380 7 => Ok(StatusVarKey::LcTimeNames),
381 8 => Ok(StatusVarKey::CharsetDatabase),
382 9 => Ok(StatusVarKey::TableMapForUpdate),
383 10 => Ok(StatusVarKey::MasterDataWritten),
384 11 => Ok(StatusVarKey::Invoker),
385 12 => Ok(StatusVarKey::UpdatedDbNames),
386 13 => Ok(StatusVarKey::Microseconds),
387 14 => Ok(StatusVarKey::CommitTs),
388 15 => Ok(StatusVarKey::CommitTs2),
389 16 => Ok(StatusVarKey::ExplicitDefaultsForTimestamp),
390 17 => Ok(StatusVarKey::DdlLoggedWithXid),
391 18 => Ok(StatusVarKey::DefaultCollationForUtf8mb4),
392 19 => Ok(StatusVarKey::SqlRequirePrimaryKey),
393 20 => Ok(StatusVarKey::DefaultTableEncryption),
394 x => Err(UnknownStatusVarKey(x)),
395 }
396 }
397}
398
399my_bitflags! {
400 SemiSyncFlags,
401 #[error("Unknown flags in the raw value of SemiSyncFlags (raw={0:b})")]
402 UnknownSemiSyncFlags,
403 u8,
404
405 #[derive(PartialEq, Eq, Hash, Debug, Clone, Copy)]
407 pub struct SemiSyncFlags: u8 {
408 const SEMI_SYNC_ACK_REQ = 0x01;
411 }
412}
413
414#[repr(u8)]
416#[allow(non_camel_case_types)]
417#[derive(Debug, Clone, Copy, Eq, PartialEq, Hash)]
418pub enum LoadDuplicateHandling {
419 LOAD_DUP_ERROR = 0,
420 LOAD_DUP_IGNORE,
421 LOAD_DUP_REPLACE,
422}
423
424impl From<LoadDuplicateHandling> for u8 {
425 fn from(x: LoadDuplicateHandling) -> Self {
426 x as u8
427 }
428}
429
430#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, thiserror::Error)]
431#[error("Unknown duplicate handling variant {0}")]
432#[repr(transparent)]
433pub struct UnknownDuplicateHandling(pub u8);
434
435impl From<UnknownDuplicateHandling> for u8 {
436 fn from(x: UnknownDuplicateHandling) -> Self {
437 x.0
438 }
439}
440
441impl TryFrom<u8> for LoadDuplicateHandling {
442 type Error = UnknownDuplicateHandling;
443
444 fn try_from(value: u8) -> Result<Self, Self::Error> {
445 match value {
446 0 => Ok(Self::LOAD_DUP_ERROR),
447 1 => Ok(Self::LOAD_DUP_IGNORE),
448 2 => Ok(Self::LOAD_DUP_REPLACE),
449 x => Err(UnknownDuplicateHandling(x)),
450 }
451 }
452}
453
454#[repr(u8)]
456#[allow(non_camel_case_types)]
457#[derive(Debug, Clone, Copy, Eq, PartialEq, Hash)]
458pub enum OptionalMetadataFieldType {
459 SIGNEDNESS = 1,
467 DEFAULT_CHARSET,
480 COLUMN_CHARSET,
491 COLUMN_NAME,
500 SET_STR_VALUE,
511 ENUM_STR_VALUE,
522 GEOMETRY_TYPE,
531 SIMPLE_PRIMARY_KEY,
542 PRIMARY_KEY_WITH_PREFIX,
560 ENUM_AND_SET_DEFAULT_CHARSET,
573 ENUM_AND_SET_COLUMN_CHARSET,
584 COLUMN_VISIBILITY,
586 VECTOR_DIMENSIONALITY,
588}
589
590#[derive(Debug, Clone, Copy, PartialEq, Eq, thiserror::Error)]
591#[error("Unknown optional metadata field type {0}")]
592pub struct UnknownOptionalMetadataFieldType(pub u8);
593
594impl From<UnknownOptionalMetadataFieldType> for u8 {
595 fn from(x: UnknownOptionalMetadataFieldType) -> Self {
596 x.0
597 }
598}
599
600impl TryFrom<u8> for OptionalMetadataFieldType {
601 type Error = UnknownOptionalMetadataFieldType;
602
603 fn try_from(value: u8) -> Result<Self, Self::Error> {
604 match value {
605 1 => Ok(Self::SIGNEDNESS),
606 2 => Ok(Self::DEFAULT_CHARSET),
607 3 => Ok(Self::COLUMN_CHARSET),
608 4 => Ok(Self::COLUMN_NAME),
609 5 => Ok(Self::SET_STR_VALUE),
610 6 => Ok(Self::ENUM_STR_VALUE),
611 7 => Ok(Self::GEOMETRY_TYPE),
612 8 => Ok(Self::SIMPLE_PRIMARY_KEY),
613 9 => Ok(Self::PRIMARY_KEY_WITH_PREFIX),
614 10 => Ok(Self::ENUM_AND_SET_DEFAULT_CHARSET),
615 11 => Ok(Self::ENUM_AND_SET_COLUMN_CHARSET),
616 12 => Ok(Self::COLUMN_VISIBILITY),
617 13 => Ok(Self::VECTOR_DIMENSIONALITY),
618 x => Err(UnknownOptionalMetadataFieldType(x)),
619 }
620 }
621}
622
623#[repr(u16)]
625#[allow(non_camel_case_types)]
626#[derive(Debug, Clone, Copy, Eq, PartialEq, Hash)]
627pub enum IncidentType {
628 INCIDENT_NONE = 0,
630 INCIDENT_LOST_EVENTS = 1,
632}
633
634impl From<IncidentType> for u16 {
635 fn from(x: IncidentType) -> Self {
636 x as u16
637 }
638}
639
640#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, thiserror::Error)]
641#[error("Unknown item incident type {0}")]
642#[repr(transparent)]
643pub struct UnknownIncidentType(pub u16);
644
645impl From<UnknownIncidentType> for u16 {
646 fn from(x: UnknownIncidentType) -> Self {
647 x.0
648 }
649}
650
651impl TryFrom<u16> for IncidentType {
652 type Error = UnknownIncidentType;
653
654 fn try_from(value: u16) -> Result<Self, Self::Error> {
655 match value {
656 0 => Ok(Self::INCIDENT_NONE),
657 1 => Ok(Self::INCIDENT_LOST_EVENTS),
658 x => Err(UnknownIncidentType(x)),
659 }
660 }
661}
662
663#[repr(u8)]
665#[allow(non_camel_case_types)]
666#[derive(Debug, Clone, Copy, Eq, PartialEq, Hash)]
667pub enum IntvarEventType {
668 INVALID_INT_EVENT,
669 LAST_INSERT_ID_EVENT,
671 INSERT_ID_EVENT,
673}
674
675impl From<IntvarEventType> for u8 {
676 fn from(x: IntvarEventType) -> Self {
677 x as u8
678 }
679}
680
681#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, thiserror::Error)]
682#[error("Unknown intvar event type {0}")]
683#[repr(transparent)]
684pub struct UnknownIntvarEventType(pub u8);
685
686impl From<UnknownIntvarEventType> for u8 {
687 fn from(x: UnknownIntvarEventType) -> Self {
688 x.0
689 }
690}
691
692impl TryFrom<u8> for IntvarEventType {
693 type Error = UnknownIntvarEventType;
694
695 fn try_from(value: u8) -> Result<Self, Self::Error> {
696 match value {
697 0 => Ok(Self::INVALID_INT_EVENT),
698 1 => Ok(Self::LAST_INSERT_ID_EVENT),
699 2 => Ok(Self::INSERT_ID_EVENT),
700 x => Err(UnknownIntvarEventType(x)),
701 }
702 }
703}
704
705my_bitflags! {
706 GtidFlags,
707 #[error("Unknown flags in the raw value of GtidFlags (raw={0:b})")]
708 UnknownGtidFlags,
709 u8,
710
711 #[derive(PartialEq, Eq, Hash, Debug, Clone, Copy)]
713 pub struct GtidFlags: u8 {
714 const MAY_HAVE_SBR = 0x01;
721 }
722}
723
724#[repr(transparent)]
728#[derive(Debug, Clone, Copy, Eq, PartialEq, Ord, PartialOrd, Hash)]
729pub struct Gno(u64);
730
731impl Gno {
732 pub const MIN_GNO: u64 = 1;
733 pub const MAX_GNO: u64 = i64::MAX as u64;
734}
735
736#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, thiserror::Error)]
737#[error("Group number {0} is out of range [{min}, {max}]", min = Gno::MIN_GNO, max = Gno::MAX_GNO)]
738#[repr(transparent)]
739pub struct InvalidGno(pub u64);
740
741impl From<InvalidGno> for u64 {
742 fn from(x: InvalidGno) -> Self {
743 x.0
744 }
745}
746
747impl TryFrom<u64> for Gno {
748 type Error = InvalidGno;
749
750 fn try_from(value: u64) -> Result<Self, Self::Error> {
751 if value == 0 || (Self::MIN_GNO..Self::MAX_GNO).contains(&value) {
752 Ok(Self(value))
753 } else {
754 Err(InvalidGno(value))
755 }
756 }
757}
758
759my_bitflags! {
760 RowsEventFlags,
761 #[error("Unknown flags in the raw value of RowsEventFlags (raw={0:b})")]
762 UnknownRowsEventFlags,
763 u16,
764
765 #[derive(PartialEq, Eq, Hash, Debug, Clone, Copy)]
767 pub struct RowsEventFlags: u16 {
768 const STMT_END = 0x0001;
770 const NO_FOREIGN_KEY_CHECKS = 0x0002;
772 const RELAXED_UNIQUE_CHECKS = 0x0004;
774 const COMPLETE_ROWS = 0x0008;
777 }
778}
779
780my_bitflags! {
781 UserVarFlags,
782 #[error("Unknown flags in the raw value of UserVarFlags (raw={0:b})")]
783 UnknownUserVarFlags,
784 u8,
785
786 #[derive(PartialEq, Eq, Hash, Debug, Clone, Copy)]
788 pub struct UserVarFlags: u8 {
789 const UNSIGNED = 0x01;
790 }
791}
792
793#[allow(non_camel_case_types)]
795#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
796#[repr(u8)]
797pub enum TransactionPayloadFields {
798 OTW_PAYLOAD_HEADER_END_MARK = 0,
800
801 OTW_PAYLOAD_SIZE_FIELD = 1,
803
804 OTW_PAYLOAD_COMPRESSION_TYPE_FIELD = 2,
806
807 OTW_PAYLOAD_UNCOMPRESSED_SIZE_FIELD = 3,
809 }
811
812#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, thiserror::Error)]
813#[error("Unknown TransactionPayloadFields operation {}", _0)]
814#[repr(transparent)]
815pub struct UnknownTransactionPayloadFields(pub u8);
816
817impl TryFrom<u8> for TransactionPayloadFields {
818 type Error = UnknownTransactionPayloadFields;
819
820 fn try_from(value: u8) -> Result<Self, Self::Error> {
821 match value {
822 0 => Ok(Self::OTW_PAYLOAD_HEADER_END_MARK),
823 1 => Ok(Self::OTW_PAYLOAD_SIZE_FIELD),
824 2 => Ok(Self::OTW_PAYLOAD_COMPRESSION_TYPE_FIELD),
825 3 => Ok(Self::OTW_PAYLOAD_UNCOMPRESSED_SIZE_FIELD),
826 x => Err(UnknownTransactionPayloadFields(x)),
827 }
828 }
829}
830
831impl From<TransactionPayloadFields> for u8 {
832 fn from(x: TransactionPayloadFields) -> Self {
833 x as u8
834 }
835}
836
837impl From<TransactionPayloadFields> for u64 {
838 fn from(x: TransactionPayloadFields) -> Self {
839 x as u64
840 }
841}
842
843impl TryFrom<u64> for TransactionPayloadFields {
844 type Error = UnknownTransactionPayloadFields;
845
846 fn try_from(value: u64) -> Result<Self, Self::Error> {
847 match value {
848 0 => Ok(Self::OTW_PAYLOAD_HEADER_END_MARK),
849 1 => Ok(Self::OTW_PAYLOAD_SIZE_FIELD),
850 2 => Ok(Self::OTW_PAYLOAD_COMPRESSION_TYPE_FIELD),
851 3 => Ok(Self::OTW_PAYLOAD_UNCOMPRESSED_SIZE_FIELD),
852 x => Err(UnknownTransactionPayloadFields(x.try_into().unwrap())),
853 }
854 }
855}
856#[allow(non_camel_case_types)]
858#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
859#[repr(u8)]
860pub enum TransactionPayloadCompressionType {
861 ZSTD = 0,
863
864 NONE = 255,
866}
867
868#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, thiserror::Error)]
869#[error("Unknown TransactionPayloadCompressionType {}", _0)]
870#[repr(transparent)]
871pub struct UnknownTransactionPayloadCompressionType(pub u8);
872
873impl TryFrom<u8> for TransactionPayloadCompressionType {
874 type Error = UnknownTransactionPayloadCompressionType;
875
876 fn try_from(value: u8) -> Result<Self, Self::Error> {
877 match value {
878 0 => Ok(Self::ZSTD),
879 255 => Ok(Self::NONE),
880 x => Err(UnknownTransactionPayloadCompressionType(x)),
881 }
882 }
883}
884
885impl TryFrom<u64> for TransactionPayloadCompressionType {
886 type Error = UnknownTransactionPayloadCompressionType;
887
888 fn try_from(value: u64) -> Result<Self, Self::Error> {
889 match value {
890 0 => Ok(Self::ZSTD),
891 255 => Ok(Self::NONE),
892 x => Err(UnknownTransactionPayloadCompressionType(
893 x.try_into().unwrap(),
894 )),
895 }
896 }
897}