Skip to content

Commit

Permalink
fix: simplify config
Browse files Browse the repository at this point in the history
  • Loading branch information
conblem committed Jan 16, 2021
1 parent 9fcda0b commit 6c02fce
Show file tree
Hide file tree
Showing 3 changed files with 34 additions and 41 deletions.
6 changes: 3 additions & 3 deletions src/api/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -24,9 +24,9 @@ pub struct Api<H, P, S> {
}

pub async fn new(
Listener(http, http_proxy): Listener,
Listener(https, https_proxy): Listener,
Listener(prom, prom_proxy): Listener,
(http, http_proxy): Listener,
(https, https_proxy): Listener,
(prom, prom_proxy): Listener,
pool: PgPool,
) -> Result<
Api<
Expand Down
66 changes: 28 additions & 38 deletions src/config/listener.rs
Original file line number Diff line number Diff line change
Expand Up @@ -26,49 +26,39 @@ impl Default for ProxyProtocol {
}
}

#[derive(Debug, Clone)]
pub struct Listener(pub Option<String>, pub ProxyProtocol);
pub type Listener = (Option<String>, ProxyProtocol);

impl<'de> Deserialize<'de> for Listener {
fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
where
D: Deserializer<'de>,
{
struct ListenerVisitor;
impl<'de> Visitor<'de> for ListenerVisitor {
type Value = Listener;
pub(super) fn deserialize<'de, D>(deserializer: D) -> Result<Listener, D::Error>
where
D: Deserializer<'de>,
{
struct ListenerVisitor;
impl<'de> Visitor<'de> for ListenerVisitor {
type Value = Listener;

fn expecting(&self, formatter: &mut Formatter) -> std::fmt::Result {
formatter.write_str("Listener")
}

fn visit_str<E>(self, value: &str) -> Result<Self::Value, E>
where
E: serde::de::Error,
{
Ok(Listener(
String::from(value).into(),
ProxyProtocol::Disabled,
))
}
fn expecting(&self, formatter: &mut Formatter) -> std::fmt::Result {
formatter.write_str("Listener")
}

fn visit_none<E>(self) -> Result<Self::Value, E>
where
E: serde::de::Error,
{
Ok(Listener(None, ProxyProtocol::Disabled))
}
fn visit_str<E>(self, value: &str) -> Result<Self::Value, E>
where
E: serde::de::Error,
{
Ok((
String::from(value).into(),
ProxyProtocol::Disabled,
))
}

fn visit_seq<A>(self, mut seq: A) -> Result<Self::Value, A::Error>
where
A: SeqAccess<'de>,
{
let listener = seq.next_element::<String>()?;
let proxy = seq.next_element::<ProxyProtocol>()?.unwrap_or_default();
fn visit_seq<A>(self, mut seq: A) -> Result<Self::Value, A::Error>
where
A: SeqAccess<'de>,
{
let listener = seq.next_element::<String>()?;
let proxy = seq.next_element::<ProxyProtocol>()?.unwrap_or_default();

Ok(Listener(listener, proxy))
}
Ok((listener, proxy))
}
deserializer.deserialize_any(ListenerVisitor)
}
deserializer.deserialize_any(ListenerVisitor)
}
3 changes: 3 additions & 0 deletions src/config/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,11 @@ mod records;

#[derive(Deserialize, Debug)]
pub struct Api {
#[serde(default, deserialize_with = "listener::deserialize")]
pub http: Listener,
#[serde(default, deserialize_with = "listener::deserialize")]
pub https: Listener,
#[serde(default, deserialize_with = "listener::deserialize")]
pub prom: Listener,
}

Expand Down

0 comments on commit 6c02fce

Please sign in to comment.