apollo_configuration/types/
socket.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 SocketAddr(std::net::SocketAddr);
19
20impl<'de> Deserialize<'de> for SocketAddr {
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::<std::net::SocketAddr>()
27 .map(Self)
28 .map_err(serde::de::Error::custom)
29 }
30}
31
32impl Serialize for SocketAddr {
33 fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
34 where
35 S: serde::Serializer,
36 {
37 self.0.to_string().serialize(serializer)
38 }
39}
40
41impl JsonSchema for SocketAddr {
42 fn schema_name() -> Cow<'static, str> {
43 Cow::Borrowed("SocketAddr")
44 }
45
46 fn json_schema(generator: &mut schemars::SchemaGenerator) -> schemars::Schema {
47 std::net::SocketAddr::json_schema(generator)
48 }
49}
50
51impl Validate for SocketAddr {}
52
53#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Deref, From, FromStr, Display)]
59pub struct SocketAddrV4(std::net::SocketAddrV4);
60
61impl<'de> Deserialize<'de> for SocketAddrV4 {
62 fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
63 where
64 D: Deserializer<'de>,
65 {
66 let s = String::deserialize(deserializer)?;
67 s.parse::<std::net::SocketAddrV4>()
68 .map(Self)
69 .map_err(serde::de::Error::custom)
70 }
71}
72
73impl Serialize for SocketAddrV4 {
74 fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
75 where
76 S: serde::Serializer,
77 {
78 self.0.to_string().serialize(serializer)
79 }
80}
81
82impl JsonSchema for SocketAddrV4 {
83 fn schema_name() -> Cow<'static, str> {
84 Cow::Borrowed("SocketAddrV4")
85 }
86
87 fn json_schema(generator: &mut schemars::SchemaGenerator) -> schemars::Schema {
88 std::net::SocketAddrV4::json_schema(generator)
89 }
90}
91
92impl Validate for SocketAddrV4 {}
93
94#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Deref, From, FromStr, Display)]
100pub struct SocketAddrV6(std::net::SocketAddrV6);
101
102impl<'de> Deserialize<'de> for SocketAddrV6 {
103 fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
104 where
105 D: Deserializer<'de>,
106 {
107 let s = String::deserialize(deserializer)?;
108 s.parse::<std::net::SocketAddrV6>()
109 .map(Self)
110 .map_err(serde::de::Error::custom)
111 }
112}
113
114impl Serialize for SocketAddrV6 {
115 fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
116 where
117 S: serde::Serializer,
118 {
119 self.0.to_string().serialize(serializer)
120 }
121}
122
123impl JsonSchema for SocketAddrV6 {
124 fn schema_name() -> Cow<'static, str> {
125 Cow::Borrowed("SocketAddrV6")
126 }
127
128 fn json_schema(generator: &mut schemars::SchemaGenerator) -> schemars::Schema {
129 std::net::SocketAddrV6::json_schema(generator)
130 }
131}
132
133impl Validate for SocketAddrV6 {}