MCPcopy Create free account
hub / github.com/Dstack-TEE/dstack / deserialize_port_range

Function deserialize_port_range

gateway/src/config.rs:71–102  ·  view source on GitHub ↗

Deserialize a port range from either a single integer (443) or a string range ("443-543").

(deserializer: D)

Source from the content-addressed store, hash-verified

69
70/// Deserialize a port range from either a single integer (443) or a string range ("443-543").
71fn deserialize_port_range<'de, D>(deserializer: D) -> std::result::Result<Vec<u16>, D::Error>
72where
73 D: serde::Deserializer<'de>,
74{
75 use serde::de;
76
77 #[derive(Deserialize)]
78 #[serde(untagged)]
79 enum PortSpec {
80 Single(u16),
81 Range(String),
82 }
83
84 match PortSpec::deserialize(deserializer)? {
85 PortSpec::Single(p) => Ok(vec![p]),
86 PortSpec::Range(s) => {
87 if let Some((start, end)) = s.split_once('-') {
88 let start: u16 = start.trim().parse().map_err(de::Error::custom)?;
89 let end: u16 = end.trim().parse().map_err(de::Error::custom)?;
90 if start > end {
91 return Err(de::Error::custom(format!(
92 "invalid port range: {start} > {end}"
93 )));
94 }
95 Ok((start..=end).collect())
96 } else {
97 let p: u16 = s.trim().parse().map_err(de::Error::custom)?;
98 Ok(vec![p])
99 }
100 }
101 }
102}
103
104#[derive(Debug, Clone, Deserialize)]
105pub struct ProxyConfig {

Callers

nothing calls this directly

Calls 2

deserializeFunction · 0.50
parseMethod · 0.45

Tested by

no test coverage detected