diff --git a/examples/hierarchical-env/config/default.toml b/examples/hierarchical-env/config/default.toml index fab3b7ad..d10cd6ba 100644 --- a/examples/hierarchical-env/config/default.toml +++ b/examples/hierarchical-env/config/default.toml @@ -1,3 +1,5 @@ +cert.content = "/tmp/cert.pem" + [database] url = "postgres://postgres@localhost" diff --git a/examples/hierarchical-env/settings.rs b/examples/hierarchical-env/settings.rs index 93539733..e14ffaca 100644 --- a/examples/hierarchical-env/settings.rs +++ b/examples/hierarchical-env/settings.rs @@ -3,6 +3,14 @@ use std::env; use config::{Config, ConfigError, Environment, File}; use serde_derive::Deserialize; +#[derive(Debug, Deserialize)] +#[allow(unused)] +#[serde(rename_all = "lowercase")] +enum Cert { + Path(String), + Value(String), +} + #[derive(Debug, Deserialize)] #[allow(unused)] struct Database { @@ -42,6 +50,7 @@ pub(crate) struct Settings { sparkpost: Sparkpost, twitter: Twitter, braintree: Braintree, + cert: Cert, } impl Settings { diff --git a/src/de.rs b/src/de.rs index 9700d5ce..781029b2 100644 --- a/src/de.rs +++ b/src/de.rs @@ -281,7 +281,18 @@ impl EnumAccess { if table.len() == 1 { self.variant_deserializer(table.iter().next().unwrap().0) } else { - Err(self.structural_error()) + if table.is_empty() { + return Err(self.structural_error()); + } + #[cfg(feature = "preserve_order")] + { + self.variant_deserializer(table.last().unwrap().0) + } + + #[cfg(not(feature = "preserve_order"))] + { + Err(self.structural_error()) + } } }