apollo_configuration/types/
ip.rs1use std::borrow::Cow;
4
5use derive_more::{Deref, Display, From, FromStr};
6use schemars::JsonSchema;
7use serde::de::Deserializer;
8use serde::{Deserialize, Serialize};
9
10use crate::Validate;
11
12#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Deref, From, FromStr, Display)]
18pub struct IpAddr(std::net::IpAddr);
19
20impl<'de> Deserialize<'de> for IpAddr {
21 fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
22 where
23 D: Deserializer<'de>,
24 {
25 let s = String::deserialize(deserializer)?;
26 s.parse().map_err(serde::de::Error::custom)
27 }
28}
29
30impl Serialize for IpAddr {
31 fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
32 where
33 S: serde::Serializer,
34 {
35 self.0.to_string().serialize(serializer)
36 }
37}
38
39impl JsonSchema for IpAddr {
40 fn schema_name() -> Cow<'static, str> {
41 Cow::Borrowed("IpAddr")
42 }
43
44 fn json_schema(generator: &mut schemars::SchemaGenerator) -> schemars::Schema {
45 std::net::IpAddr::json_schema(generator)
46 }
47}
48
49impl Validate for IpAddr {}
50
51#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Deref, From, FromStr, Display)]
57pub struct Ipv4Addr(std::net::Ipv4Addr);
58
59impl<'de> Deserialize<'de> for Ipv4Addr {
60 fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
61 where
62 D: Deserializer<'de>,
63 {
64 let s = String::deserialize(deserializer)?;
65 s.parse().map_err(serde::de::Error::custom)
66 }
67}
68
69impl Serialize for Ipv4Addr {
70 fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
71 where
72 S: serde::Serializer,
73 {
74 self.0.to_string().serialize(serializer)
75 }
76}
77
78impl JsonSchema for Ipv4Addr {
79 fn schema_name() -> Cow<'static, str> {
80 Cow::Borrowed("Ipv4Addr")
81 }
82
83 fn json_schema(generator: &mut schemars::SchemaGenerator) -> schemars::Schema {
84 std::net::Ipv4Addr::json_schema(generator)
85 }
86}
87
88impl Validate for Ipv4Addr {}
89
90#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Deref, From, FromStr, Display)]
96pub struct Ipv6Addr(std::net::Ipv6Addr);
97
98impl<'de> Deserialize<'de> for Ipv6Addr {
99 fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
100 where
101 D: Deserializer<'de>,
102 {
103 let s = String::deserialize(deserializer)?;
104 s.parse().map_err(serde::de::Error::custom)
105 }
106}
107
108impl Serialize for Ipv6Addr {
109 fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
110 where
111 S: serde::Serializer,
112 {
113 self.0.to_string().serialize(serializer)
114 }
115}
116
117impl JsonSchema for Ipv6Addr {
118 fn schema_name() -> Cow<'static, str> {
119 Cow::Borrowed("Ipv6Addr")
120 }
121
122 fn json_schema(generator: &mut schemars::SchemaGenerator) -> schemars::Schema {
123 std::net::Ipv6Addr::json_schema(generator)
124 }
125}
126
127impl Validate for Ipv6Addr {}