/* * SPDX-FileCopyrightText: 2020 Stalwart Labs Ltd * * SPDX-License-Identifier: LicenseRef-SEL * * This file is subject to the Stalwart Enterprise License Agreement (SEL) and * is NOT open source software. * */ use std::net::{Ipv4Addr, Ipv6Addr}; use crate::*; const VERSION: u8 = 1; pub fn serialize_events<'x>( events: impl IntoIterator>, num_events: usize, ) -> Vec { let mut buf = Vec::with_capacity(num_events * 64); buf.push(VERSION); leb128_write(&mut buf, num_events as u64); for event in events { event.serialize(&mut buf); } buf } pub fn deserialize_events(bytes: &[u8]) -> crate::Result>> { let mut iter = bytes.iter(); if *iter.next().ok_or_else(|| { StoreEvent::DataCorruption .caused_by(crate::location!()) .details("EOF while reading version") })? != VERSION { crate::bail!(StoreEvent::DataCorruption .caused_by(crate::location!()) .details("Invalid version")); } let len = leb128_read(&mut iter).ok_or_else(|| { StoreEvent::DataCorruption .caused_by(crate::location!()) .details("EOF while size") })? as usize; let mut events = Vec::with_capacity(len); for n in 0..len { events.push(Event::deserialize(&mut iter).ok_or_else(|| { StoreEvent::DataCorruption .caused_by(crate::location!()) .details(format!("Failed to deserialize event {n}")) })?); } Ok(events) } pub fn deserialize_single_event(bytes: &[u8]) -> crate::Result> { let mut iter = bytes.iter(); if *iter.next().ok_or_else(|| { StoreEvent::DataCorruption .caused_by(crate::location!()) .details("EOF while reading version") })? != VERSION { crate::bail!(StoreEvent::DataCorruption .caused_by(crate::location!()) .details("Invalid version")); } let _ = leb128_read(&mut iter).ok_or_else(|| { StoreEvent::DataCorruption .caused_by(crate::location!()) .details("EOF while size") })?; Event::deserialize(&mut iter).ok_or_else(|| { StoreEvent::DataCorruption .caused_by(crate::location!()) .details("Failed to deserialize event") }) } impl Event { pub fn serialize(&self, buf: &mut Vec) { leb128_write(buf, self.inner.typ.code()); buf.extend_from_slice(self.inner.timestamp.to_le_bytes().as_ref()); leb128_write(buf, self.keys.len() as u64); for (k, v) in &self.keys { leb128_write(buf, k.code()); v.serialize(buf); } } pub fn deserialize<'x>(iter: &mut impl Iterator) -> Option { let typ = EventType::from_code(leb128_read(iter)?)?; let timestamp = u64::from_le_bytes([ *iter.next()?, *iter.next()?, *iter.next()?, *iter.next()?, *iter.next()?, *iter.next()?, *iter.next()?, *iter.next()?, ]); let keys_len = leb128_read(iter)?; let mut keys = Vec::with_capacity(keys_len as usize); for _ in 0..keys_len { let key = Key::from_code(leb128_read(iter)?)?; let value = Value::deserialize(iter)?; keys.push((key, value)); } Some(Event { inner: EventDetails { typ, timestamp, level: Level::Info, span: None, }, keys, }) } } impl Value { fn serialize(&self, buf: &mut Vec) { match self { Value::Static(v) => { buf.push(0u8); leb128_write(buf, v.len() as u64); buf.extend(v.as_bytes()); } Value::String(v) => { buf.push(0u8); leb128_write(buf, v.len() as u64); buf.extend(v.as_bytes()); } Value::UInt(v) => { buf.push(1u8); leb128_write(buf, *v); } Value::Int(v) => { buf.push(2u8); buf.extend(&v.to_le_bytes()); } Value::Float(v) => { buf.push(3u8); buf.extend(&v.to_le_bytes()); } Value::Timestamp(v) => { buf.push(4u8); buf.extend(&v.to_le_bytes()); } Value::Duration(v) => { buf.push(5u8); leb128_write(buf, *v); } Value::Bytes(v) => { buf.push(6u8); leb128_write(buf, v.len() as u64); buf.extend(v); } Value::Bool(true) => { buf.push(7u8); } Value::Bool(false) => { buf.push(8u8); } Value::Ipv4(v) => { buf.push(9u8); buf.extend(&v.octets()); } Value::Ipv6(v) => { buf.push(10u8); buf.extend(&v.octets()); } Value::Event(v) => { buf.push(11u8); leb128_write(buf, v.inner.code()); leb128_write(buf, v.keys.len() as u64); for (k, v) in &v.keys { leb128_write(buf, k.code()); v.serialize(buf); } } Value::Array(v) => { buf.push(12u8); leb128_write(buf, v.len() as u64); for value in v { value.serialize(buf); } } Value::None => { buf.push(13u8); } } } fn deserialize<'x>(iter: &mut impl Iterator) -> Option { match iter.next()? { 0 => { let mut buf = vec![0u8; leb128_read(iter)? as usize]; for byte in buf.iter_mut() { *byte = *iter.next()?; } Some(Value::String(String::from_utf8(buf).ok()?)) } 1 => Some(Value::UInt(leb128_read(iter)?)), 2 => { let mut buf = [0u8; std::mem::size_of::()]; for byte in buf.iter_mut() { *byte = *iter.next()?; } Some(Value::Int(i64::from_le_bytes(buf))) } 3 => { let mut buf = [0u8; std::mem::size_of::()]; for byte in buf.iter_mut() { *byte = *iter.next()?; } Some(Value::Float(f64::from_le_bytes(buf))) } 4 => { let mut buf = [0u8; std::mem::size_of::()]; for byte in buf.iter_mut() { *byte = *iter.next()?; } Some(Value::Timestamp(u64::from_le_bytes(buf))) } 5 => Some(Value::Duration(leb128_read(iter)?)), 6 => { let mut buf = vec![0u8; leb128_read(iter)? as usize]; for byte in buf.iter_mut() { *byte = *iter.next()?; } Some(Value::Bytes(buf)) } 7 => Some(Value::Bool(true)), 8 => Some(Value::Bool(false)), 9 => { let mut buf = [0u8; 4]; for byte in buf.iter_mut() { *byte = *iter.next()?; } Some(Value::Ipv4(Ipv4Addr::from(buf))) } 10 => { let mut buf = [0u8; 16]; for byte in buf.iter_mut() { *byte = *iter.next()?; } Some(Value::Ipv6(Ipv6Addr::from(buf))) } 11 => { let code = EventType::from_code(leb128_read(iter)?)?; let keys_len = leb128_read(iter)?; let mut keys = Vec::with_capacity(keys_len as usize); for _ in 0..keys_len { let key = Key::from_code(leb128_read(iter)?)?; let value = Value::deserialize(iter)?; keys.push((key, value)); } Some(Value::Event(Event::with_keys(code, keys))) } 12 => { let len = leb128_read(iter)?; let mut values = Vec::with_capacity(len as usize); for _ in 0..len { values.push(Value::deserialize(iter)?); } Some(Value::Array(values)) } 13 => Some(Value::None), _ => None, } } } fn leb128_write(buf: &mut Vec, mut value: u64) { loop { if value < 0x80 { buf.push(value as u8); break; } else { buf.push(((value & 0x7f) | 0x80) as u8); value >>= 7; } } } fn leb128_read<'x>(iter: &mut impl Iterator) -> Option { let mut result = 0; for shift in [0, 7, 14, 21, 28, 35, 42, 49, 56, 63] { let byte = iter.next()?; if (byte & 0x80) == 0 { result |= (*byte as u64) << shift; return Some(result); } else { result |= ((byte & 0x7F) as u64) << shift; } } None } impl EventType { pub fn code(&self) -> u64 { match self { EventType::Acme(AcmeEvent::AuthCompleted) => 0, EventType::Acme(AcmeEvent::AuthError) => 1, EventType::Acme(AcmeEvent::AuthPending) => 2, EventType::Acme(AcmeEvent::AuthStart) => 3, EventType::Acme(AcmeEvent::AuthTooManyAttempts) => 4, EventType::Acme(AcmeEvent::AuthValid) => 5, EventType::Acme(AcmeEvent::ClientMissingSni) => 6, EventType::Acme(AcmeEvent::ClientSuppliedSni) => 7, EventType::Acme(AcmeEvent::DnsRecordCreated) => 8, EventType::Acme(AcmeEvent::DnsRecordCreationFailed) => 9, EventType::Acme(AcmeEvent::DnsRecordDeletionFailed) => 10, EventType::Acme(AcmeEvent::DnsRecordLookupFailed) => 11, EventType::Acme(AcmeEvent::DnsRecordNotPropagated) => 12, EventType::Acme(AcmeEvent::DnsRecordPropagated) => 13, EventType::Acme(AcmeEvent::DnsRecordPropagationTimeout) => 14, EventType::Acme(AcmeEvent::Error) => 15, EventType::Acme(AcmeEvent::OrderCompleted) => 16, EventType::Acme(AcmeEvent::OrderInvalid) => 17, EventType::Acme(AcmeEvent::OrderProcessing) => 18, EventType::Acme(AcmeEvent::OrderReady) => 19, EventType::Acme(AcmeEvent::OrderStart) => 20, EventType::Acme(AcmeEvent::OrderValid) => 21, EventType::Acme(AcmeEvent::ProcessCert) => 22, EventType::Acme(AcmeEvent::RenewBackoff) => 23, EventType::Acme(AcmeEvent::TlsAlpnError) => 24, EventType::Acme(AcmeEvent::TlsAlpnReceived) => 25, EventType::Acme(AcmeEvent::TokenNotFound) => 26, EventType::Arc(ArcEvent::BrokenChain) => 27, EventType::Arc(ArcEvent::ChainTooLong) => 28, EventType::Arc(ArcEvent::HasHeaderTag) => 29, EventType::Arc(ArcEvent::InvalidCv) => 30, EventType::Arc(ArcEvent::InvalidInstance) => 31, EventType::Arc(ArcEvent::SealerNotFound) => 32, EventType::Security(SecurityEvent::AuthenticationBan) => 33, EventType::Auth(AuthEvent::Error) => 34, EventType::Auth(AuthEvent::Failed) => 35, EventType::Auth(AuthEvent::MissingTotp) => 36, EventType::Auth(AuthEvent::Success) => 37, EventType::Auth(AuthEvent::TooManyAttempts) => 38, EventType::Cluster(ClusterEvent::DecryptionError) => 39, EventType::Cluster(ClusterEvent::EmptyPacket) => 40, EventType::Cluster(ClusterEvent::Error) => 41, EventType::Cluster(ClusterEvent::InvalidPacket) => 42, EventType::Cluster(ClusterEvent::OneOrMorePeersOffline) => 43, EventType::Cluster(ClusterEvent::PeerAlive) => 44, EventType::Cluster(ClusterEvent::PeerBackOnline) => 45, EventType::Cluster(ClusterEvent::PeerDiscovered) => 46, EventType::Cluster(ClusterEvent::PeerHasChanges) => 47, EventType::Cluster(ClusterEvent::PeerLeaving) => 49, EventType::Cluster(ClusterEvent::PeerOffline) => 50, EventType::Cluster(ClusterEvent::PeerSuspected) => 51, EventType::Cluster(ClusterEvent::PeerSuspectedIsAlive) => 52, EventType::Config(ConfigEvent::AlreadyUpToDate) => 53, EventType::Config(ConfigEvent::BuildError) => 54, EventType::Config(ConfigEvent::BuildWarning) => 55, EventType::Config(ConfigEvent::DefaultApplied) => 56, EventType::Config(ConfigEvent::ExternalKeyIgnored) => 57, EventType::Config(ConfigEvent::FetchError) => 58, EventType::Config(ConfigEvent::ImportExternal) => 59, EventType::Config(ConfigEvent::MacroError) => 60, EventType::Config(ConfigEvent::MissingSetting) => 61, EventType::Config(ConfigEvent::ParseError) => 62, EventType::Config(ConfigEvent::ParseWarning) => 63, EventType::Config(ConfigEvent::UnusedSetting) => 64, EventType::Config(ConfigEvent::WriteError) => 65, EventType::Dane(DaneEvent::AuthenticationFailure) => 66, EventType::Dane(DaneEvent::AuthenticationSuccess) => 67, EventType::Dane(DaneEvent::CertificateParseError) => 68, EventType::Dane(DaneEvent::NoCertificatesFound) => 69, EventType::Dane(DaneEvent::TlsaRecordFetch) => 70, EventType::Dane(DaneEvent::TlsaRecordFetchError) => 71, EventType::Dane(DaneEvent::TlsaRecordInvalid) => 72, EventType::Dane(DaneEvent::TlsaRecordMatch) => 73, EventType::Dane(DaneEvent::TlsaRecordNotDnssecSigned) => 74, EventType::Dane(DaneEvent::TlsaRecordNotFound) => 75, EventType::Delivery(DeliveryEvent::AttemptEnd) => 76, EventType::Delivery(DeliveryEvent::AttemptStart) => 77, EventType::Delivery(DeliveryEvent::Auth) => 78, EventType::Delivery(DeliveryEvent::AuthFailed) => 79, EventType::Delivery(DeliveryEvent::Completed) => 80, EventType::Delivery(DeliveryEvent::ConcurrencyLimitExceeded) => 81, EventType::Delivery(DeliveryEvent::Connect) => 82, EventType::Delivery(DeliveryEvent::ConnectError) => 83, EventType::Delivery(DeliveryEvent::Delivered) => 84, EventType::Delivery(DeliveryEvent::DomainDeliveryStart) => 85, EventType::Delivery(DeliveryEvent::DoubleBounce) => 86, EventType::Delivery(DeliveryEvent::DsnPermFail) => 87, EventType::Delivery(DeliveryEvent::DsnSuccess) => 88, EventType::Delivery(DeliveryEvent::DsnTempFail) => 89, EventType::Delivery(DeliveryEvent::Ehlo) => 90, EventType::Delivery(DeliveryEvent::EhloRejected) => 91, EventType::Delivery(DeliveryEvent::Failed) => 92, EventType::Delivery(DeliveryEvent::GreetingFailed) => 93, EventType::Delivery(DeliveryEvent::ImplicitTlsError) => 94, EventType::Delivery(DeliveryEvent::IpLookup) => 95, EventType::Delivery(DeliveryEvent::IpLookupFailed) => 96, EventType::Delivery(DeliveryEvent::MailFrom) => 97, EventType::Delivery(DeliveryEvent::MailFromRejected) => 98, EventType::Delivery(DeliveryEvent::MessageRejected) => 99, EventType::Delivery(DeliveryEvent::MissingOutboundHostname) => 100, EventType::Delivery(DeliveryEvent::MxLookup) => 101, EventType::Delivery(DeliveryEvent::MxLookupFailed) => 102, EventType::Delivery(DeliveryEvent::NullMx) => 103, EventType::Delivery(DeliveryEvent::RateLimitExceeded) => 104, EventType::Delivery(DeliveryEvent::RawInput) => 105, EventType::Delivery(DeliveryEvent::RawOutput) => 106, EventType::Delivery(DeliveryEvent::RcptTo) => 107, EventType::Delivery(DeliveryEvent::RcptToFailed) => 108, EventType::Delivery(DeliveryEvent::RcptToRejected) => 109, EventType::Delivery(DeliveryEvent::StartTls) => 110, EventType::Delivery(DeliveryEvent::StartTlsDisabled) => 111, EventType::Delivery(DeliveryEvent::StartTlsError) => 112, EventType::Delivery(DeliveryEvent::StartTlsUnavailable) => 113, EventType::Dkim(DkimEvent::Fail) => 114, EventType::Dkim(DkimEvent::FailedAuidMatch) => 115, EventType::Dkim(DkimEvent::FailedBodyHashMatch) => 116, EventType::Dkim(DkimEvent::FailedVerification) => 117, EventType::Dkim(DkimEvent::IncompatibleAlgorithms) => 118, EventType::Dkim(DkimEvent::Neutral) => 119, EventType::Dkim(DkimEvent::None) => 120, EventType::Dkim(DkimEvent::Pass) => 121, EventType::Dkim(DkimEvent::PermError) => 122, EventType::Dkim(DkimEvent::RevokedPublicKey) => 123, EventType::Dkim(DkimEvent::SignatureExpired) => 124, EventType::Dkim(DkimEvent::SignatureLength) => 125, EventType::Dkim(DkimEvent::SignerNotFound) => 126, EventType::Dkim(DkimEvent::TempError) => 127, EventType::Dkim(DkimEvent::UnsupportedAlgorithm) => 128, EventType::Dkim(DkimEvent::UnsupportedCanonicalization) => 129, EventType::Dkim(DkimEvent::UnsupportedKeyType) => 130, EventType::Dkim(DkimEvent::UnsupportedVersion) => 131, EventType::Dmarc(DmarcEvent::Fail) => 132, EventType::Dmarc(DmarcEvent::None) => 133, EventType::Dmarc(DmarcEvent::Pass) => 134, EventType::Dmarc(DmarcEvent::PermError) => 135, EventType::Dmarc(DmarcEvent::TempError) => 136, EventType::Eval(EvalEvent::DirectoryNotFound) => 137, EventType::Eval(EvalEvent::Error) => 138, EventType::Eval(EvalEvent::Result) => 139, EventType::Eval(EvalEvent::StoreNotFound) => 140, EventType::FtsIndex(FtsIndexEvent::BlobNotFound) => 141, EventType::FtsIndex(FtsIndexEvent::Index) => 142, EventType::FtsIndex(FtsIndexEvent::LockBusy) => 143, EventType::FtsIndex(FtsIndexEvent::Locked) => 144, EventType::FtsIndex(FtsIndexEvent::MetadataNotFound) => 145, EventType::Housekeeper(HousekeeperEvent::PurgeAccounts) => 146, EventType::Housekeeper(HousekeeperEvent::PurgeSessions) => 147, EventType::Housekeeper(HousekeeperEvent::PurgeStore) => 148, EventType::Housekeeper(HousekeeperEvent::Schedule) => 149, EventType::Housekeeper(HousekeeperEvent::Start) => 150, EventType::Housekeeper(HousekeeperEvent::Stop) => 151, EventType::Http(HttpEvent::ConnectionEnd) => 152, EventType::Http(HttpEvent::ConnectionStart) => 153, EventType::Http(HttpEvent::Error) => 154, EventType::Http(HttpEvent::RequestBody) => 155, EventType::Http(HttpEvent::RequestUrl) => 156, EventType::Http(HttpEvent::ResponseBody) => 157, EventType::Http(HttpEvent::XForwardedMissing) => 158, EventType::Imap(ImapEvent::Append) => 159, EventType::Imap(ImapEvent::Capabilities) => 160, EventType::Imap(ImapEvent::Close) => 161, EventType::Imap(ImapEvent::ConnectionEnd) => 162, EventType::Imap(ImapEvent::ConnectionStart) => 163, EventType::Imap(ImapEvent::Copy) => 164, EventType::Imap(ImapEvent::CreateMailbox) => 165, EventType::Imap(ImapEvent::DeleteMailbox) => 166, EventType::Imap(ImapEvent::Enable) => 167, EventType::Imap(ImapEvent::Error) => 168, EventType::Imap(ImapEvent::Expunge) => 169, EventType::Imap(ImapEvent::Fetch) => 170, EventType::Imap(ImapEvent::GetAcl) => 171, EventType::Imap(ImapEvent::Id) => 172, EventType::Imap(ImapEvent::IdleStart) => 173, EventType::Imap(ImapEvent::IdleStop) => 174, EventType::Imap(ImapEvent::List) => 175, EventType::Imap(ImapEvent::ListRights) => 176, EventType::Imap(ImapEvent::Logout) => 177, EventType::Imap(ImapEvent::Lsub) => 178, EventType::Imap(ImapEvent::Move) => 179, EventType::Imap(ImapEvent::MyRights) => 180, EventType::Imap(ImapEvent::Namespace) => 181, EventType::Imap(ImapEvent::Noop) => 182, EventType::Imap(ImapEvent::RawInput) => 183, EventType::Imap(ImapEvent::RawOutput) => 184, EventType::Imap(ImapEvent::RenameMailbox) => 185, EventType::Imap(ImapEvent::Search) => 186, EventType::Imap(ImapEvent::Select) => 187, EventType::Imap(ImapEvent::SetAcl) => 188, EventType::Imap(ImapEvent::Sort) => 189, EventType::Imap(ImapEvent::Status) => 190, EventType::Imap(ImapEvent::Store) => 191, EventType::Imap(ImapEvent::Subscribe) => 192, EventType::Imap(ImapEvent::Thread) => 193, EventType::Imap(ImapEvent::Unsubscribe) => 194, EventType::IncomingReport(IncomingReportEvent::AbuseReport) => 195, EventType::IncomingReport(IncomingReportEvent::ArfParseFailed) => 196, EventType::IncomingReport(IncomingReportEvent::AuthFailureReport) => 197, EventType::IncomingReport(IncomingReportEvent::DecompressError) => 198, EventType::IncomingReport(IncomingReportEvent::DmarcParseFailed) => 199, EventType::IncomingReport(IncomingReportEvent::DmarcReport) => 200, EventType::IncomingReport(IncomingReportEvent::DmarcReportWithWarnings) => 201, EventType::IncomingReport(IncomingReportEvent::FraudReport) => 202, EventType::IncomingReport(IncomingReportEvent::MessageParseFailed) => 203, EventType::IncomingReport(IncomingReportEvent::NotSpamReport) => 204, EventType::IncomingReport(IncomingReportEvent::OtherReport) => 205, EventType::IncomingReport(IncomingReportEvent::TlsReport) => 206, EventType::IncomingReport(IncomingReportEvent::TlsReportWithWarnings) => 207, EventType::IncomingReport(IncomingReportEvent::TlsRpcParseFailed) => 208, EventType::IncomingReport(IncomingReportEvent::VirusReport) => 209, EventType::Iprev(IprevEvent::Fail) => 210, EventType::Iprev(IprevEvent::None) => 211, EventType::Iprev(IprevEvent::Pass) => 212, EventType::Iprev(IprevEvent::PermError) => 213, EventType::Iprev(IprevEvent::TempError) => 214, EventType::Jmap(JmapEvent::AccountNotFound) => 215, EventType::Jmap(JmapEvent::AccountNotSupportedByMethod) => 216, EventType::Jmap(JmapEvent::AccountReadOnly) => 217, EventType::Jmap(JmapEvent::AnchorNotFound) => 218, EventType::Jmap(JmapEvent::CannotCalculateChanges) => 219, EventType::Jmap(JmapEvent::Forbidden) => 220, EventType::Jmap(JmapEvent::InvalidArguments) => 221, EventType::Jmap(JmapEvent::InvalidResultReference) => 222, EventType::Jmap(JmapEvent::MethodCall) => 223, EventType::Jmap(JmapEvent::NotFound) => 224, EventType::Jmap(JmapEvent::NotJson) => 225, EventType::Jmap(JmapEvent::NotRequest) => 226, EventType::Jmap(JmapEvent::RequestTooLarge) => 227, EventType::Jmap(JmapEvent::StateMismatch) => 228, EventType::Jmap(JmapEvent::UnknownCapability) => 229, EventType::Jmap(JmapEvent::UnknownDataType) => 230, EventType::Jmap(JmapEvent::UnknownMethod) => 231, EventType::Jmap(JmapEvent::UnsupportedFilter) => 232, EventType::Jmap(JmapEvent::UnsupportedSort) => 233, EventType::Jmap(JmapEvent::WebsocketError) => 234, EventType::Jmap(JmapEvent::WebsocketStart) => 235, EventType::Jmap(JmapEvent::WebsocketStop) => 236, EventType::Limit(LimitEvent::BlobQuota) => 237, EventType::Limit(LimitEvent::CallsIn) => 238, EventType::Limit(LimitEvent::ConcurrentConnection) => 239, EventType::Limit(LimitEvent::ConcurrentRequest) => 240, EventType::Limit(LimitEvent::ConcurrentUpload) => 241, EventType::Limit(LimitEvent::Quota) => 242, EventType::Limit(LimitEvent::SizeRequest) => 243, EventType::Limit(LimitEvent::SizeUpload) => 244, EventType::Limit(LimitEvent::TooManyRequests) => 245, EventType::MailAuth(MailAuthEvent::Base64) => 246, EventType::MailAuth(MailAuthEvent::Crypto) => 247, EventType::MailAuth(MailAuthEvent::DnsError) => 248, EventType::MailAuth(MailAuthEvent::DnsInvalidRecordType) => 249, EventType::MailAuth(MailAuthEvent::DnsRecordNotFound) => 250, EventType::MailAuth(MailAuthEvent::Io) => 251, EventType::MailAuth(MailAuthEvent::MissingParameters) => 252, EventType::MailAuth(MailAuthEvent::NoHeadersFound) => 253, EventType::MailAuth(MailAuthEvent::ParseError) => 254, EventType::MailAuth(MailAuthEvent::PolicyNotAligned) => 255, EventType::ManageSieve(ManageSieveEvent::Capabilities) => 256, EventType::ManageSieve(ManageSieveEvent::CheckScript) => 257, EventType::ManageSieve(ManageSieveEvent::ConnectionEnd) => 258, EventType::ManageSieve(ManageSieveEvent::ConnectionStart) => 259, EventType::ManageSieve(ManageSieveEvent::CreateScript) => 260, EventType::ManageSieve(ManageSieveEvent::DeleteScript) => 261, EventType::ManageSieve(ManageSieveEvent::Error) => 262, EventType::ManageSieve(ManageSieveEvent::GetScript) => 263, EventType::ManageSieve(ManageSieveEvent::HaveSpace) => 264, EventType::ManageSieve(ManageSieveEvent::ListScripts) => 265, EventType::ManageSieve(ManageSieveEvent::Logout) => 266, EventType::ManageSieve(ManageSieveEvent::Noop) => 267, EventType::ManageSieve(ManageSieveEvent::RawInput) => 268, EventType::ManageSieve(ManageSieveEvent::RawOutput) => 269, EventType::ManageSieve(ManageSieveEvent::RenameScript) => 270, EventType::ManageSieve(ManageSieveEvent::SetActive) => 271, EventType::ManageSieve(ManageSieveEvent::StartTls) => 272, EventType::ManageSieve(ManageSieveEvent::Unauthenticate) => 273, EventType::ManageSieve(ManageSieveEvent::UpdateScript) => 274, EventType::Manage(ManageEvent::AlreadyExists) => 275, EventType::Manage(ManageEvent::AssertFailed) => 276, EventType::Manage(ManageEvent::Error) => 277, EventType::Manage(ManageEvent::MissingParameter) => 278, EventType::Manage(ManageEvent::NotFound) => 279, EventType::Manage(ManageEvent::NotSupported) => 280, EventType::MessageIngest(MessageIngestEvent::Duplicate) => 281, EventType::MessageIngest(MessageIngestEvent::Error) => 282, EventType::MessageIngest(MessageIngestEvent::Ham) => 283, EventType::MessageIngest(MessageIngestEvent::ImapAppend) => 284, EventType::MessageIngest(MessageIngestEvent::JmapAppend) => 285, EventType::MessageIngest(MessageIngestEvent::Spam) => 286, EventType::Milter(MilterEvent::ActionAccept) => 287, EventType::Milter(MilterEvent::ActionConnectionFailure) => 288, EventType::Milter(MilterEvent::ActionDiscard) => 289, EventType::Milter(MilterEvent::ActionReject) => 290, EventType::Milter(MilterEvent::ActionReplyCode) => 291, EventType::Milter(MilterEvent::ActionShutdown) => 292, EventType::Milter(MilterEvent::ActionTempFail) => 293, EventType::Milter(MilterEvent::Disconnected) => 294, EventType::Milter(MilterEvent::FrameInvalid) => 295, EventType::Milter(MilterEvent::FrameTooLarge) => 296, EventType::Milter(MilterEvent::IoError) => 297, EventType::Milter(MilterEvent::ParseError) => 298, EventType::Milter(MilterEvent::Read) => 299, EventType::Milter(MilterEvent::Timeout) => 300, EventType::Milter(MilterEvent::TlsInvalidName) => 301, EventType::Milter(MilterEvent::UnexpectedResponse) => 302, EventType::Milter(MilterEvent::Write) => 303, EventType::MtaHook(MtaHookEvent::ActionAccept) => 304, EventType::MtaHook(MtaHookEvent::ActionDiscard) => 305, EventType::MtaHook(MtaHookEvent::ActionQuarantine) => 306, EventType::MtaHook(MtaHookEvent::ActionReject) => 307, EventType::MtaHook(MtaHookEvent::Error) => 308, EventType::MtaSts(MtaStsEvent::Authorized) => 309, EventType::MtaSts(MtaStsEvent::InvalidPolicy) => 310, EventType::MtaSts(MtaStsEvent::NotAuthorized) => 311, EventType::MtaSts(MtaStsEvent::PolicyFetch) => 312, EventType::MtaSts(MtaStsEvent::PolicyFetchError) => 313, EventType::MtaSts(MtaStsEvent::PolicyNotFound) => 314, EventType::Network(NetworkEvent::AcceptError) => 315, EventType::Network(NetworkEvent::BindError) => 316, EventType::Network(NetworkEvent::Closed) => 317, EventType::Security(SecurityEvent::IpBlocked) => 318, EventType::Network(NetworkEvent::FlushError) => 319, EventType::Network(NetworkEvent::ListenError) => 320, EventType::Network(NetworkEvent::ListenStart) => 321, EventType::Network(NetworkEvent::ListenStop) => 322, EventType::Network(NetworkEvent::ProxyError) => 323, EventType::Network(NetworkEvent::ReadError) => 324, EventType::Network(NetworkEvent::SetOptError) => 325, EventType::Network(NetworkEvent::SplitError) => 326, EventType::Network(NetworkEvent::Timeout) => 327, EventType::Network(NetworkEvent::WriteError) => 328, EventType::OutgoingReport(OutgoingReportEvent::DkimRateLimited) => 329, EventType::OutgoingReport(OutgoingReportEvent::DkimReport) => 330, EventType::OutgoingReport(OutgoingReportEvent::DmarcAggregateReport) => 331, EventType::OutgoingReport(OutgoingReportEvent::DmarcRateLimited) => 332, EventType::OutgoingReport(OutgoingReportEvent::DmarcReport) => 333, EventType::OutgoingReport(OutgoingReportEvent::HttpSubmission) => 334, EventType::OutgoingReport(OutgoingReportEvent::LockBusy) => 335, EventType::OutgoingReport(OutgoingReportEvent::LockDeleted) => 336, EventType::OutgoingReport(OutgoingReportEvent::Locked) => 337, EventType::OutgoingReport(OutgoingReportEvent::NoRecipientsFound) => 338, EventType::OutgoingReport(OutgoingReportEvent::NotFound) => 339, EventType::OutgoingReport(OutgoingReportEvent::ReportingAddressValidationError) => 340, EventType::OutgoingReport(OutgoingReportEvent::SpfRateLimited) => 341, EventType::OutgoingReport(OutgoingReportEvent::SpfReport) => 342, EventType::OutgoingReport(OutgoingReportEvent::SubmissionError) => 343, EventType::OutgoingReport(OutgoingReportEvent::TlsAggregate) => 344, EventType::OutgoingReport(OutgoingReportEvent::UnauthorizedReportingAddress) => 345, EventType::Pop3(Pop3Event::Capabilities) => 346, EventType::Pop3(Pop3Event::ConnectionEnd) => 347, EventType::Pop3(Pop3Event::ConnectionStart) => 348, EventType::Pop3(Pop3Event::Delete) => 349, EventType::Pop3(Pop3Event::Error) => 350, EventType::Pop3(Pop3Event::Fetch) => 351, EventType::Pop3(Pop3Event::List) => 352, EventType::Pop3(Pop3Event::ListMessage) => 353, EventType::Pop3(Pop3Event::Noop) => 354, EventType::Pop3(Pop3Event::Quit) => 355, EventType::Pop3(Pop3Event::RawInput) => 356, EventType::Pop3(Pop3Event::RawOutput) => 357, EventType::Pop3(Pop3Event::Reset) => 358, EventType::Pop3(Pop3Event::StartTls) => 359, EventType::Pop3(Pop3Event::Stat) => 360, EventType::Pop3(Pop3Event::Uidl) => 361, EventType::Pop3(Pop3Event::UidlMessage) => 362, EventType::Pop3(Pop3Event::Utf8) => 363, EventType::Purge(PurgeEvent::AutoExpunge) => 364, EventType::Purge(PurgeEvent::Error) => 365, EventType::Purge(PurgeEvent::Finished) => 366, EventType::Purge(PurgeEvent::PurgeActive) => 367, EventType::Purge(PurgeEvent::Running) => 368, EventType::Purge(PurgeEvent::Started) => 369, EventType::Purge(PurgeEvent::TombstoneCleanup) => 370, EventType::PushSubscription(PushSubscriptionEvent::Error) => 371, EventType::PushSubscription(PushSubscriptionEvent::NotFound) => 372, EventType::PushSubscription(PushSubscriptionEvent::Success) => 373, EventType::Queue(QueueEvent::BlobNotFound) => 374, EventType::Queue(QueueEvent::ConcurrencyLimitExceeded) => 375, EventType::Queue(QueueEvent::LockBusy) => 376, EventType::Queue(QueueEvent::Locked) => 377, EventType::Queue(QueueEvent::QueueAutogenerated) => 378, EventType::Queue(QueueEvent::QueueDsn) => 379, EventType::Queue(QueueEvent::QueueMessage) => 380, EventType::Queue(QueueEvent::QueueMessageAuthenticated) => 381, EventType::Queue(QueueEvent::QueueReport) => 382, EventType::Queue(QueueEvent::QuotaExceeded) => 383, EventType::Queue(QueueEvent::RateLimitExceeded) => 384, EventType::Queue(QueueEvent::Rescheduled) => 385, EventType::Resource(ResourceEvent::BadParameters) => 386, EventType::Resource(ResourceEvent::DownloadExternal) => 387, EventType::Resource(ResourceEvent::Error) => 388, EventType::Resource(ResourceEvent::NotFound) => 389, EventType::Resource(ResourceEvent::WebadminUnpacked) => 390, EventType::Server(ServerEvent::Licensing) => 391, EventType::Server(ServerEvent::Shutdown) => 392, EventType::Server(ServerEvent::Startup) => 393, EventType::Server(ServerEvent::StartupError) => 394, EventType::Server(ServerEvent::ThreadError) => 395, EventType::Sieve(SieveEvent::ActionAccept) => 396, EventType::Sieve(SieveEvent::ActionAcceptReplace) => 397, EventType::Sieve(SieveEvent::ActionDiscard) => 398, EventType::Sieve(SieveEvent::ActionReject) => 399, EventType::Sieve(SieveEvent::ListNotFound) => 400, EventType::Sieve(SieveEvent::MessageTooLarge) => 401, EventType::Sieve(SieveEvent::NotSupported) => 402, EventType::Sieve(SieveEvent::QuotaExceeded) => 403, EventType::Sieve(SieveEvent::RuntimeError) => 404, EventType::Sieve(SieveEvent::ScriptNotFound) => 405, EventType::Sieve(SieveEvent::SendMessage) => 406, EventType::Sieve(SieveEvent::UnexpectedError) => 407, EventType::Smtp(SmtpEvent::AlreadyAuthenticated) => 408, EventType::Smtp(SmtpEvent::ArcFail) => 409, EventType::Smtp(SmtpEvent::ArcPass) => 410, EventType::Smtp(SmtpEvent::AuthExchangeTooLong) => 411, EventType::Smtp(SmtpEvent::AuthMechanismNotSupported) => 412, EventType::Smtp(SmtpEvent::AuthNotAllowed) => 413, EventType::Smtp(SmtpEvent::CommandNotImplemented) => 414, EventType::Smtp(SmtpEvent::ConcurrencyLimitExceeded) => 415, EventType::Smtp(SmtpEvent::ConnectionEnd) => 416, EventType::Smtp(SmtpEvent::ConnectionStart) => 417, EventType::Smtp(SmtpEvent::DeliverByDisabled) => 418, EventType::Smtp(SmtpEvent::DeliverByInvalid) => 419, EventType::Smtp(SmtpEvent::DidNotSayEhlo) => 420, EventType::Smtp(SmtpEvent::DkimFail) => 421, EventType::Smtp(SmtpEvent::DkimPass) => 422, EventType::Smtp(SmtpEvent::DmarcFail) => 423, EventType::Smtp(SmtpEvent::DmarcPass) => 424, EventType::Smtp(SmtpEvent::DsnDisabled) => 425, EventType::Smtp(SmtpEvent::Ehlo) => 426, EventType::Smtp(SmtpEvent::EhloExpected) => 427, EventType::Smtp(SmtpEvent::Error) => 428, EventType::Smtp(SmtpEvent::Expn) => 429, EventType::Smtp(SmtpEvent::ExpnDisabled) => 430, EventType::Smtp(SmtpEvent::ExpnNotFound) => 431, EventType::Smtp(SmtpEvent::FutureReleaseDisabled) => 432, EventType::Smtp(SmtpEvent::FutureReleaseInvalid) => 433, EventType::Smtp(SmtpEvent::Help) => 434, EventType::Smtp(SmtpEvent::InvalidCommand) => 435, EventType::Smtp(SmtpEvent::InvalidEhlo) => 436, EventType::Smtp(SmtpEvent::InvalidParameter) => 437, EventType::Smtp(SmtpEvent::InvalidRecipientAddress) => 438, EventType::Smtp(SmtpEvent::InvalidSenderAddress) => 439, EventType::Smtp(SmtpEvent::IprevFail) => 440, EventType::Smtp(SmtpEvent::IprevPass) => 441, EventType::Smtp(SmtpEvent::LhloExpected) => 442, EventType::Smtp(SmtpEvent::LoopDetected) => 443, EventType::Smtp(SmtpEvent::MailFrom) => 444, EventType::Smtp(SmtpEvent::MailFromMissing) => 445, EventType::Smtp(SmtpEvent::MailFromRewritten) => 446, EventType::Smtp(SmtpEvent::MailFromUnauthenticated) => 447, EventType::Smtp(SmtpEvent::MailFromUnauthorized) => 448, EventType::Smtp(SmtpEvent::MailboxDoesNotExist) => 449, EventType::Smtp(SmtpEvent::MessageParseFailed) => 450, EventType::Smtp(SmtpEvent::MessageTooLarge) => 451, EventType::Smtp(SmtpEvent::MissingAuthDirectory) => 452, EventType::Smtp(SmtpEvent::MissingLocalHostname) => 453, EventType::Smtp(SmtpEvent::MtPriorityDisabled) => 454, EventType::Smtp(SmtpEvent::MtPriorityInvalid) => 455, EventType::Smtp(SmtpEvent::MultipleMailFrom) => 456, EventType::Smtp(SmtpEvent::Noop) => 457, EventType::Smtp(SmtpEvent::PipeError) => 458, EventType::Smtp(SmtpEvent::PipeSuccess) => 459, EventType::Smtp(SmtpEvent::Quit) => 460, EventType::Smtp(SmtpEvent::RateLimitExceeded) => 461, EventType::Smtp(SmtpEvent::RawInput) => 462, EventType::Smtp(SmtpEvent::RawOutput) => 463, EventType::Smtp(SmtpEvent::RcptTo) => 464, EventType::Smtp(SmtpEvent::RcptToDuplicate) => 465, EventType::Smtp(SmtpEvent::RcptToMissing) => 466, EventType::Smtp(SmtpEvent::RcptToRewritten) => 467, EventType::Smtp(SmtpEvent::RelayNotAllowed) => 468, EventType::Smtp(SmtpEvent::RemoteIdNotFound) => 469, EventType::Smtp(SmtpEvent::RequestTooLarge) => 470, EventType::Smtp(SmtpEvent::RequireTlsDisabled) => 471, EventType::Smtp(SmtpEvent::Rset) => 472, EventType::Smtp(SmtpEvent::SpfEhloFail) => 473, EventType::Smtp(SmtpEvent::SpfEhloPass) => 474, EventType::Smtp(SmtpEvent::SpfFromFail) => 475, EventType::Smtp(SmtpEvent::SpfFromPass) => 476, EventType::Smtp(SmtpEvent::StartTls) => 477, EventType::Smtp(SmtpEvent::StartTlsAlready) => 478, EventType::Smtp(SmtpEvent::StartTlsUnavailable) => 479, EventType::Smtp(SmtpEvent::SyntaxError) => 480, EventType::Smtp(SmtpEvent::TimeLimitExceeded) => 481, EventType::Smtp(SmtpEvent::TooManyInvalidRcpt) => 482, EventType::Smtp(SmtpEvent::TooManyMessages) => 483, EventType::Smtp(SmtpEvent::TooManyRecipients) => 484, EventType::Smtp(SmtpEvent::TransferLimitExceeded) => 485, EventType::Smtp(SmtpEvent::UnsupportedParameter) => 486, EventType::Smtp(SmtpEvent::Vrfy) => 487, EventType::Smtp(SmtpEvent::VrfyDisabled) => 488, EventType::Smtp(SmtpEvent::VrfyNotFound) => 489, EventType::Spam(SpamEvent::Classify) => 490, EventType::Spam(SpamEvent::ClassifyError) => 491, EventType::Spam(SpamEvent::ListUpdated) => 492, EventType::Spam(SpamEvent::NotEnoughTrainingData) => 493, EventType::Spam(SpamEvent::PyzorError) => 494, EventType::Spam(SpamEvent::Train) => 495, EventType::Spam(SpamEvent::TrainBalance) => 496, EventType::Spam(SpamEvent::TrainError) => 497, EventType::Spf(SpfEvent::Fail) => 498, EventType::Spf(SpfEvent::Neutral) => 499, EventType::Spf(SpfEvent::None) => 500, EventType::Spf(SpfEvent::Pass) => 501, EventType::Spf(SpfEvent::PermError) => 502, EventType::Spf(SpfEvent::SoftFail) => 503, EventType::Spf(SpfEvent::TempError) => 504, EventType::Store(StoreEvent::AssertValueFailed) => 505, EventType::Store(StoreEvent::BlobDelete) => 506, EventType::Store(StoreEvent::BlobMissingMarker) => 507, EventType::Store(StoreEvent::BlobRead) => 508, EventType::Store(StoreEvent::BlobWrite) => 509, EventType::Store(StoreEvent::CryptoError) => 510, EventType::Store(StoreEvent::DataCorruption) => 511, EventType::Store(StoreEvent::DataIterate) => 512, EventType::Store(StoreEvent::DataWrite) => 513, EventType::Store(StoreEvent::DecompressError) => 514, EventType::Store(StoreEvent::DeserializeError) => 515, EventType::Store(StoreEvent::ElasticsearchError) => 516, EventType::Store(StoreEvent::FilesystemError) => 517, EventType::Store(StoreEvent::FoundationdbError) => 518, EventType::Store(StoreEvent::LdapBind) => 519, EventType::Store(StoreEvent::LdapError) => 520, EventType::Store(StoreEvent::LdapQuery) => 521, EventType::Store(StoreEvent::MysqlError) => 522, EventType::Store(StoreEvent::NotConfigured) => 523, EventType::Store(StoreEvent::NotFound) => 524, EventType::Store(StoreEvent::NotSupported) => 525, EventType::Store(StoreEvent::PoolError) => 526, EventType::Store(StoreEvent::PostgresqlError) => 527, EventType::Store(StoreEvent::RedisError) => 528, EventType::Store(StoreEvent::RocksdbError) => 529, EventType::Store(StoreEvent::S3Error) => 530, EventType::Store(StoreEvent::SqlQuery) => 531, EventType::Store(StoreEvent::SqliteError) => 532, EventType::Store(StoreEvent::UnexpectedError) => 533, EventType::Telemetry(TelemetryEvent::JournalError) => 534, EventType::Telemetry(TelemetryEvent::LogError) => 535, EventType::Telemetry(TelemetryEvent::OtelExporterError) => 536, EventType::Telemetry(TelemetryEvent::OtelMetricsExporterError) => 537, EventType::Telemetry(TelemetryEvent::PrometheusExporterError) => 538, EventType::Telemetry(TelemetryEvent::WebhookError) => 539, EventType::TlsRpt(TlsRptEvent::RecordFetch) => 540, EventType::TlsRpt(TlsRptEvent::RecordFetchError) => 541, EventType::Tls(TlsEvent::CertificateNotFound) => 542, EventType::Tls(TlsEvent::Handshake) => 543, EventType::Tls(TlsEvent::HandshakeError) => 544, EventType::Tls(TlsEvent::MultipleCertificatesAvailable) => 545, EventType::Tls(TlsEvent::NoCertificatesAvailable) => 546, EventType::Tls(TlsEvent::NotConfigured) => 547, EventType::Telemetry(TelemetryEvent::Alert) => 548, EventType::Security(SecurityEvent::AbuseBan) => 549, EventType::Security(SecurityEvent::LoiterBan) => 550, EventType::Smtp(SmtpEvent::MailFromNotAllowed) => 551, EventType::Security(SecurityEvent::Unauthorized) => 552, EventType::Limit(LimitEvent::TenantQuota) => 553, EventType::Auth(AuthEvent::TokenExpired) => 554, EventType::Auth(AuthEvent::ClientRegistration) => 555, EventType::Ai(AiEvent::LlmResponse) => 556, EventType::Ai(AiEvent::ApiError) => 557, EventType::Security(SecurityEvent::ScanBan) => 558, EventType::Store(StoreEvent::AzureError) => 559, EventType::TlsRpt(TlsRptEvent::RecordNotFound) => 560, EventType::Smtp(SmtpEvent::RcptToGreylisted) => 561, } } pub fn from_code(code: u64) -> Option { match code { 0 => Some(EventType::Acme(AcmeEvent::AuthCompleted)), 1 => Some(EventType::Acme(AcmeEvent::AuthError)), 2 => Some(EventType::Acme(AcmeEvent::AuthPending)), 3 => Some(EventType::Acme(AcmeEvent::AuthStart)), 4 => Some(EventType::Acme(AcmeEvent::AuthTooManyAttempts)), 5 => Some(EventType::Acme(AcmeEvent::AuthValid)), 6 => Some(EventType::Acme(AcmeEvent::ClientMissingSni)), 7 => Some(EventType::Acme(AcmeEvent::ClientSuppliedSni)), 8 => Some(EventType::Acme(AcmeEvent::DnsRecordCreated)), 9 => Some(EventType::Acme(AcmeEvent::DnsRecordCreationFailed)), 10 => Some(EventType::Acme(AcmeEvent::DnsRecordDeletionFailed)), 11 => Some(EventType::Acme(AcmeEvent::DnsRecordLookupFailed)), 12 => Some(EventType::Acme(AcmeEvent::DnsRecordNotPropagated)), 13 => Some(EventType::Acme(AcmeEvent::DnsRecordPropagated)), 14 => Some(EventType::Acme(AcmeEvent::DnsRecordPropagationTimeout)), 15 => Some(EventType::Acme(AcmeEvent::Error)), 16 => Some(EventType::Acme(AcmeEvent::OrderCompleted)), 17 => Some(EventType::Acme(AcmeEvent::OrderInvalid)), 18 => Some(EventType::Acme(AcmeEvent::OrderProcessing)), 19 => Some(EventType::Acme(AcmeEvent::OrderReady)), 20 => Some(EventType::Acme(AcmeEvent::OrderStart)), 21 => Some(EventType::Acme(AcmeEvent::OrderValid)), 22 => Some(EventType::Acme(AcmeEvent::ProcessCert)), 23 => Some(EventType::Acme(AcmeEvent::RenewBackoff)), 24 => Some(EventType::Acme(AcmeEvent::TlsAlpnError)), 25 => Some(EventType::Acme(AcmeEvent::TlsAlpnReceived)), 26 => Some(EventType::Acme(AcmeEvent::TokenNotFound)), 27 => Some(EventType::Arc(ArcEvent::BrokenChain)), 28 => Some(EventType::Arc(ArcEvent::ChainTooLong)), 29 => Some(EventType::Arc(ArcEvent::HasHeaderTag)), 30 => Some(EventType::Arc(ArcEvent::InvalidCv)), 31 => Some(EventType::Arc(ArcEvent::InvalidInstance)), 32 => Some(EventType::Arc(ArcEvent::SealerNotFound)), 33 => Some(EventType::Security(SecurityEvent::AuthenticationBan)), 34 => Some(EventType::Auth(AuthEvent::Error)), 35 => Some(EventType::Auth(AuthEvent::Failed)), 36 => Some(EventType::Auth(AuthEvent::MissingTotp)), 37 => Some(EventType::Auth(AuthEvent::Success)), 38 => Some(EventType::Auth(AuthEvent::TooManyAttempts)), 39 => Some(EventType::Cluster(ClusterEvent::DecryptionError)), 40 => Some(EventType::Cluster(ClusterEvent::EmptyPacket)), 41 => Some(EventType::Cluster(ClusterEvent::Error)), 42 => Some(EventType::Cluster(ClusterEvent::InvalidPacket)), 43 => Some(EventType::Cluster(ClusterEvent::OneOrMorePeersOffline)), 44 => Some(EventType::Cluster(ClusterEvent::PeerAlive)), 45 => Some(EventType::Cluster(ClusterEvent::PeerBackOnline)), 46 => Some(EventType::Cluster(ClusterEvent::PeerDiscovered)), 47 => Some(EventType::Cluster(ClusterEvent::PeerHasChanges)), 48 => Some(EventType::Cluster(ClusterEvent::PeerHasChanges)), // TODO: recycle 49 => Some(EventType::Cluster(ClusterEvent::PeerLeaving)), 50 => Some(EventType::Cluster(ClusterEvent::PeerOffline)), 51 => Some(EventType::Cluster(ClusterEvent::PeerSuspected)), 52 => Some(EventType::Cluster(ClusterEvent::PeerSuspectedIsAlive)), 53 => Some(EventType::Config(ConfigEvent::AlreadyUpToDate)), 54 => Some(EventType::Config(ConfigEvent::BuildError)), 55 => Some(EventType::Config(ConfigEvent::BuildWarning)), 56 => Some(EventType::Config(ConfigEvent::DefaultApplied)), 57 => Some(EventType::Config(ConfigEvent::ExternalKeyIgnored)), 58 => Some(EventType::Config(ConfigEvent::FetchError)), 59 => Some(EventType::Config(ConfigEvent::ImportExternal)), 60 => Some(EventType::Config(ConfigEvent::MacroError)), 61 => Some(EventType::Config(ConfigEvent::MissingSetting)), 62 => Some(EventType::Config(ConfigEvent::ParseError)), 63 => Some(EventType::Config(ConfigEvent::ParseWarning)), 64 => Some(EventType::Config(ConfigEvent::UnusedSetting)), 65 => Some(EventType::Config(ConfigEvent::WriteError)), 66 => Some(EventType::Dane(DaneEvent::AuthenticationFailure)), 67 => Some(EventType::Dane(DaneEvent::AuthenticationSuccess)), 68 => Some(EventType::Dane(DaneEvent::CertificateParseError)), 69 => Some(EventType::Dane(DaneEvent::NoCertificatesFound)), 70 => Some(EventType::Dane(DaneEvent::TlsaRecordFetch)), 71 => Some(EventType::Dane(DaneEvent::TlsaRecordFetchError)), 72 => Some(EventType::Dane(DaneEvent::TlsaRecordInvalid)), 73 => Some(EventType::Dane(DaneEvent::TlsaRecordMatch)), 74 => Some(EventType::Dane(DaneEvent::TlsaRecordNotDnssecSigned)), 75 => Some(EventType::Dane(DaneEvent::TlsaRecordNotFound)), 76 => Some(EventType::Delivery(DeliveryEvent::AttemptEnd)), 77 => Some(EventType::Delivery(DeliveryEvent::AttemptStart)), 78 => Some(EventType::Delivery(DeliveryEvent::Auth)), 79 => Some(EventType::Delivery(DeliveryEvent::AuthFailed)), 80 => Some(EventType::Delivery(DeliveryEvent::Completed)), 81 => Some(EventType::Delivery(DeliveryEvent::ConcurrencyLimitExceeded)), 82 => Some(EventType::Delivery(DeliveryEvent::Connect)), 83 => Some(EventType::Delivery(DeliveryEvent::ConnectError)), 84 => Some(EventType::Delivery(DeliveryEvent::Delivered)), 85 => Some(EventType::Delivery(DeliveryEvent::DomainDeliveryStart)), 86 => Some(EventType::Delivery(DeliveryEvent::DoubleBounce)), 87 => Some(EventType::Delivery(DeliveryEvent::DsnPermFail)), 88 => Some(EventType::Delivery(DeliveryEvent::DsnSuccess)), 89 => Some(EventType::Delivery(DeliveryEvent::DsnTempFail)), 90 => Some(EventType::Delivery(DeliveryEvent::Ehlo)), 91 => Some(EventType::Delivery(DeliveryEvent::EhloRejected)), 92 => Some(EventType::Delivery(DeliveryEvent::Failed)), 93 => Some(EventType::Delivery(DeliveryEvent::GreetingFailed)), 94 => Some(EventType::Delivery(DeliveryEvent::ImplicitTlsError)), 95 => Some(EventType::Delivery(DeliveryEvent::IpLookup)), 96 => Some(EventType::Delivery(DeliveryEvent::IpLookupFailed)), 97 => Some(EventType::Delivery(DeliveryEvent::MailFrom)), 98 => Some(EventType::Delivery(DeliveryEvent::MailFromRejected)), 99 => Some(EventType::Delivery(DeliveryEvent::MessageRejected)), 100 => Some(EventType::Delivery(DeliveryEvent::MissingOutboundHostname)), 101 => Some(EventType::Delivery(DeliveryEvent::MxLookup)), 102 => Some(EventType::Delivery(DeliveryEvent::MxLookupFailed)), 103 => Some(EventType::Delivery(DeliveryEvent::NullMx)), 104 => Some(EventType::Delivery(DeliveryEvent::RateLimitExceeded)), 105 => Some(EventType::Delivery(DeliveryEvent::RawInput)), 106 => Some(EventType::Delivery(DeliveryEvent::RawOutput)), 107 => Some(EventType::Delivery(DeliveryEvent::RcptTo)), 108 => Some(EventType::Delivery(DeliveryEvent::RcptToFailed)), 109 => Some(EventType::Delivery(DeliveryEvent::RcptToRejected)), 110 => Some(EventType::Delivery(DeliveryEvent::StartTls)), 111 => Some(EventType::Delivery(DeliveryEvent::StartTlsDisabled)), 112 => Some(EventType::Delivery(DeliveryEvent::StartTlsError)), 113 => Some(EventType::Delivery(DeliveryEvent::StartTlsUnavailable)), 114 => Some(EventType::Dkim(DkimEvent::Fail)), 115 => Some(EventType::Dkim(DkimEvent::FailedAuidMatch)), 116 => Some(EventType::Dkim(DkimEvent::FailedBodyHashMatch)), 117 => Some(EventType::Dkim(DkimEvent::FailedVerification)), 118 => Some(EventType::Dkim(DkimEvent::IncompatibleAlgorithms)), 119 => Some(EventType::Dkim(DkimEvent::Neutral)), 120 => Some(EventType::Dkim(DkimEvent::None)), 121 => Some(EventType::Dkim(DkimEvent::Pass)), 122 => Some(EventType::Dkim(DkimEvent::PermError)), 123 => Some(EventType::Dkim(DkimEvent::RevokedPublicKey)), 124 => Some(EventType::Dkim(DkimEvent::SignatureExpired)), 125 => Some(EventType::Dkim(DkimEvent::SignatureLength)), 126 => Some(EventType::Dkim(DkimEvent::SignerNotFound)), 127 => Some(EventType::Dkim(DkimEvent::TempError)), 128 => Some(EventType::Dkim(DkimEvent::UnsupportedAlgorithm)), 129 => Some(EventType::Dkim(DkimEvent::UnsupportedCanonicalization)), 130 => Some(EventType::Dkim(DkimEvent::UnsupportedKeyType)), 131 => Some(EventType::Dkim(DkimEvent::UnsupportedVersion)), 132 => Some(EventType::Dmarc(DmarcEvent::Fail)), 133 => Some(EventType::Dmarc(DmarcEvent::None)), 134 => Some(EventType::Dmarc(DmarcEvent::Pass)), 135 => Some(EventType::Dmarc(DmarcEvent::PermError)), 136 => Some(EventType::Dmarc(DmarcEvent::TempError)), 137 => Some(EventType::Eval(EvalEvent::DirectoryNotFound)), 138 => Some(EventType::Eval(EvalEvent::Error)), 139 => Some(EventType::Eval(EvalEvent::Result)), 140 => Some(EventType::Eval(EvalEvent::StoreNotFound)), 141 => Some(EventType::FtsIndex(FtsIndexEvent::BlobNotFound)), 142 => Some(EventType::FtsIndex(FtsIndexEvent::Index)), 143 => Some(EventType::FtsIndex(FtsIndexEvent::LockBusy)), 144 => Some(EventType::FtsIndex(FtsIndexEvent::Locked)), 145 => Some(EventType::FtsIndex(FtsIndexEvent::MetadataNotFound)), 146 => Some(EventType::Housekeeper(HousekeeperEvent::PurgeAccounts)), 147 => Some(EventType::Housekeeper(HousekeeperEvent::PurgeSessions)), 148 => Some(EventType::Housekeeper(HousekeeperEvent::PurgeStore)), 149 => Some(EventType::Housekeeper(HousekeeperEvent::Schedule)), 150 => Some(EventType::Housekeeper(HousekeeperEvent::Start)), 151 => Some(EventType::Housekeeper(HousekeeperEvent::Stop)), 152 => Some(EventType::Http(HttpEvent::ConnectionEnd)), 153 => Some(EventType::Http(HttpEvent::ConnectionStart)), 154 => Some(EventType::Http(HttpEvent::Error)), 155 => Some(EventType::Http(HttpEvent::RequestBody)), 156 => Some(EventType::Http(HttpEvent::RequestUrl)), 157 => Some(EventType::Http(HttpEvent::ResponseBody)), 158 => Some(EventType::Http(HttpEvent::XForwardedMissing)), 159 => Some(EventType::Imap(ImapEvent::Append)), 160 => Some(EventType::Imap(ImapEvent::Capabilities)), 161 => Some(EventType::Imap(ImapEvent::Close)), 162 => Some(EventType::Imap(ImapEvent::ConnectionEnd)), 163 => Some(EventType::Imap(ImapEvent::ConnectionStart)), 164 => Some(EventType::Imap(ImapEvent::Copy)), 165 => Some(EventType::Imap(ImapEvent::CreateMailbox)), 166 => Some(EventType::Imap(ImapEvent::DeleteMailbox)), 167 => Some(EventType::Imap(ImapEvent::Enable)), 168 => Some(EventType::Imap(ImapEvent::Error)), 169 => Some(EventType::Imap(ImapEvent::Expunge)), 170 => Some(EventType::Imap(ImapEvent::Fetch)), 171 => Some(EventType::Imap(ImapEvent::GetAcl)), 172 => Some(EventType::Imap(ImapEvent::Id)), 173 => Some(EventType::Imap(ImapEvent::IdleStart)), 174 => Some(EventType::Imap(ImapEvent::IdleStop)), 175 => Some(EventType::Imap(ImapEvent::List)), 176 => Some(EventType::Imap(ImapEvent::ListRights)), 177 => Some(EventType::Imap(ImapEvent::Logout)), 178 => Some(EventType::Imap(ImapEvent::Lsub)), 179 => Some(EventType::Imap(ImapEvent::Move)), 180 => Some(EventType::Imap(ImapEvent::MyRights)), 181 => Some(EventType::Imap(ImapEvent::Namespace)), 182 => Some(EventType::Imap(ImapEvent::Noop)), 183 => Some(EventType::Imap(ImapEvent::RawInput)), 184 => Some(EventType::Imap(ImapEvent::RawOutput)), 185 => Some(EventType::Imap(ImapEvent::RenameMailbox)), 186 => Some(EventType::Imap(ImapEvent::Search)), 187 => Some(EventType::Imap(ImapEvent::Select)), 188 => Some(EventType::Imap(ImapEvent::SetAcl)), 189 => Some(EventType::Imap(ImapEvent::Sort)), 190 => Some(EventType::Imap(ImapEvent::Status)), 191 => Some(EventType::Imap(ImapEvent::Store)), 192 => Some(EventType::Imap(ImapEvent::Subscribe)), 193 => Some(EventType::Imap(ImapEvent::Thread)), 194 => Some(EventType::Imap(ImapEvent::Unsubscribe)), 195 => Some(EventType::IncomingReport(IncomingReportEvent::AbuseReport)), 196 => Some(EventType::IncomingReport( IncomingReportEvent::ArfParseFailed, )), 197 => Some(EventType::IncomingReport( IncomingReportEvent::AuthFailureReport, )), 198 => Some(EventType::IncomingReport( IncomingReportEvent::DecompressError, )), 199 => Some(EventType::IncomingReport( IncomingReportEvent::DmarcParseFailed, )), 200 => Some(EventType::IncomingReport(IncomingReportEvent::DmarcReport)), 201 => Some(EventType::IncomingReport( IncomingReportEvent::DmarcReportWithWarnings, )), 202 => Some(EventType::IncomingReport(IncomingReportEvent::FraudReport)), 203 => Some(EventType::IncomingReport( IncomingReportEvent::MessageParseFailed, )), 204 => Some(EventType::IncomingReport( IncomingReportEvent::NotSpamReport, )), 205 => Some(EventType::IncomingReport(IncomingReportEvent::OtherReport)), 206 => Some(EventType::IncomingReport(IncomingReportEvent::TlsReport)), 207 => Some(EventType::IncomingReport( IncomingReportEvent::TlsReportWithWarnings, )), 208 => Some(EventType::IncomingReport( IncomingReportEvent::TlsRpcParseFailed, )), 209 => Some(EventType::IncomingReport(IncomingReportEvent::VirusReport)), 210 => Some(EventType::Iprev(IprevEvent::Fail)), 211 => Some(EventType::Iprev(IprevEvent::None)), 212 => Some(EventType::Iprev(IprevEvent::Pass)), 213 => Some(EventType::Iprev(IprevEvent::PermError)), 214 => Some(EventType::Iprev(IprevEvent::TempError)), 215 => Some(EventType::Jmap(JmapEvent::AccountNotFound)), 216 => Some(EventType::Jmap(JmapEvent::AccountNotSupportedByMethod)), 217 => Some(EventType::Jmap(JmapEvent::AccountReadOnly)), 218 => Some(EventType::Jmap(JmapEvent::AnchorNotFound)), 219 => Some(EventType::Jmap(JmapEvent::CannotCalculateChanges)), 220 => Some(EventType::Jmap(JmapEvent::Forbidden)), 221 => Some(EventType::Jmap(JmapEvent::InvalidArguments)), 222 => Some(EventType::Jmap(JmapEvent::InvalidResultReference)), 223 => Some(EventType::Jmap(JmapEvent::MethodCall)), 224 => Some(EventType::Jmap(JmapEvent::NotFound)), 225 => Some(EventType::Jmap(JmapEvent::NotJson)), 226 => Some(EventType::Jmap(JmapEvent::NotRequest)), 227 => Some(EventType::Jmap(JmapEvent::RequestTooLarge)), 228 => Some(EventType::Jmap(JmapEvent::StateMismatch)), 229 => Some(EventType::Jmap(JmapEvent::UnknownCapability)), 230 => Some(EventType::Jmap(JmapEvent::UnknownDataType)), 231 => Some(EventType::Jmap(JmapEvent::UnknownMethod)), 232 => Some(EventType::Jmap(JmapEvent::UnsupportedFilter)), 233 => Some(EventType::Jmap(JmapEvent::UnsupportedSort)), 234 => Some(EventType::Jmap(JmapEvent::WebsocketError)), 235 => Some(EventType::Jmap(JmapEvent::WebsocketStart)), 236 => Some(EventType::Jmap(JmapEvent::WebsocketStop)), 237 => Some(EventType::Limit(LimitEvent::BlobQuota)), 238 => Some(EventType::Limit(LimitEvent::CallsIn)), 239 => Some(EventType::Limit(LimitEvent::ConcurrentConnection)), 240 => Some(EventType::Limit(LimitEvent::ConcurrentRequest)), 241 => Some(EventType::Limit(LimitEvent::ConcurrentUpload)), 242 => Some(EventType::Limit(LimitEvent::Quota)), 243 => Some(EventType::Limit(LimitEvent::SizeRequest)), 244 => Some(EventType::Limit(LimitEvent::SizeUpload)), 245 => Some(EventType::Limit(LimitEvent::TooManyRequests)), 246 => Some(EventType::MailAuth(MailAuthEvent::Base64)), 247 => Some(EventType::MailAuth(MailAuthEvent::Crypto)), 248 => Some(EventType::MailAuth(MailAuthEvent::DnsError)), 249 => Some(EventType::MailAuth(MailAuthEvent::DnsInvalidRecordType)), 250 => Some(EventType::MailAuth(MailAuthEvent::DnsRecordNotFound)), 251 => Some(EventType::MailAuth(MailAuthEvent::Io)), 252 => Some(EventType::MailAuth(MailAuthEvent::MissingParameters)), 253 => Some(EventType::MailAuth(MailAuthEvent::NoHeadersFound)), 254 => Some(EventType::MailAuth(MailAuthEvent::ParseError)), 255 => Some(EventType::MailAuth(MailAuthEvent::PolicyNotAligned)), 256 => Some(EventType::ManageSieve(ManageSieveEvent::Capabilities)), 257 => Some(EventType::ManageSieve(ManageSieveEvent::CheckScript)), 258 => Some(EventType::ManageSieve(ManageSieveEvent::ConnectionEnd)), 259 => Some(EventType::ManageSieve(ManageSieveEvent::ConnectionStart)), 260 => Some(EventType::ManageSieve(ManageSieveEvent::CreateScript)), 261 => Some(EventType::ManageSieve(ManageSieveEvent::DeleteScript)), 262 => Some(EventType::ManageSieve(ManageSieveEvent::Error)), 263 => Some(EventType::ManageSieve(ManageSieveEvent::GetScript)), 264 => Some(EventType::ManageSieve(ManageSieveEvent::HaveSpace)), 265 => Some(EventType::ManageSieve(ManageSieveEvent::ListScripts)), 266 => Some(EventType::ManageSieve(ManageSieveEvent::Logout)), 267 => Some(EventType::ManageSieve(ManageSieveEvent::Noop)), 268 => Some(EventType::ManageSieve(ManageSieveEvent::RawInput)), 269 => Some(EventType::ManageSieve(ManageSieveEvent::RawOutput)), 270 => Some(EventType::ManageSieve(ManageSieveEvent::RenameScript)), 271 => Some(EventType::ManageSieve(ManageSieveEvent::SetActive)), 272 => Some(EventType::ManageSieve(ManageSieveEvent::StartTls)), 273 => Some(EventType::ManageSieve(ManageSieveEvent::Unauthenticate)), 274 => Some(EventType::ManageSieve(ManageSieveEvent::UpdateScript)), 275 => Some(EventType::Manage(ManageEvent::AlreadyExists)), 276 => Some(EventType::Manage(ManageEvent::AssertFailed)), 277 => Some(EventType::Manage(ManageEvent::Error)), 278 => Some(EventType::Manage(ManageEvent::MissingParameter)), 279 => Some(EventType::Manage(ManageEvent::NotFound)), 280 => Some(EventType::Manage(ManageEvent::NotSupported)), 281 => Some(EventType::MessageIngest(MessageIngestEvent::Duplicate)), 282 => Some(EventType::MessageIngest(MessageIngestEvent::Error)), 283 => Some(EventType::MessageIngest(MessageIngestEvent::Ham)), 284 => Some(EventType::MessageIngest(MessageIngestEvent::ImapAppend)), 285 => Some(EventType::MessageIngest(MessageIngestEvent::JmapAppend)), 286 => Some(EventType::MessageIngest(MessageIngestEvent::Spam)), 287 => Some(EventType::Milter(MilterEvent::ActionAccept)), 288 => Some(EventType::Milter(MilterEvent::ActionConnectionFailure)), 289 => Some(EventType::Milter(MilterEvent::ActionDiscard)), 290 => Some(EventType::Milter(MilterEvent::ActionReject)), 291 => Some(EventType::Milter(MilterEvent::ActionReplyCode)), 292 => Some(EventType::Milter(MilterEvent::ActionShutdown)), 293 => Some(EventType::Milter(MilterEvent::ActionTempFail)), 294 => Some(EventType::Milter(MilterEvent::Disconnected)), 295 => Some(EventType::Milter(MilterEvent::FrameInvalid)), 296 => Some(EventType::Milter(MilterEvent::FrameTooLarge)), 297 => Some(EventType::Milter(MilterEvent::IoError)), 298 => Some(EventType::Milter(MilterEvent::ParseError)), 299 => Some(EventType::Milter(MilterEvent::Read)), 300 => Some(EventType::Milter(MilterEvent::Timeout)), 301 => Some(EventType::Milter(MilterEvent::TlsInvalidName)), 302 => Some(EventType::Milter(MilterEvent::UnexpectedResponse)), 303 => Some(EventType::Milter(MilterEvent::Write)), 304 => Some(EventType::MtaHook(MtaHookEvent::ActionAccept)), 305 => Some(EventType::MtaHook(MtaHookEvent::ActionDiscard)), 306 => Some(EventType::MtaHook(MtaHookEvent::ActionQuarantine)), 307 => Some(EventType::MtaHook(MtaHookEvent::ActionReject)), 308 => Some(EventType::MtaHook(MtaHookEvent::Error)), 309 => Some(EventType::MtaSts(MtaStsEvent::Authorized)), 310 => Some(EventType::MtaSts(MtaStsEvent::InvalidPolicy)), 311 => Some(EventType::MtaSts(MtaStsEvent::NotAuthorized)), 312 => Some(EventType::MtaSts(MtaStsEvent::PolicyFetch)), 313 => Some(EventType::MtaSts(MtaStsEvent::PolicyFetchError)), 314 => Some(EventType::MtaSts(MtaStsEvent::PolicyNotFound)), 315 => Some(EventType::Network(NetworkEvent::AcceptError)), 316 => Some(EventType::Network(NetworkEvent::BindError)), 317 => Some(EventType::Network(NetworkEvent::Closed)), 318 => Some(EventType::Security(SecurityEvent::IpBlocked)), 319 => Some(EventType::Network(NetworkEvent::FlushError)), 320 => Some(EventType::Network(NetworkEvent::ListenError)), 321 => Some(EventType::Network(NetworkEvent::ListenStart)), 322 => Some(EventType::Network(NetworkEvent::ListenStop)), 323 => Some(EventType::Network(NetworkEvent::ProxyError)), 324 => Some(EventType::Network(NetworkEvent::ReadError)), 325 => Some(EventType::Network(NetworkEvent::SetOptError)), 326 => Some(EventType::Network(NetworkEvent::SplitError)), 327 => Some(EventType::Network(NetworkEvent::Timeout)), 328 => Some(EventType::Network(NetworkEvent::WriteError)), 329 => Some(EventType::OutgoingReport( OutgoingReportEvent::DkimRateLimited, )), 330 => Some(EventType::OutgoingReport(OutgoingReportEvent::DkimReport)), 331 => Some(EventType::OutgoingReport( OutgoingReportEvent::DmarcAggregateReport, )), 332 => Some(EventType::OutgoingReport( OutgoingReportEvent::DmarcRateLimited, )), 333 => Some(EventType::OutgoingReport(OutgoingReportEvent::DmarcReport)), 334 => Some(EventType::OutgoingReport( OutgoingReportEvent::HttpSubmission, )), 335 => Some(EventType::OutgoingReport(OutgoingReportEvent::LockBusy)), 336 => Some(EventType::OutgoingReport(OutgoingReportEvent::LockDeleted)), 337 => Some(EventType::OutgoingReport(OutgoingReportEvent::Locked)), 338 => Some(EventType::OutgoingReport( OutgoingReportEvent::NoRecipientsFound, )), 339 => Some(EventType::OutgoingReport(OutgoingReportEvent::NotFound)), 340 => Some(EventType::OutgoingReport( OutgoingReportEvent::ReportingAddressValidationError, )), 341 => Some(EventType::OutgoingReport( OutgoingReportEvent::SpfRateLimited, )), 342 => Some(EventType::OutgoingReport(OutgoingReportEvent::SpfReport)), 343 => Some(EventType::OutgoingReport( OutgoingReportEvent::SubmissionError, )), 344 => Some(EventType::OutgoingReport(OutgoingReportEvent::TlsAggregate)), 345 => Some(EventType::OutgoingReport( OutgoingReportEvent::UnauthorizedReportingAddress, )), 346 => Some(EventType::Pop3(Pop3Event::Capabilities)), 347 => Some(EventType::Pop3(Pop3Event::ConnectionEnd)), 348 => Some(EventType::Pop3(Pop3Event::ConnectionStart)), 349 => Some(EventType::Pop3(Pop3Event::Delete)), 350 => Some(EventType::Pop3(Pop3Event::Error)), 351 => Some(EventType::Pop3(Pop3Event::Fetch)), 352 => Some(EventType::Pop3(Pop3Event::List)), 353 => Some(EventType::Pop3(Pop3Event::ListMessage)), 354 => Some(EventType::Pop3(Pop3Event::Noop)), 355 => Some(EventType::Pop3(Pop3Event::Quit)), 356 => Some(EventType::Pop3(Pop3Event::RawInput)), 357 => Some(EventType::Pop3(Pop3Event::RawOutput)), 358 => Some(EventType::Pop3(Pop3Event::Reset)), 359 => Some(EventType::Pop3(Pop3Event::StartTls)), 360 => Some(EventType::Pop3(Pop3Event::Stat)), 361 => Some(EventType::Pop3(Pop3Event::Uidl)), 362 => Some(EventType::Pop3(Pop3Event::UidlMessage)), 363 => Some(EventType::Pop3(Pop3Event::Utf8)), 364 => Some(EventType::Purge(PurgeEvent::AutoExpunge)), 365 => Some(EventType::Purge(PurgeEvent::Error)), 366 => Some(EventType::Purge(PurgeEvent::Finished)), 367 => Some(EventType::Purge(PurgeEvent::PurgeActive)), 368 => Some(EventType::Purge(PurgeEvent::Running)), 369 => Some(EventType::Purge(PurgeEvent::Started)), 370 => Some(EventType::Purge(PurgeEvent::TombstoneCleanup)), 371 => Some(EventType::PushSubscription(PushSubscriptionEvent::Error)), 372 => Some(EventType::PushSubscription(PushSubscriptionEvent::NotFound)), 373 => Some(EventType::PushSubscription(PushSubscriptionEvent::Success)), 374 => Some(EventType::Queue(QueueEvent::BlobNotFound)), 375 => Some(EventType::Queue(QueueEvent::ConcurrencyLimitExceeded)), 376 => Some(EventType::Queue(QueueEvent::LockBusy)), 377 => Some(EventType::Queue(QueueEvent::Locked)), 378 => Some(EventType::Queue(QueueEvent::QueueAutogenerated)), 379 => Some(EventType::Queue(QueueEvent::QueueDsn)), 380 => Some(EventType::Queue(QueueEvent::QueueMessage)), 381 => Some(EventType::Queue(QueueEvent::QueueMessageAuthenticated)), 382 => Some(EventType::Queue(QueueEvent::QueueReport)), 383 => Some(EventType::Queue(QueueEvent::QuotaExceeded)), 384 => Some(EventType::Queue(QueueEvent::RateLimitExceeded)), 385 => Some(EventType::Queue(QueueEvent::Rescheduled)), 386 => Some(EventType::Resource(ResourceEvent::BadParameters)), 387 => Some(EventType::Resource(ResourceEvent::DownloadExternal)), 388 => Some(EventType::Resource(ResourceEvent::Error)), 389 => Some(EventType::Resource(ResourceEvent::NotFound)), 390 => Some(EventType::Resource(ResourceEvent::WebadminUnpacked)), 391 => Some(EventType::Server(ServerEvent::Licensing)), 392 => Some(EventType::Server(ServerEvent::Shutdown)), 393 => Some(EventType::Server(ServerEvent::Startup)), 394 => Some(EventType::Server(ServerEvent::StartupError)), 395 => Some(EventType::Server(ServerEvent::ThreadError)), 396 => Some(EventType::Sieve(SieveEvent::ActionAccept)), 397 => Some(EventType::Sieve(SieveEvent::ActionAcceptReplace)), 398 => Some(EventType::Sieve(SieveEvent::ActionDiscard)), 399 => Some(EventType::Sieve(SieveEvent::ActionReject)), 400 => Some(EventType::Sieve(SieveEvent::ListNotFound)), 401 => Some(EventType::Sieve(SieveEvent::MessageTooLarge)), 402 => Some(EventType::Sieve(SieveEvent::NotSupported)), 403 => Some(EventType::Sieve(SieveEvent::QuotaExceeded)), 404 => Some(EventType::Sieve(SieveEvent::RuntimeError)), 405 => Some(EventType::Sieve(SieveEvent::ScriptNotFound)), 406 => Some(EventType::Sieve(SieveEvent::SendMessage)), 407 => Some(EventType::Sieve(SieveEvent::UnexpectedError)), 408 => Some(EventType::Smtp(SmtpEvent::AlreadyAuthenticated)), 409 => Some(EventType::Smtp(SmtpEvent::ArcFail)), 410 => Some(EventType::Smtp(SmtpEvent::ArcPass)), 411 => Some(EventType::Smtp(SmtpEvent::AuthExchangeTooLong)), 412 => Some(EventType::Smtp(SmtpEvent::AuthMechanismNotSupported)), 413 => Some(EventType::Smtp(SmtpEvent::AuthNotAllowed)), 414 => Some(EventType::Smtp(SmtpEvent::CommandNotImplemented)), 415 => Some(EventType::Smtp(SmtpEvent::ConcurrencyLimitExceeded)), 416 => Some(EventType::Smtp(SmtpEvent::ConnectionEnd)), 417 => Some(EventType::Smtp(SmtpEvent::ConnectionStart)), 418 => Some(EventType::Smtp(SmtpEvent::DeliverByDisabled)), 419 => Some(EventType::Smtp(SmtpEvent::DeliverByInvalid)), 420 => Some(EventType::Smtp(SmtpEvent::DidNotSayEhlo)), 421 => Some(EventType::Smtp(SmtpEvent::DkimFail)), 422 => Some(EventType::Smtp(SmtpEvent::DkimPass)), 423 => Some(EventType::Smtp(SmtpEvent::DmarcFail)), 424 => Some(EventType::Smtp(SmtpEvent::DmarcPass)), 425 => Some(EventType::Smtp(SmtpEvent::DsnDisabled)), 426 => Some(EventType::Smtp(SmtpEvent::Ehlo)), 427 => Some(EventType::Smtp(SmtpEvent::EhloExpected)), 428 => Some(EventType::Smtp(SmtpEvent::Error)), 429 => Some(EventType::Smtp(SmtpEvent::Expn)), 430 => Some(EventType::Smtp(SmtpEvent::ExpnDisabled)), 431 => Some(EventType::Smtp(SmtpEvent::ExpnNotFound)), 432 => Some(EventType::Smtp(SmtpEvent::FutureReleaseDisabled)), 433 => Some(EventType::Smtp(SmtpEvent::FutureReleaseInvalid)), 434 => Some(EventType::Smtp(SmtpEvent::Help)), 435 => Some(EventType::Smtp(SmtpEvent::InvalidCommand)), 436 => Some(EventType::Smtp(SmtpEvent::InvalidEhlo)), 437 => Some(EventType::Smtp(SmtpEvent::InvalidParameter)), 438 => Some(EventType::Smtp(SmtpEvent::InvalidRecipientAddress)), 439 => Some(EventType::Smtp(SmtpEvent::InvalidSenderAddress)), 440 => Some(EventType::Smtp(SmtpEvent::IprevFail)), 441 => Some(EventType::Smtp(SmtpEvent::IprevPass)), 442 => Some(EventType::Smtp(SmtpEvent::LhloExpected)), 443 => Some(EventType::Smtp(SmtpEvent::LoopDetected)), 444 => Some(EventType::Smtp(SmtpEvent::MailFrom)), 445 => Some(EventType::Smtp(SmtpEvent::MailFromMissing)), 446 => Some(EventType::Smtp(SmtpEvent::MailFromRewritten)), 447 => Some(EventType::Smtp(SmtpEvent::MailFromUnauthenticated)), 448 => Some(EventType::Smtp(SmtpEvent::MailFromUnauthorized)), 449 => Some(EventType::Smtp(SmtpEvent::MailboxDoesNotExist)), 450 => Some(EventType::Smtp(SmtpEvent::MessageParseFailed)), 451 => Some(EventType::Smtp(SmtpEvent::MessageTooLarge)), 452 => Some(EventType::Smtp(SmtpEvent::MissingAuthDirectory)), 453 => Some(EventType::Smtp(SmtpEvent::MissingLocalHostname)), 454 => Some(EventType::Smtp(SmtpEvent::MtPriorityDisabled)), 455 => Some(EventType::Smtp(SmtpEvent::MtPriorityInvalid)), 456 => Some(EventType::Smtp(SmtpEvent::MultipleMailFrom)), 457 => Some(EventType::Smtp(SmtpEvent::Noop)), 458 => Some(EventType::Smtp(SmtpEvent::PipeError)), 459 => Some(EventType::Smtp(SmtpEvent::PipeSuccess)), 460 => Some(EventType::Smtp(SmtpEvent::Quit)), 461 => Some(EventType::Smtp(SmtpEvent::RateLimitExceeded)), 462 => Some(EventType::Smtp(SmtpEvent::RawInput)), 463 => Some(EventType::Smtp(SmtpEvent::RawOutput)), 464 => Some(EventType::Smtp(SmtpEvent::RcptTo)), 465 => Some(EventType::Smtp(SmtpEvent::RcptToDuplicate)), 466 => Some(EventType::Smtp(SmtpEvent::RcptToMissing)), 467 => Some(EventType::Smtp(SmtpEvent::RcptToRewritten)), 468 => Some(EventType::Smtp(SmtpEvent::RelayNotAllowed)), 469 => Some(EventType::Smtp(SmtpEvent::RemoteIdNotFound)), 470 => Some(EventType::Smtp(SmtpEvent::RequestTooLarge)), 471 => Some(EventType::Smtp(SmtpEvent::RequireTlsDisabled)), 472 => Some(EventType::Smtp(SmtpEvent::Rset)), 473 => Some(EventType::Smtp(SmtpEvent::SpfEhloFail)), 474 => Some(EventType::Smtp(SmtpEvent::SpfEhloPass)), 475 => Some(EventType::Smtp(SmtpEvent::SpfFromFail)), 476 => Some(EventType::Smtp(SmtpEvent::SpfFromPass)), 477 => Some(EventType::Smtp(SmtpEvent::StartTls)), 478 => Some(EventType::Smtp(SmtpEvent::StartTlsAlready)), 479 => Some(EventType::Smtp(SmtpEvent::StartTlsUnavailable)), 480 => Some(EventType::Smtp(SmtpEvent::SyntaxError)), 481 => Some(EventType::Smtp(SmtpEvent::TimeLimitExceeded)), 482 => Some(EventType::Smtp(SmtpEvent::TooManyInvalidRcpt)), 483 => Some(EventType::Smtp(SmtpEvent::TooManyMessages)), 484 => Some(EventType::Smtp(SmtpEvent::TooManyRecipients)), 485 => Some(EventType::Smtp(SmtpEvent::TransferLimitExceeded)), 486 => Some(EventType::Smtp(SmtpEvent::UnsupportedParameter)), 487 => Some(EventType::Smtp(SmtpEvent::Vrfy)), 488 => Some(EventType::Smtp(SmtpEvent::VrfyDisabled)), 489 => Some(EventType::Smtp(SmtpEvent::VrfyNotFound)), 490 => Some(EventType::Spam(SpamEvent::Classify)), 491 => Some(EventType::Spam(SpamEvent::ClassifyError)), 492 => Some(EventType::Spam(SpamEvent::ListUpdated)), 493 => Some(EventType::Spam(SpamEvent::NotEnoughTrainingData)), 494 => Some(EventType::Spam(SpamEvent::PyzorError)), 495 => Some(EventType::Spam(SpamEvent::Train)), 496 => Some(EventType::Spam(SpamEvent::TrainBalance)), 497 => Some(EventType::Spam(SpamEvent::TrainError)), 498 => Some(EventType::Spf(SpfEvent::Fail)), 499 => Some(EventType::Spf(SpfEvent::Neutral)), 500 => Some(EventType::Spf(SpfEvent::None)), 501 => Some(EventType::Spf(SpfEvent::Pass)), 502 => Some(EventType::Spf(SpfEvent::PermError)), 503 => Some(EventType::Spf(SpfEvent::SoftFail)), 504 => Some(EventType::Spf(SpfEvent::TempError)), 505 => Some(EventType::Store(StoreEvent::AssertValueFailed)), 506 => Some(EventType::Store(StoreEvent::BlobDelete)), 507 => Some(EventType::Store(StoreEvent::BlobMissingMarker)), 508 => Some(EventType::Store(StoreEvent::BlobRead)), 509 => Some(EventType::Store(StoreEvent::BlobWrite)), 510 => Some(EventType::Store(StoreEvent::CryptoError)), 511 => Some(EventType::Store(StoreEvent::DataCorruption)), 512 => Some(EventType::Store(StoreEvent::DataIterate)), 513 => Some(EventType::Store(StoreEvent::DataWrite)), 514 => Some(EventType::Store(StoreEvent::DecompressError)), 515 => Some(EventType::Store(StoreEvent::DeserializeError)), 516 => Some(EventType::Store(StoreEvent::ElasticsearchError)), 517 => Some(EventType::Store(StoreEvent::FilesystemError)), 518 => Some(EventType::Store(StoreEvent::FoundationdbError)), 519 => Some(EventType::Store(StoreEvent::LdapBind)), 520 => Some(EventType::Store(StoreEvent::LdapError)), 521 => Some(EventType::Store(StoreEvent::LdapQuery)), 522 => Some(EventType::Store(StoreEvent::MysqlError)), 523 => Some(EventType::Store(StoreEvent::NotConfigured)), 524 => Some(EventType::Store(StoreEvent::NotFound)), 525 => Some(EventType::Store(StoreEvent::NotSupported)), 526 => Some(EventType::Store(StoreEvent::PoolError)), 527 => Some(EventType::Store(StoreEvent::PostgresqlError)), 528 => Some(EventType::Store(StoreEvent::RedisError)), 529 => Some(EventType::Store(StoreEvent::RocksdbError)), 530 => Some(EventType::Store(StoreEvent::S3Error)), 531 => Some(EventType::Store(StoreEvent::SqlQuery)), 532 => Some(EventType::Store(StoreEvent::SqliteError)), 533 => Some(EventType::Store(StoreEvent::UnexpectedError)), 534 => Some(EventType::Telemetry(TelemetryEvent::JournalError)), 535 => Some(EventType::Telemetry(TelemetryEvent::LogError)), 536 => Some(EventType::Telemetry(TelemetryEvent::OtelExporterError)), 537 => Some(EventType::Telemetry( TelemetryEvent::OtelMetricsExporterError, )), 538 => Some(EventType::Telemetry( TelemetryEvent::PrometheusExporterError, )), 539 => Some(EventType::Telemetry(TelemetryEvent::WebhookError)), 540 => Some(EventType::TlsRpt(TlsRptEvent::RecordFetch)), 541 => Some(EventType::TlsRpt(TlsRptEvent::RecordFetchError)), 542 => Some(EventType::Tls(TlsEvent::CertificateNotFound)), 543 => Some(EventType::Tls(TlsEvent::Handshake)), 544 => Some(EventType::Tls(TlsEvent::HandshakeError)), 545 => Some(EventType::Tls(TlsEvent::MultipleCertificatesAvailable)), 546 => Some(EventType::Tls(TlsEvent::NoCertificatesAvailable)), 547 => Some(EventType::Tls(TlsEvent::NotConfigured)), 548 => Some(EventType::Telemetry(TelemetryEvent::Alert)), 549 => Some(EventType::Security(SecurityEvent::AbuseBan)), 550 => Some(EventType::Security(SecurityEvent::LoiterBan)), 551 => Some(EventType::Smtp(SmtpEvent::MailFromNotAllowed)), 552 => Some(EventType::Security(SecurityEvent::Unauthorized)), 553 => Some(EventType::Limit(LimitEvent::TenantQuota)), 554 => Some(EventType::Auth(AuthEvent::TokenExpired)), 555 => Some(EventType::Auth(AuthEvent::ClientRegistration)), 556 => Some(EventType::Ai(AiEvent::LlmResponse)), 557 => Some(EventType::Ai(AiEvent::ApiError)), 558 => Some(EventType::Security(SecurityEvent::ScanBan)), 559 => Some(EventType::Store(StoreEvent::AzureError)), 560 => Some(EventType::TlsRpt(TlsRptEvent::RecordNotFound)), 561 => Some(EventType::Smtp(SmtpEvent::RcptToGreylisted)), _ => None, } } } impl Key { fn code(&self) -> u64 { match self { Key::AccountName => 0, Key::AccountId => 1, Key::BlobId => 2, Key::CausedBy => 3, Key::ChangeId => 4, Key::Code => 5, Key::Collection => 6, Key::Contents => 7, Key::Details => 8, Key::DkimFail => 9, Key::DkimNone => 10, Key::DkimPass => 11, Key::DmarcNone => 12, Key::DmarcPass => 13, Key::DmarcQuarantine => 14, Key::DmarcReject => 15, Key::DocumentId => 16, Key::Domain => 17, Key::Due => 18, Key::Elapsed => 19, Key::Expires => 20, Key::From => 21, Key::Hostname => 22, Key::Id => 23, Key::Key => 24, Key::Limit => 25, Key::ListenerId => 26, Key::LocalIp => 27, Key::LocalPort => 28, Key::MailboxName => 29, Key::MailboxId => 30, Key::MessageId => 31, Key::NextDsn => 32, Key::NextRetry => 33, Key::Path => 34, Key::Policy => 35, Key::QueueId => 36, Key::RangeFrom => 37, Key::RangeTo => 38, Key::Reason => 39, Key::RemoteIp => 40, Key::RemotePort => 41, Key::ReportId => 42, Key::Result => 43, Key::Size => 44, Key::Source => 45, Key::SpanId => 46, Key::SpfFail => 47, Key::SpfNone => 48, Key::SpfPass => 49, Key::Strict => 50, Key::Tls => 51, Key::To => 52, Key::Total => 53, Key::TotalFailures => 54, Key::TotalSuccesses => 55, Key::Type => 56, Key::Uid => 57, Key::UidNext => 58, Key::UidValidity => 59, Key::Url => 60, Key::ValidFrom => 61, Key::ValidTo => 62, Key::Value => 63, Key::Version => 64, } } fn from_code(code: u64) -> Option { match code { 0 => Some(Key::AccountName), 1 => Some(Key::AccountId), 2 => Some(Key::BlobId), 3 => Some(Key::CausedBy), 4 => Some(Key::ChangeId), 5 => Some(Key::Code), 6 => Some(Key::Collection), 7 => Some(Key::Contents), 8 => Some(Key::Details), 9 => Some(Key::DkimFail), 10 => Some(Key::DkimNone), 11 => Some(Key::DkimPass), 12 => Some(Key::DmarcNone), 13 => Some(Key::DmarcPass), 14 => Some(Key::DmarcQuarantine), 15 => Some(Key::DmarcReject), 16 => Some(Key::DocumentId), 17 => Some(Key::Domain), 18 => Some(Key::Due), 19 => Some(Key::Elapsed), 20 => Some(Key::Expires), 21 => Some(Key::From), 22 => Some(Key::Hostname), 23 => Some(Key::Id), 24 => Some(Key::Key), 25 => Some(Key::Limit), 26 => Some(Key::ListenerId), 27 => Some(Key::LocalIp), 28 => Some(Key::LocalPort), 29 => Some(Key::MailboxName), 30 => Some(Key::MailboxId), 31 => Some(Key::MessageId), 32 => Some(Key::NextDsn), 33 => Some(Key::NextRetry), 34 => Some(Key::Path), 35 => Some(Key::Policy), 36 => Some(Key::QueueId), 37 => Some(Key::RangeFrom), 38 => Some(Key::RangeTo), 39 => Some(Key::Reason), 40 => Some(Key::RemoteIp), 41 => Some(Key::RemotePort), 42 => Some(Key::ReportId), 43 => Some(Key::Result), 44 => Some(Key::Size), 45 => Some(Key::Source), 46 => Some(Key::SpanId), 47 => Some(Key::SpfFail), 48 => Some(Key::SpfNone), 49 => Some(Key::SpfPass), 50 => Some(Key::Strict), 51 => Some(Key::Tls), 52 => Some(Key::To), 53 => Some(Key::Total), 54 => Some(Key::TotalFailures), 55 => Some(Key::TotalSuccesses), 56 => Some(Key::Type), 57 => Some(Key::Uid), 58 => Some(Key::UidNext), 59 => Some(Key::UidValidity), 60 => Some(Key::Url), 61 => Some(Key::ValidFrom), 62 => Some(Key::ValidTo), 63 => Some(Key::Value), 64 => Some(Key::Version), _ => None, } } }