use serde::Deserialize;
use crate::core::error2::Error;
use crate::core::error2::Result;
pub fn parse_json_string<'a, T>(json_str: &'a str) -> Result<T>
where
T: Deserialize<'a>,
{
serde_json::from_str(json_str).map_err(Error::run_time)
}
pub fn json_value_to_generic<T>(json_value: serde_json::Value) -> Result<T>
where
T: serde::de::DeserializeOwned, {
serde_json::from_value(json_value).map_err(Error::run_time)
}
pub fn json_value_to_generic2<T>(json_value: &serde_json::Value) -> Result<T>
where
T: serde::de::DeserializeOwned, {
serde_json::from_value(json_value.clone()).map_err(Error::run_time)
}
pub fn json_value_put_key_value<T>(json_value: &mut serde_json::Value, key: &str, value: T)
where
serde_json::Value: std::convert::From<T>,
{
if let Some(map) = json_value.as_object_mut() {
map.insert(key.to_string(), value.into());
}
}
pub fn generic_to_string<T>(data: &T) -> Result<String>
where
T: serde::Serialize,
{
serde_json::to_string(data).map_err(Error::run_time)
}
pub fn get_value_as_string(
json_value: &serde_json::Value,
field_name: &str,
) -> Result<Option<String>> {
if let Some(field_value) = json_value.get(field_name) {
match field_value {
serde_json::Value::String(value) => Ok(Some(value.to_string())),
_ => Ok(None),
}
} else {
Ok(None)
}
}