Skip to main content

ripestat_common/
lib.rs

1use serde::{Deserialize, Serialize};
2
3pub mod resources;
4
5#[doc(inline)]
6pub use crate::resources::*;
7
8/// RipeStatDataType
9#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
10#[serde(rename_all = "kebab-case")]
11pub enum RipeStatDataType {
12    AbuseContactFinder,
13    AddressSpaceHierarchy,
14    AddressSpaceUsage,
15    AllocationHistory,
16    AnnouncedPrefixes,
17    AsOverview,
18    AsPathLength,
19    AsRoutingConsistency,
20    AsnNeighbours,
21    AsnNeighboursHistory,
22    AtlasProbeDeployment,
23    AtlasProbes,
24    AtlasTargets,
25    BgpState,
26    BgpUpdateActivity,
27    BgpUpdates,
28    Bgplay,
29    CountryAsns,
30    CountryResourceList,
31    CountryResourceStats,
32    DnsChain,
33    HistoricalWhois,
34    IanaRegistryInfo,
35    LookingGlass,
36    MaxmindGeoLite,
37    MaxmindGeoLiteAnnouncedByAs,
38    MeternetBandwidthMeasurements,
39    MlabActivityCount,
40    MlabBandwidth,
41    MlabClients,
42    NetworkInfo,
43    PrefixCount,
44    PrefixOverview,
45    PrefixRoutingConsistency,
46    PrefixSizeDistribution,
47    RelatedPrefixes,
48    ReverseDns,
49    ReverseDnsConsistency,
50    ReverseDnsIp,
51    Rir,
52    RirGeo,
53    RirPrefixSizeDistribution,
54    RirStatsCountry,
55    RisAsns,
56    RisFirstLastSeen,
57    RisFullTableThreshold,
58    RisPeerCount,
59    RisPeerings,
60    RisPeers,
61    RisPrefixes,
62    RoutingHistory,
63    RoutingStatus,
64    RpkiHistory,
65    RpkiValidationStatus,
66    Searchcomplete,
67    SpeedcheckerBandwidthMeasurements,
68    Visibility,
69    Whois,
70    WhoisObjectLastUpdated,
71}
72
73/// RipeStatDataType Url
74impl RipeStatDataType {
75    pub fn url(&self) -> String {
76        let api_name: &str = match self {
77            Self::AbuseContactFinder => "abuse-contact-finder",
78            Self::AddressSpaceHierarchy => "address-space-hierarchy",
79            Self::AddressSpaceUsage => "address-space-usage",
80            Self::AllocationHistory => "allocation-history",
81            Self::AnnouncedPrefixes => "announced-prefixes",
82            Self::AsOverview => "as-overview",
83            Self::AsPathLength => "as-path-length",
84            Self::AsRoutingConsistency => "as-routing-consistency",
85            Self::AsnNeighbours => "asn-neighbours",
86            Self::AsnNeighboursHistory => "asn-neighbours-history",
87            Self::AtlasProbeDeployment => "atlas-probe-deployment",
88            Self::AtlasProbes => "atlas-probes",
89            Self::AtlasTargets => "atlas-targets",
90            Self::BgpState => "bgp-state",
91            Self::BgpUpdateActivity => "bgp-update-activity",
92            Self::BgpUpdates => "bgp-updates",
93            Self::Bgplay => "bgplay",
94            Self::CountryAsns => "country-asns",
95            Self::CountryResourceList => "country-resource-list",
96            Self::CountryResourceStats => "country-resource-stats",
97            Self::DnsChain => "dns-chain",
98            Self::HistoricalWhois => "historical-whois",
99            Self::IanaRegistryInfo => "iana-registry-info",
100            Self::LookingGlass => "looking-glass",
101            Self::MaxmindGeoLite => "maxmind-geo-lite",
102            Self::MaxmindGeoLiteAnnouncedByAs => "maxmind-geo-lite-announced-by-as",
103            Self::MeternetBandwidthMeasurements => "meternet-bandwidth-measurements",
104            Self::MlabActivityCount => "mlab-activity-count",
105            Self::MlabBandwidth => "mlab-bandwidth",
106            Self::MlabClients => "mlab-clients",
107            Self::NetworkInfo => "network-info",
108            Self::PrefixCount => "prefix-count",
109            Self::PrefixOverview => "prefix-overview",
110            Self::PrefixRoutingConsistency => "prefix-routing-consistency",
111            Self::PrefixSizeDistribution => "prefix-size-distribution",
112            Self::RelatedPrefixes => "related-prefixes",
113            Self::ReverseDns => "reverse-dns",
114            Self::ReverseDnsConsistency => "reverse-dns-consistency",
115            Self::ReverseDnsIp => "reverse-dns-ip",
116            Self::Rir => "rir",
117            Self::RirGeo => "rir-geo",
118            Self::RirPrefixSizeDistribution => "rir-prefix-size-distribution",
119            Self::RirStatsCountry => "rir-stats-country",
120            Self::RisAsns => "ris-asns",
121            Self::RisFirstLastSeen => "ris-first-last-seen",
122            Self::RisFullTableThreshold => "ris-full-table-threshold",
123            Self::RisPeerCount => "ris-peer-count",
124            Self::RisPeerings => "ris-peerings",
125            Self::RisPeers => "ris-peers",
126            Self::RisPrefixes => "ris-prefixes",
127            Self::RoutingHistory => "routing-history",
128            Self::RoutingStatus => "routing-status",
129            Self::RpkiHistory => "rpki-history",
130            Self::RpkiValidationStatus => "rpki-validation-status",
131            Self::Searchcomplete => "searchcomplete",
132            Self::SpeedcheckerBandwidthMeasurements => "speedchecker-bandwidth-measurements",
133            Self::Visibility => "visibility",
134            Self::Whois => "whois",
135            Self::WhoisObjectLastUpdated => "whois-object-last-updated",
136        };
137        format!("https://stat.ripe.net/data/{}/data.json", api_name)
138    }
139}
140
141/// RipeStatRequest
142#[derive(Debug, Serialize, Deserialize, Clone)]
143pub enum RipeStatRequest {
144    AbuseContactFinderRequest(AbuseContactFinderRequest),
145    AddressSpaceHierarchyRequest(AddressSpaceHierarchyRequest),
146    AddressSpaceUsageRequest(AddressSpaceUsageRequest),
147    AllocationHistoryRequest(AllocationHistoryRequest),
148    AnnouncedPrefixesRequest(AnnouncedPrefixesRequest),
149    AsOverviewRequest(AsOverviewRequest),
150    AsPathLengthRequest(AsPathLengthRequest),
151    AsRoutingConsistencyRequest(AsRoutingConsistencyRequest),
152    AsnNeighboursRequest(AsnNeighboursRequest),
153    AsnNeighboursHistoryRequest(AsnNeighboursHistoryRequest),
154    AtlasProbeDeploymentRequest(AtlasProbeDeploymentRequest),
155    AtlasProbesRequest(AtlasProbesRequest),
156    AtlasTargetsRequest(AtlasTargetsRequest),
157    BgpStateRequest(BgpStateRequest),
158    BgpUpdateActivityRequest(BgpUpdateActivityRequest),
159    BgpUpdatesRequest(BgpUpdatesRequest),
160    BgplayRequest(BgplayRequest),
161    CountryAsnsRequest(CountryAsnsRequest),
162    CountryResourceListRequest(CountryResourceListRequest),
163    CountryResourceStatsRequest(CountryResourceStatsRequest),
164    DnsChainRequest(DnsChainRequest),
165    HistoricalWhoisRequest(HistoricalWhoisRequest),
166    IanaRegistryInfoRequest(IanaRegistryInfoRequest),
167    LookingGlassRequest(LookingGlassRequest),
168    MaxmindGeoLiteRequest(MaxmindGeoLiteRequest),
169    MeternetBandwidthMeasurementsRequest(MeternetBandwidthMeasurementsRequest),
170    MlabActivityCountRequest(MlabActivityCountRequest),
171    MlabBandwidthRequest(MlabBandwidthRequest),
172    MlabClientsRequest(MlabClientsRequest),
173    NetworkInfoRequest(NetworkInfoRequest),
174    PrefixCountRequest(PrefixCountRequest),
175    PrefixOverviewRequest(PrefixOverviewRequest),
176    PrefixRoutingConsistencyRequest(PrefixRoutingConsistencyRequest),
177    PrefixSizeDistributionRequest(PrefixSizeDistributionRequest),
178    RelatedPrefixesRequest(RelatedPrefixesRequest),
179    ReverseDnsRequest(ReverseDnsRequest),
180    ReverseDnsConsistencyRequest(ReverseDnsConsistencyRequest),
181    ReverseDnsIpRequest(ReverseDnsIpRequest),
182    RirRequest(RirRequest),
183    RirGeoRequest(RirGeoRequest),
184    RirPrefixSizeDistributionRequest(RirPrefixSizeDistributionRequest),
185    RirStatsCountryRequest(RirStatsCountryRequest),
186    RisAsnsRequest(RisAsnsRequest),
187    RisFirstLastSeenRequest(RisFirstLastSeenRequest),
188    RisFullTableThresholdRequest(RisFullTableThresholdRequest),
189    RisPeerCountRequest(RisPeerCountRequest),
190    RisPeeringsRequest(RisPeeringsRequest),
191    RisPeersRequest(RisPeersRequest),
192    RisPrefixesRequest(RisPrefixesRequest),
193    RoutingHistoryRequest(RoutingHistoryRequest),
194    RoutingStatusRequest(RoutingStatusRequest),
195    RpkiHistoryRequest(RpkiHistoryRequest),
196    RpkiValidationStatusRequest(RpkiValidationStatusRequest),
197    SearchcompleteRequest(SearchcompleteRequest),
198    SpeedcheckerBandwidthMeasurementsRequest(SpeedcheckerBandwidthMeasurementsRequest),
199    VisibilityRequest(VisibilityRequest),
200    WhoisRequest(WhoisRequest),
201    WhoisObjectLastUpdatedRequest(WhoisObjectLastUpdatedRequest),
202}
203
204/// RipeStatResponse
205#[derive(Clone, Debug, PartialEq, Serialize)]
206pub struct RipeStatResponse {
207    pub messages: Vec<Vec<String>>,
208    pub see_also: Vec<Vec<String>>,
209
210    pub build_version: String,
211    pub cached: bool,
212    pub data_call_name: RipeStatDataType,
213    pub data_call_status: String,
214    pub process_time: i64,
215    pub query_id: String,
216    pub server_id: String,
217    pub status: String,
218    pub status_code: i64,
219    pub time: String,
220    pub version: String,
221
222    pub data: RipeStatResponseData,
223}
224
225impl<'de> Deserialize<'de> for RipeStatResponse {
226    fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
227    where
228        D: serde::Deserializer<'de>,
229    {
230        #[derive(Deserialize)]
231        pub struct RipeStatResponseInner {
232            pub messages: Vec<Vec<String>>,
233            pub see_also: Vec<Vec<String>>,
234            pub build_version: String,
235            pub cached: bool,
236            pub data_call_name: RipeStatDataType,
237            pub data_call_status: String,
238            pub process_time: i64,
239            pub query_id: String,
240            pub server_id: String,
241            pub status: String,
242            pub status_code: i64,
243            pub time: String,
244            pub version: String,
245            pub data: serde_json::Value,
246        }
247
248        let data = RipeStatResponseInner::deserialize(deserializer)?;
249
250        let payload: RipeStatResponseData = match data.data_call_name {
251            RipeStatDataType::AbuseContactFinder => RipeStatResponseData::AbuseContactFinderResponse(
252                AbuseContactFinderResponse::deserialize(data.data).map_err(serde::de::Error::custom)?,
253            ),
254            RipeStatDataType::AddressSpaceHierarchy => RipeStatResponseData::AddressSpaceHierarchyResponse(
255                AddressSpaceHierarchyResponse::deserialize(data.data).map_err(serde::de::Error::custom)?,
256            ),
257            RipeStatDataType::AddressSpaceUsage => RipeStatResponseData::AddressSpaceUsageResponse(
258                AddressSpaceUsageResponse::deserialize(data.data).map_err(serde::de::Error::custom)?,
259            ),
260            RipeStatDataType::AllocationHistory => RipeStatResponseData::AllocationHistoryResponse(
261                AllocationHistoryResponse::deserialize(data.data).map_err(serde::de::Error::custom)?,
262            ),
263            RipeStatDataType::AnnouncedPrefixes => RipeStatResponseData::AnnouncedPrefixesResponse(
264                AnnouncedPrefixesResponse::deserialize(data.data).map_err(serde::de::Error::custom)?,
265            ),
266            RipeStatDataType::AsOverview => RipeStatResponseData::AsOverviewResponse(
267                AsOverviewResponse::deserialize(data.data).map_err(serde::de::Error::custom)?,
268            ),
269            RipeStatDataType::AsPathLength => RipeStatResponseData::AsPathLengthResponse(
270                AsPathLengthResponse::deserialize(data.data).map_err(serde::de::Error::custom)?,
271            ),
272            RipeStatDataType::AsRoutingConsistency => RipeStatResponseData::AsRoutingConsistencyResponse(
273                AsRoutingConsistencyResponse::deserialize(data.data).map_err(serde::de::Error::custom)?,
274            ),
275            RipeStatDataType::AsnNeighbours => RipeStatResponseData::AsnNeighboursResponse(
276                AsnNeighboursResponse::deserialize(data.data).map_err(serde::de::Error::custom)?,
277            ),
278            RipeStatDataType::AsnNeighboursHistory => RipeStatResponseData::AsnNeighboursHistoryResponse(
279                AsnNeighboursHistoryResponse::deserialize(data.data).map_err(serde::de::Error::custom)?,
280            ),
281            RipeStatDataType::AtlasProbeDeployment => RipeStatResponseData::AtlasProbeDeploymentResponse(
282                AtlasProbeDeploymentResponse::deserialize(data.data).map_err(serde::de::Error::custom)?,
283            ),
284            RipeStatDataType::AtlasProbes => RipeStatResponseData::AtlasProbesResponse(
285                AtlasProbesResponse::deserialize(data.data).map_err(serde::de::Error::custom)?,
286            ),
287            RipeStatDataType::AtlasTargets => RipeStatResponseData::AtlasTargetsResponse(
288                AtlasTargetsResponse::deserialize(data.data).map_err(serde::de::Error::custom)?,
289            ),
290            RipeStatDataType::BgpState => RipeStatResponseData::BgpStateResponse(
291                BgpStateResponse::deserialize(data.data).map_err(serde::de::Error::custom)?,
292            ),
293            RipeStatDataType::BgpUpdateActivity => RipeStatResponseData::BgpUpdateActivityResponse(
294                BgpUpdateActivityResponse::deserialize(data.data).map_err(serde::de::Error::custom)?,
295            ),
296            RipeStatDataType::BgpUpdates => RipeStatResponseData::BgpUpdatesResponse(
297                BgpUpdatesResponse::deserialize(data.data).map_err(serde::de::Error::custom)?,
298            ),
299            RipeStatDataType::Bgplay => RipeStatResponseData::BgplayResponse(
300                BgplayResponse::deserialize(data.data).map_err(serde::de::Error::custom)?,
301            ),
302            RipeStatDataType::CountryAsns => RipeStatResponseData::CountryAsnsResponse(
303                CountryAsnsResponse::deserialize(data.data).map_err(serde::de::Error::custom)?,
304            ),
305            RipeStatDataType::CountryResourceList => RipeStatResponseData::CountryResourceListResponse(
306                CountryResourceListResponse::deserialize(data.data).map_err(serde::de::Error::custom)?,
307            ),
308            RipeStatDataType::CountryResourceStats => RipeStatResponseData::CountryResourceStatsResponse(
309                CountryResourceStatsResponse::deserialize(data.data).map_err(serde::de::Error::custom)?,
310            ),
311            RipeStatDataType::DnsChain => RipeStatResponseData::DnsChainResponse(
312                DnsChainResponse::deserialize(data.data).map_err(serde::de::Error::custom)?,
313            ),
314            RipeStatDataType::HistoricalWhois => RipeStatResponseData::HistoricalWhoisResponse(
315                HistoricalWhoisResponse::deserialize(data.data).map_err(serde::de::Error::custom)?,
316            ),
317            RipeStatDataType::IanaRegistryInfo => RipeStatResponseData::IanaRegistryInfoResponse(
318                IanaRegistryInfoResponse::deserialize(data.data).map_err(serde::de::Error::custom)?,
319            ),
320            RipeStatDataType::LookingGlass => RipeStatResponseData::LookingGlassResponse(
321                LookingGlassResponse::deserialize(data.data).map_err(serde::de::Error::custom)?,
322            ),
323            RipeStatDataType::MaxmindGeoLite => RipeStatResponseData::MaxmindGeoLiteResponse(
324                MaxmindGeoLiteResponse::deserialize(data.data).map_err(serde::de::Error::custom)?,
325            ),
326            RipeStatDataType::MaxmindGeoLiteAnnouncedByAs => RipeStatResponseData::MaxmindGeoLiteResponse(
327                MaxmindGeoLiteResponse::deserialize(data.data).map_err(serde::de::Error::custom)?,
328            ),
329            RipeStatDataType::MeternetBandwidthMeasurements => RipeStatResponseData::MeternetBandwidthMeasurementsResponse(
330                MeternetBandwidthMeasurementsResponse::deserialize(data.data).map_err(serde::de::Error::custom)?,
331            ),
332            RipeStatDataType::MlabActivityCount => RipeStatResponseData::MlabActivityCountResponse(
333                MlabActivityCountResponse::deserialize(data.data).map_err(serde::de::Error::custom)?,
334            ),
335            RipeStatDataType::MlabBandwidth => RipeStatResponseData::MlabBandwidthResponse(
336                MlabBandwidthResponse::deserialize(data.data).map_err(serde::de::Error::custom)?,
337            ),
338            RipeStatDataType::MlabClients => RipeStatResponseData::MlabClientsResponse(
339                MlabClientsResponse::deserialize(data.data).map_err(serde::de::Error::custom)?,
340            ),
341            RipeStatDataType::NetworkInfo => RipeStatResponseData::NetworkInfoResponse(
342                NetworkInfoResponse::deserialize(data.data).map_err(serde::de::Error::custom)?,
343            ),
344            RipeStatDataType::PrefixCount => RipeStatResponseData::PrefixCountResponse(
345                PrefixCountResponse::deserialize(data.data).map_err(serde::de::Error::custom)?,
346            ),
347            RipeStatDataType::PrefixOverview => RipeStatResponseData::PrefixOverviewResponse(
348                PrefixOverviewResponse::deserialize(data.data).map_err(serde::de::Error::custom)?,
349            ),
350            RipeStatDataType::PrefixRoutingConsistency => RipeStatResponseData::PrefixRoutingConsistencyResponse(
351                PrefixRoutingConsistencyResponse::deserialize(data.data).map_err(serde::de::Error::custom)?,
352            ),
353            RipeStatDataType::PrefixSizeDistribution => RipeStatResponseData::PrefixSizeDistributionResponse(
354                PrefixSizeDistributionResponse::deserialize(data.data).map_err(serde::de::Error::custom)?,
355            ),
356            RipeStatDataType::RelatedPrefixes => RipeStatResponseData::RelatedPrefixesResponse(
357                RelatedPrefixesResponse::deserialize(data.data).map_err(serde::de::Error::custom)?,
358            ),
359            RipeStatDataType::ReverseDns => RipeStatResponseData::ReverseDnsResponse(
360                ReverseDnsResponse::deserialize(data.data).map_err(serde::de::Error::custom)?,
361            ),
362            RipeStatDataType::ReverseDnsConsistency => RipeStatResponseData::ReverseDnsConsistencyResponse(
363                ReverseDnsConsistencyResponse::deserialize(data.data).map_err(serde::de::Error::custom)?,
364            ),
365            RipeStatDataType::ReverseDnsIp => RipeStatResponseData::ReverseDnsIpResponse(
366                ReverseDnsIpResponse::deserialize(data.data).map_err(serde::de::Error::custom)?,
367            ),
368            RipeStatDataType::Rir => RipeStatResponseData::RirResponse(
369                RirResponse::deserialize(data.data).map_err(serde::de::Error::custom)?,
370            ),
371            RipeStatDataType::RirGeo => RipeStatResponseData::RirGeoResponse(
372                RirGeoResponse::deserialize(data.data).map_err(serde::de::Error::custom)?,
373            ),
374            RipeStatDataType::RirPrefixSizeDistribution => RipeStatResponseData::RirPrefixSizeDistributionResponse(
375                RirPrefixSizeDistributionResponse::deserialize(data.data).map_err(serde::de::Error::custom)?,
376            ),
377            RipeStatDataType::RirStatsCountry => RipeStatResponseData::RirStatsCountryResponse(
378                RirStatsCountryResponse::deserialize(data.data).map_err(serde::de::Error::custom)?,
379            ),
380            RipeStatDataType::RisAsns => RipeStatResponseData::RisAsnsResponse(
381                RisAsnsResponse::deserialize(data.data).map_err(serde::de::Error::custom)?,
382            ),
383            RipeStatDataType::RisFirstLastSeen => RipeStatResponseData::RisFirstLastSeenResponse(
384                RisFirstLastSeenResponse::deserialize(data.data).map_err(serde::de::Error::custom)?,
385            ),
386            RipeStatDataType::RisFullTableThreshold => RipeStatResponseData::RisFullTableThresholdResponse(
387                RisFullTableThresholdResponse::deserialize(data.data).map_err(serde::de::Error::custom)?,
388            ),
389            RipeStatDataType::RisPeerCount => RipeStatResponseData::RisPeerCountResponse(
390                RisPeerCountResponse::deserialize(data.data).map_err(serde::de::Error::custom)?,
391            ),
392            RipeStatDataType::RisPeerings => RipeStatResponseData::RisPeeringsResponse(
393                RisPeeringsResponse::deserialize(data.data).map_err(serde::de::Error::custom)?,
394            ),
395            RipeStatDataType::RisPeers => RipeStatResponseData::RisPeersResponse(
396                RisPeersResponse::deserialize(data.data).map_err(serde::de::Error::custom)?,
397            ),
398            RipeStatDataType::RisPrefixes => RipeStatResponseData::RisPrefixesResponse(
399                RisPrefixesResponse::deserialize(data.data).map_err(serde::de::Error::custom)?,
400            ),
401            RipeStatDataType::RoutingHistory => RipeStatResponseData::RoutingHistoryResponse(
402                RoutingHistoryResponse::deserialize(data.data).map_err(serde::de::Error::custom)?,
403            ),
404            RipeStatDataType::RoutingStatus => RipeStatResponseData::RoutingStatusResponse(
405                RoutingStatusResponse::deserialize(data.data).map_err(serde::de::Error::custom)?,
406            ),
407            RipeStatDataType::RpkiHistory => RipeStatResponseData::RpkiHistoryResponse(
408                RpkiHistoryResponse::deserialize(data.data).map_err(serde::de::Error::custom)?,
409            ),
410            RipeStatDataType::RpkiValidationStatus => RipeStatResponseData::RpkiValidationStatusResponse(
411                RpkiValidationStatusResponse::deserialize(data.data).map_err(serde::de::Error::custom)?,
412            ),
413            RipeStatDataType::Searchcomplete => RipeStatResponseData::SearchcompleteResponse(
414                SearchcompleteResponse::deserialize(data.data).map_err(serde::de::Error::custom)?,
415            ),
416            RipeStatDataType::SpeedcheckerBandwidthMeasurements => RipeStatResponseData::SpeedcheckerBandwidthMeasurementsResponse(
417                SpeedcheckerBandwidthMeasurementsResponse::deserialize(data.data).map_err(serde::de::Error::custom)?,
418            ),
419            RipeStatDataType::Visibility => RipeStatResponseData::VisibilityResponse(
420                VisibilityResponse::deserialize(data.data).map_err(serde::de::Error::custom)?,
421            ),
422            RipeStatDataType::Whois => RipeStatResponseData::WhoisResponse(
423                WhoisResponse::deserialize(data.data).map_err(serde::de::Error::custom)?,
424            ),
425            RipeStatDataType::WhoisObjectLastUpdated => RipeStatResponseData::WhoisObjectLastUpdatedResponse(
426                WhoisObjectLastUpdatedResponse::deserialize(data.data).map_err(serde::de::Error::custom)?,
427            ),
428        };
429
430        Ok(RipeStatResponse {
431            messages: data.messages,
432            see_also: data.see_also,
433            build_version: data.build_version,
434            cached: data.cached,
435            data_call_name: data.data_call_name,
436            data_call_status: data.data_call_status,
437            process_time: data.process_time,
438            query_id: data.query_id,
439            server_id: data.server_id,
440            status: data.status,
441            status_code: data.status_code,
442            time: data.time,
443            version: data.version,
444            data: payload,
445        })
446    }
447}
448
449#[derive(Clone, Debug, PartialEq, Serialize)]
450pub enum RipeStatResponseData {
451    AbuseContactFinderResponse(AbuseContactFinderResponse),
452    AddressSpaceHierarchyResponse(AddressSpaceHierarchyResponse),
453    AddressSpaceUsageResponse(AddressSpaceUsageResponse),
454    AllocationHistoryResponse(AllocationHistoryResponse),
455    AnnouncedPrefixesResponse(AnnouncedPrefixesResponse),
456    AsOverviewResponse(AsOverviewResponse),
457    AsPathLengthResponse(AsPathLengthResponse),
458    AsRoutingConsistencyResponse(AsRoutingConsistencyResponse),
459    AsnNeighboursResponse(AsnNeighboursResponse),
460    AsnNeighboursHistoryResponse(AsnNeighboursHistoryResponse),
461    AtlasProbeDeploymentResponse(AtlasProbeDeploymentResponse),
462    AtlasProbesResponse(AtlasProbesResponse),
463    AtlasTargetsResponse(AtlasTargetsResponse),
464    BgpStateResponse(BgpStateResponse),
465    BgpUpdateActivityResponse(BgpUpdateActivityResponse),
466    BgpUpdatesResponse(BgpUpdatesResponse),
467    BgplayResponse(BgplayResponse),
468    CountryAsnsResponse(CountryAsnsResponse),
469    CountryResourceListResponse(CountryResourceListResponse),
470    CountryResourceStatsResponse(CountryResourceStatsResponse),
471    DnsChainResponse(DnsChainResponse),
472    HistoricalWhoisResponse(HistoricalWhoisResponse),
473    IanaRegistryInfoResponse(IanaRegistryInfoResponse),
474    LookingGlassResponse(LookingGlassResponse),
475    MaxmindGeoLiteResponse(MaxmindGeoLiteResponse),
476    MeternetBandwidthMeasurementsResponse(MeternetBandwidthMeasurementsResponse),
477    MlabActivityCountResponse(MlabActivityCountResponse),
478    MlabBandwidthResponse(MlabBandwidthResponse),
479    MlabClientsResponse(MlabClientsResponse),
480    NetworkInfoResponse(NetworkInfoResponse),
481    PrefixCountResponse(PrefixCountResponse),
482    PrefixOverviewResponse(PrefixOverviewResponse),
483    PrefixRoutingConsistencyResponse(PrefixRoutingConsistencyResponse),
484    PrefixSizeDistributionResponse(PrefixSizeDistributionResponse),
485    RelatedPrefixesResponse(RelatedPrefixesResponse),
486    ReverseDnsResponse(ReverseDnsResponse),
487    ReverseDnsConsistencyResponse(ReverseDnsConsistencyResponse),
488    ReverseDnsIpResponse(ReverseDnsIpResponse),
489    RirResponse(RirResponse),
490    RirGeoResponse(RirGeoResponse),
491    RirPrefixSizeDistributionResponse(RirPrefixSizeDistributionResponse),
492    RirStatsCountryResponse(RirStatsCountryResponse),
493    RisAsnsResponse(RisAsnsResponse),
494    RisFirstLastSeenResponse(RisFirstLastSeenResponse),
495    RisFullTableThresholdResponse(RisFullTableThresholdResponse),
496    RisPeerCountResponse(RisPeerCountResponse),
497    RisPeeringsResponse(RisPeeringsResponse),
498    RisPeersResponse(RisPeersResponse),
499    RisPrefixesResponse(RisPrefixesResponse),
500    RoutingHistoryResponse(RoutingHistoryResponse),
501    RoutingStatusResponse(RoutingStatusResponse),
502    RpkiHistoryResponse(RpkiHistoryResponse),
503    RpkiValidationStatusResponse(RpkiValidationStatusResponse),
504    SearchcompleteResponse(SearchcompleteResponse),
505    SpeedcheckerBandwidthMeasurementsResponse(SpeedcheckerBandwidthMeasurementsResponse),
506    VisibilityResponse(VisibilityResponse),
507    WhoisResponse(WhoisResponse),
508    WhoisObjectLastUpdatedResponse(WhoisObjectLastUpdatedResponse),
509}
510
511/// Version of this software.
512pub const VERSION: &str = env!("CARGO_PKG_VERSION");