zero4rs 2.0.0

zero4rs is a powerful, pragmatic, and extremely fast web framework for Rust
Documentation
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, // Specify the target type
{
    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, // Specify the target type
{
    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>,
{
    // 将 serde_json::Value 转换为 serde_json::Map
    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)
    }
}