peeringdb_rs/data/
net.rs

1use crate::data::utils::get_reader;
2use anyhow::Result;
3use chrono::{DateTime, Utc};
4use serde::{Deserialize, Serialize};
5use serde_json::Value;
6
7#[derive(Debug, Serialize, Deserialize)]
8pub struct PeeringdbNet {
9    pub id: u32,
10    pub name: Option<String>,
11    pub name_long: Option<String>,
12    pub aka: Option<String>,
13    pub asn: Option<u32>,
14    pub org_id: Option<u32>,
15    pub irr_as_set: Option<String>,
16    pub website: Option<String>,
17    pub notes: Option<String>,
18    pub fac_count: Option<usize>,
19    pub ix_count: Option<u32>,
20
21    pub policy_contracts: Option<String>,
22    pub policy_general: Option<String>,
23    pub policy_locations: Option<String>,
24    pub policy_ratio: Option<bool>,
25    pub policy_url: Option<String>,
26
27    pub info_ipv6: Option<bool>,
28    pub info_multicast: Option<bool>,
29    pub info_never_via_route_servers: Option<bool>,
30    pub info_prefixes4: Option<u32>,
31    pub info_prefixes6: Option<u32>,
32    pub info_ratio: Option<String>,
33    pub info_scope: Option<String>,
34    pub info_traffic: Option<String>,
35    pub info_type: Option<String>,
36    pub info_types: Option<Vec<String>>,
37    pub info_unicast: Option<bool>,
38
39    pub rir_status: Option<String>,
40    pub status: Option<String>,
41    pub status_dashboard: Option<String>,
42    pub created: Option<String>,
43    pub updated: Option<String>,
44    pub netfac_updated: Option<DateTime<Utc>>,
45    pub netixlan_updated: Option<DateTime<Utc>>,
46    pub rir_status_updated: Option<DateTime<Utc>>,
47    pub poc_updated: Option<String>,
48    pub route_server: Option<String>,
49    pub social_media: Option<Vec<Value>>,
50    pub looking_glass: Option<String>,
51}
52
53#[derive(Debug, Serialize, Deserialize)]
54struct PeeringdbNetResponse {
55    data: Vec<PeeringdbNet>,
56}
57
58pub fn load_peeringdb_net() -> Result<Vec<PeeringdbNet>> {
59    let mut reader = get_reader("https://www.peeringdb.com/api/net")?;
60    let mut buf = String::new();
61    reader.read_to_string(&mut buf)?;
62    let res: PeeringdbNetResponse = serde_json::from_str(&buf)?;
63    Ok(res.data)
64}
65
66#[cfg(test)]
67mod tests {
68    use super::*;
69
70    #[test]
71    fn test_loading_data() {
72        let data = load_peeringdb_net();
73        assert!(data.is_ok());
74    }
75}