1use serde::{Deserialize, Serialize};
6
7use crate::common::{RdapEntity, RdapEvent, RdapLink, RdapRemark, RdapStatus, ResponseMeta};
8
9#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
11pub enum IpVersion {
12 #[serde(rename = "v4")]
13 V4,
14 #[serde(rename = "v6")]
15 V6,
16}
17
18#[derive(Debug, Clone, Serialize, Deserialize)]
20#[serde(rename_all = "camelCase")]
21pub struct IpResponse {
22 pub query: String,
24
25 #[serde(skip_serializing_if = "Option::is_none")]
27 pub handle: Option<String>,
28
29 #[serde(skip_serializing_if = "Option::is_none")]
31 pub start_address: Option<String>,
32
33 #[serde(skip_serializing_if = "Option::is_none")]
35 pub end_address: Option<String>,
36
37 #[serde(skip_serializing_if = "Option::is_none")]
39 pub ip_version: Option<IpVersion>,
40
41 #[serde(skip_serializing_if = "Option::is_none")]
43 pub name: Option<String>,
44
45 #[serde(rename = "type", skip_serializing_if = "Option::is_none")]
47 pub allocation_type: Option<String>,
48
49 #[serde(skip_serializing_if = "Option::is_none")]
51 pub country: Option<String>,
52
53 #[serde(skip_serializing_if = "Option::is_none")]
55 pub parent_handle: Option<String>,
56
57 #[serde(default, skip_serializing_if = "Vec::is_empty")]
58 pub status: Vec<RdapStatus>,
59
60 #[serde(default, skip_serializing_if = "Vec::is_empty")]
61 pub entities: Vec<RdapEntity>,
62
63 #[serde(default, skip_serializing_if = "Vec::is_empty")]
64 pub events: Vec<RdapEvent>,
65
66 #[serde(default, skip_serializing_if = "Vec::is_empty")]
67 pub links: Vec<RdapLink>,
68
69 #[serde(default, skip_serializing_if = "Vec::is_empty")]
70 pub remarks: Vec<RdapRemark>,
71
72 pub meta: ResponseMeta,
73}