Struct irx_config::value::Value
source · pub struct Value { /* private fields */ }
Expand description
This structure represent key-value based configuration data.
IMPORTANT: All functionality related to the sealed state only affects the display/debugging output.
Implementations§
source§impl Value
impl Value
sourcepub fn try_from<T: Serialize>(value: T) -> Result<Self>
pub fn try_from<T: Serialize>(value: T) -> Result<Self>
Try to create Value
structure from any type which implements Serialize
trait and make key names to be
case-sensitive. If successful return instance of Value
structure.
Errors
If any errors will occur during construction then error will be returned.
Example
use irx_config::{json, Value};
let data = Value::try_from(json!(
{
"name": "John Doe",
"age": 43,
"phones": [
"+44 1234567",
"+44 2345678"
]
}))?;
sourcepub fn try_from_with_case<T: Serialize>(value: T, case_on: bool) -> Result<Self>
pub fn try_from_with_case<T: Serialize>(value: T, case_on: bool) -> Result<Self>
sourcepub fn with_case(on: bool) -> Self
pub fn with_case(on: bool) -> Self
Create default Value
structure with key names to be case-sensitive/insensitive.
sourcepub fn is_case_sensitive(&self) -> bool
pub fn is_case_sensitive(&self) -> bool
Return true
if key names is case-sensitive, otherwise return false
.
sourcepub fn merge(self, value: &Value) -> Self
pub fn merge(self, value: &Value) -> Self
Merge a input Value
to the given Value
structure. The key names will use case-sensitivity of given
Value
during merge. Return merged result Value
structure. If given Value
was sealed and merge
operation was mutating then it will be in SealedState::Mutated
.
Example
use irx_config::{json, Value};
let mut person = Value::try_from(json!({
"name": "John Doe",
"age": 43
}))?;
let phones = Value::try_from(json!({
"phones": [
"+44 1234567",
"+44 2345678"
]
}))?;
person = person.merge(&phones);
sourcepub fn merge_with_case(self, value: &Value, case_on: bool) -> Self
pub fn merge_with_case(self, value: &Value, case_on: bool) -> Self
Merge a input Value
to the given Value
structure. The key names will be case-sensitive or
case-insensitive during merge, according to case_on
parameter. Return merged result Value
structure.
If given Value
was sealed and merge operation was mutating then it will be in SealedState::Mutated
.
sourcepub fn get_by_keys<I, K, T>(&self, keys: I) -> Result<Option<T>>
pub fn get_by_keys<I, K, T>(&self, keys: I) -> Result<Option<T>>
Return deserialized data of any type which implements Deserialize
trait for given key path represented
as iterator. If given key path does not exists Ok(None)
will be returned.
Errors
If any errors will occur then error will be returned.
Example
use irx_config::{json, Value};
let logger = Value::try_from(json!({
"logger": {
"id": 42,
"host": "localhost"
}
}))?;
let id: u32 = logger.get_by_keys(["logger", "id"])?.unwrap();
sourcepub fn get_by_key_path<T, P>(&self, path: P) -> Result<Option<T>>
pub fn get_by_key_path<T, P>(&self, path: P) -> Result<Option<T>>
Return deserialized data of any type which implements Deserialize
trait for given key path represented
as string with default keys level delimiter DEFAULT_KEYS_SEPARATOR
. If given key path does not exists
Ok(None)
will be returned.
Errors
If any errors will occur then error will be returned.
Example
use irx_config::{json, Value};
let logger = Value::try_from(json!({
"logger": {
"id": 42,
"host": "localhost"
}
}))?;
let id: u32 = logger.get_by_key_path("logger:id")?.unwrap();
sourcepub fn get_by_key_path_with_delim<T, P, D>(
&self,
path: P,
delim: D
) -> Result<Option<T>>
pub fn get_by_key_path_with_delim<T, P, D>( &self, path: P, delim: D ) -> Result<Option<T>>
Return deserialized data of any type which implements Deserialize
trait for given key path represented
as string with given keys level delimiter. If given key path does not exists Ok(None)
will be returned.
Errors
If any errors will occur then error will be returned.
Example
use irx_config::{json, Value};
let logger = Value::try_from(json!({
"logger": {
"id": 42,
"host": "localhost"
}
}))?;
let host: String = logger.get_by_key_path_with_delim("logger/host", "/")?.unwrap();
sourcepub fn get<T: DeserializeOwned>(&self) -> Result<T>
pub fn get<T: DeserializeOwned>(&self) -> Result<T>
Return deserialized data of any type which implements Deserialize
trait.
Errors
If any errors will occur then error will be returned.
Example
use irx_config::{json, Value};
use serde::Deserialize;
#[derive(Deserialize)]
struct Logger {
pub id: u32,
pub host: String,
}
#[derive(Deserialize)]
struct Config {
logger: Logger,
}
let config = Value::try_from(json!({
"logger": {
"id": 42,
"host": "localhost"
}
}))?;
let config: Config = config.get()?;
sourcepub fn set_by_keys<I, K, T>(
&mut self,
keys: I,
value: T
) -> Result<Option<Self>>
pub fn set_by_keys<I, K, T>( &mut self, keys: I, value: T ) -> Result<Option<Self>>
Set value of any type which implements Serialize
trait for given key path represented as iterator.
If Value
was sealed and set operation was successful then it will be in SealedState::Mutated
. Return
previous value for same key path if any.
Errors
If any errors will occur then error will be returned.
Example
use irx_config::Value;
let mut value = Value::default();
value.set_by_keys(["logger", "id"], 42)?;
sourcepub fn set_by_key_path<T, P>(
&mut self,
path: P,
value: T
) -> Result<Option<Self>>
pub fn set_by_key_path<T, P>( &mut self, path: P, value: T ) -> Result<Option<Self>>
Set value of any type which implements Serialize
trait for given key path represented as string with default
keys level delimiter DEFAULT_KEYS_SEPARATOR
. If Value
was sealed and set operation was successful then
it will be in SealedState::Mutated
. Return previous value for same key path if any.
Errors
If any errors will occur then error will be returned.
Example
use irx_config::Value;
let mut value = Value::default();
value.set_by_key_path("logger:id", 42)?;
sourcepub fn set_by_key_path_with_delim<T, P, D>(
&mut self,
path: P,
delim: D,
value: T
) -> Result<Option<Self>>
pub fn set_by_key_path_with_delim<T, P, D>( &mut self, path: P, delim: D, value: T ) -> Result<Option<Self>>
Set value of any type which implements Serialize
trait for given key path represented as string with given
keys level delimiter. If Value
was sealed and set operation was successful then it will be in
SealedState::Mutated
. Return previous value for same key path if any.
Errors
If any errors will occur then error will be returned.
Example
use irx_config::Value;
let mut value = Value::default();
value.set_by_key_path_with_delim("logger/id", "/", 42)?;
sourcepub fn seal<S>(&mut self, suffix: S) -> &mut Self
pub fn seal<S>(&mut self, suffix: S) -> &mut Self
Seal secret values in Value
structure with given suffix. Such values will be obfuscated with ********
during display/debugging output. If not set then all values will be displayed as is.
Example
use irx_config::Value;
let mut value = Value::try_from(json!({
"user": "user name",
"password_sealed_": "secret"
}))?;
value.seal("_sealed_");
sourcepub fn sealed_state(&self) -> SealedState
pub fn sealed_state(&self) -> SealedState
Return sealed state SealedState
.
Trait Implementations§
source§impl<'de> Deserialize<'de> for Value
impl<'de> Deserialize<'de> for Value
source§fn deserialize<D>(deserializer: D) -> StdResult<Self, D::Error>where
D: Deserializer<'de>,
fn deserialize<D>(deserializer: D) -> StdResult<Self, D::Error>where
D: Deserializer<'de>,
source§impl PartialEq for Value
impl PartialEq for Value
impl Eq for Value
Auto Trait Implementations§
impl RefUnwindSafe for Value
impl Send for Value
impl Sync for Value
impl Unpin for Value
impl UnwindSafe for Value
Blanket Implementations§
source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key
and return true
if they are equal.