@@ -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