pub enum Hocon {
Real(f64),
Integer(i64),
String(String),
Boolean(bool),
Array(Vec<Hocon>),
Hash(LinkedHashMap<String, Hocon>),
Null,
BadValue(Error),
}
Expand description
An HOCON document
Values can be retrieved as a basic type, with basic cast between some of the value types:
Automatic type conversions.
If the value if not of the expected type, a None
will be returned.
If the value is a Hocon::Hash
, its values can be
accessed by indexing with a str
, as in hash[key]
. If the value is an
Hocon::Array
, its values can be accessed by indexing
with a usize
. An Hocon::Hash
whose keys can be
converted to numeric values ("0"
, "1"
, …) can be indexed with a usize
following
the rules described in
Conversion of numerically-indexed objects to arrays.
Indexing a Hocon
value with a wrong key type, or a type of value that can’t be indexed
will return a Hocon::BadValue
with an error of type
crate::Error::InvalidKey
.
Indexing a Hocon
value with a key that is not present will return a
Hocon::BadValue
with an error of type
crate::Error::MissingKey
.
Values can also be accessed as a Duration
or a size following the rules described in
Units format.
§Usage
// Accessing a value of the expected type
assert_eq!(
HoconLoader::new().load_str(r#"{ a: 7 }"#)?.hocon()?["a"].as_i64(),
Some(7)
);
// Accessing a value with automatic conversion
assert_eq!(
HoconLoader::new().load_str(r#"{ a: off }"#)?.hocon()?["a"].as_bool(),
Some(false)
);
// Accessing an Array
assert_eq!(
HoconLoader::new().load_str(r#"{ a: [ first, second ] }"#)?.hocon()?["a"][0].as_string(),
Some(String::from("first"))
);
// Accessing an Hash with a missing key
assert_eq!(
HoconLoader::new().load_str(r#"{ a: 7 }"#)?.hocon()?["b"],
Hocon::BadValue(Error::MissingKey)
);
// Accessing an Hash as if it was an Array
assert_eq!(
HoconLoader::new().load_str(r#"{ a: 7 }"#)?.hocon()?[0],
Hocon::BadValue(Error::InvalidKey)
);
Variants§
Real(f64)
A floating value
Integer(i64)
An integer value
String(String)
A string
Boolean(bool)
A boolean
Array(Vec<Hocon>)
An array of Hocon
values
Hash(LinkedHashMap<String, Hocon>)
An HashMap of Hocon
values with keys
Null
A null value
BadValue(Error)
A BadValue
, marking an error in parsing or a missing value
Implementations§
Source§impl Hocon
impl Hocon
Sourcepub fn as_bytes(&self) -> Option<f64>
pub fn as_bytes(&self) -> Option<f64>
Try to return a value as a size in bytes according to size in bytes format.
Bare numbers are taken to be in bytes already, while strings are parsed as a number plus an optional unit string.
§Example
assert_eq!(
HoconLoader::new().load_str(r#"{ size = 1.5KiB }"#)?.hocon()?["size"].as_bytes(),
Some(1536.0)
);
Sourcepub fn as_milliseconds(&self) -> Option<f64>
pub fn as_milliseconds(&self) -> Option<f64>
Try to return a value as a duration in milliseconds according to duration format.
Bare numbers are taken to be in bytes already, while strings are parsed as a number plus an optional unit string.
§Example
assert_eq!(
HoconLoader::new().load_str(r#"{ duration = 1.5 hour }"#)?
.hocon()?["duration"].as_milliseconds(),
Some(5400000.0)
);
Sourcepub fn as_nanoseconds(&self) -> Option<f64>
pub fn as_nanoseconds(&self) -> Option<f64>
Try to return a value as a duration in nanoseconds according to duration format.
Bare numbers are taken to be in bytes already, while strings are parsed as a number plus an optional unit string.
§Example
assert_eq!(
HoconLoader::new().load_str(r#"{ duration = 1.5 hour }"#)?
.hocon()?["duration"].as_nanoseconds(),
Some(5400000000000.0)
);
Sourcepub fn as_microseconds(&self) -> Option<f64>
pub fn as_microseconds(&self) -> Option<f64>
Try to return a value as a duration in microseconds according to duration format.
Bare numbers are taken to be in bytes already, while strings are parsed as a number plus an optional unit string.
§Example
assert_eq!(
HoconLoader::new().load_str(r#"{ duration = 1.5 hour }"#)?
.hocon()?["duration"].as_microseconds(),
Some(5400000000.0)
);
Sourcepub fn as_seconds(&self) -> Option<f64>
pub fn as_seconds(&self) -> Option<f64>
Try to return a value as a duration in seconds according to duration format.
Bare numbers are taken to be in bytes already, while strings are parsed as a number plus an optional unit string.
§Example
assert_eq!(
HoconLoader::new().load_str(r#"{ duration = 1.5 hour }"#)?
.hocon()?["duration"].as_seconds(),
Some(5400.0)
);
Sourcepub fn as_minutes(&self) -> Option<f64>
pub fn as_minutes(&self) -> Option<f64>
Try to return a value as a duration in minutes according to duration format.
Bare numbers are taken to be in bytes already, while strings are parsed as a number plus an optional unit string.
§Example
assert_eq!(
HoconLoader::new().load_str(r#"{ duration = 1.5 hour }"#)?
.hocon()?["duration"].as_minutes(),
Some(90.0)
);
Sourcepub fn as_hours(&self) -> Option<f64>
pub fn as_hours(&self) -> Option<f64>
Try to return a value as a duration in hours according to duration format.
Bare numbers are taken to be in bytes already, while strings are parsed as a number plus an optional unit string.
§Example
assert_eq!(
HoconLoader::new().load_str(r#"{ duration = 1.5 hour }"#)?
.hocon()?["duration"].as_hours(),
Some(1.5)
);
Sourcepub fn as_days(&self) -> Option<f64>
pub fn as_days(&self) -> Option<f64>
Try to return a value as a duration in days according to duration format.
Bare numbers are taken to be in bytes already, while strings are parsed as a number plus an optional unit string.
§Example
assert_eq!(
HoconLoader::new().load_str(r#"{ duration = 1.5 hour }"#)?
.hocon()?["duration"].as_days(),
Some(0.0625)
);
Sourcepub fn as_weeks(&self) -> Option<f64>
pub fn as_weeks(&self) -> Option<f64>
Try to return a value as a duration in weeks according to duration format.
Bare numbers are taken to be in bytes already, while strings are parsed as a number plus an optional unit string.
§Example
assert_eq!(
HoconLoader::new().load_str(r#"{ duration = 1.5 days }"#)?
.hocon()?["duration"].as_weeks(),
Some(0.21428571428571427)
);
Sourcepub fn as_months(&self) -> Option<f64>
pub fn as_months(&self) -> Option<f64>
Try to return a value as a duration in months according to duration format.
Bare numbers are taken to be in bytes already, while strings are parsed as a number plus an optional unit string.
§Example
assert_eq!(
HoconLoader::new().load_str(r#"{ duration = 1.5 days }"#)?
.hocon()?["duration"].as_months(),
Some(0.05)
);
Sourcepub fn as_years(&self) -> Option<f64>
pub fn as_years(&self) -> Option<f64>
Try to return a value as a duration in years according to duration format.
Bare numbers are taken to be in bytes already, while strings are parsed as a number plus an optional unit string.
§Example
assert_eq!(
HoconLoader::new().load_str(r#"{ duration = 1.5 days }"#)?
.hocon()?["duration"].as_years(),
Some(0.00410958904109589)
);
Sourcepub fn as_duration(&self) -> Option<Duration>
pub fn as_duration(&self) -> Option<Duration>
Try to return a value as a duration according to duration format.
Bare numbers are taken to be in bytes already, while strings are parsed as a number plus an optional unit string.
§Example
assert_eq!(
HoconLoader::new().load_str(r#"{ duration = 1.5 hours }"#)?
.hocon()?["duration"].as_duration(),
Some(std::time::Duration::from_secs(5400))
);
Source§impl Hocon
impl Hocon
Sourcepub fn resolve<'de, T>(self) -> Result<T, Error>where
T: Deserialize<'de>,
pub fn resolve<'de, T>(self) -> Result<T, Error>where
T: Deserialize<'de>,
Deserialize the loaded documents to the target type
§Errors
Error::Deserialization
if there was a serde error during deserialization (missing required field, type issue, …)
§Additional errors in strict mode
Error::Include
if there was an issue with an included fileError::KeyNotFound
if there is a substitution with a key that is not present in the documentError::DisabledExternalUrl
if crate was built without featureurl-support
and aninclude url("...")
was found