Skip to content

Commit 5a07265

Browse files
authored
Merge pull request #68 from ipinfo/silvano/eng-507-add-plus-bundle-support-in-ipinforust-library
Add support for Plus bundle
2 parents ce6fa75 + d08d6b7 commit 5a07265

File tree

3 files changed

+551
-0
lines changed

3 files changed

+551
-0
lines changed

src/api.rs

Lines changed: 131 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -326,3 +326,134 @@ pub struct IpDetailsCore {
326326
#[serde(flatten)]
327327
pub extra: HashMap<String, Value>,
328328
}
329+
330+
/// Plus API Geo details (extends Core).
331+
#[derive(Debug, Default, Deserialize, Serialize, Clone)]
332+
pub struct PlusGeo {
333+
pub city: Option<String>,
334+
pub region: Option<String>,
335+
pub region_code: Option<String>,
336+
pub country: Option<String>,
337+
pub country_code: Option<String>,
338+
pub continent: Option<String>,
339+
pub continent_code: Option<String>,
340+
pub latitude: f64,
341+
pub longitude: f64,
342+
pub timezone: Option<String>,
343+
pub postal_code: Option<String>,
344+
pub dma_code: Option<String>,
345+
pub geoname_id: Option<String>,
346+
pub radius: Option<i32>,
347+
pub last_changed: Option<String>,
348+
349+
/// Enriched fields
350+
#[serde(skip_deserializing)]
351+
pub country_name: Option<String>,
352+
#[serde(skip_deserializing)]
353+
pub is_eu: Option<bool>,
354+
#[serde(skip_deserializing)]
355+
pub country_flag: Option<CountryFlag>,
356+
#[serde(skip_deserializing)]
357+
pub country_flag_url: Option<String>,
358+
#[serde(skip_deserializing)]
359+
pub country_currency: Option<CountryCurrency>,
360+
#[serde(skip_deserializing)]
361+
pub continent_info: Option<Continent>,
362+
}
363+
364+
/// Plus API AS details (extends Core).
365+
#[derive(Debug, Default, Deserialize, Serialize, Clone)]
366+
pub struct PlusAS {
367+
pub asn: String,
368+
pub name: String,
369+
pub domain: String,
370+
#[serde(rename = "type")]
371+
pub as_type: String,
372+
pub last_changed: Option<String>,
373+
}
374+
375+
/// Plus API Mobile details.
376+
#[derive(Debug, Default, Deserialize, Serialize, Clone)]
377+
pub struct PlusMobile {
378+
pub name: Option<String>,
379+
pub mcc: Option<String>,
380+
pub mnc: Option<String>,
381+
}
382+
383+
/// Plus API Anonymous details.
384+
#[derive(Debug, Default, Deserialize, Serialize, Clone)]
385+
pub struct PlusAnonymous {
386+
pub is_proxy: bool,
387+
pub is_relay: bool,
388+
pub is_tor: bool,
389+
pub is_vpn: bool,
390+
pub name: Option<String>,
391+
}
392+
393+
/// Plus API Abuse details (reuse existing AbuseDetails but with country_name).
394+
#[derive(Debug, Default, Deserialize, Serialize, Clone)]
395+
pub struct PlusAbuse {
396+
pub address: Option<String>,
397+
pub country: Option<String>,
398+
#[serde(skip_deserializing)]
399+
pub country_name: Option<String>,
400+
pub email: Option<String>,
401+
pub name: Option<String>,
402+
pub network: Option<String>,
403+
pub phone: Option<String>,
404+
}
405+
406+
/// Plus API Company details (reuse existing CompanyDetails).
407+
#[derive(Debug, Default, Deserialize, Serialize, Clone)]
408+
pub struct PlusCompany {
409+
pub name: Option<String>,
410+
pub domain: Option<String>,
411+
#[serde(rename = "type")]
412+
pub company_type: Option<String>,
413+
}
414+
415+
/// Plus API Privacy details (reuse existing PrivacyDetails).
416+
#[derive(Debug, Default, Deserialize, Serialize, Clone)]
417+
pub struct PlusPrivacy {
418+
pub vpn: bool,
419+
pub proxy: bool,
420+
pub tor: bool,
421+
pub relay: bool,
422+
pub hosting: bool,
423+
pub service: Option<String>,
424+
}
425+
426+
/// Plus API Domains details (reuse existing DomainsDetails).
427+
#[derive(Debug, Default, Deserialize, Serialize, Clone)]
428+
pub struct PlusDomains {
429+
pub ip: Option<String>,
430+
pub total: u64,
431+
pub domains: Vec<String>,
432+
}
433+
434+
/// Plus API IP address lookup details.
435+
#[derive(Debug, Default, Deserialize, Serialize, Clone)]
436+
pub struct IpDetailsPlus {
437+
pub ip: String,
438+
pub hostname: Option<String>,
439+
pub geo: Option<PlusGeo>,
440+
#[serde(rename = "as")]
441+
pub asn: Option<PlusAS>,
442+
pub mobile: Option<PlusMobile>,
443+
pub anonymous: Option<PlusAnonymous>,
444+
pub is_anonymous: bool,
445+
pub is_anycast: bool,
446+
pub is_hosting: bool,
447+
pub is_mobile: bool,
448+
pub is_satellite: bool,
449+
pub abuse: Option<PlusAbuse>,
450+
pub company: Option<PlusCompany>,
451+
pub privacy: Option<PlusPrivacy>,
452+
pub domains: Option<PlusDomains>,
453+
454+
/// If the IP Address is Bogon
455+
pub bogon: Option<bool>,
456+
457+
#[serde(flatten)]
458+
pub extra: HashMap<String, Value>,
459+
}

0 commit comments

Comments
 (0)