use serde_json::Value;
use crate::connection::types::DataTypes;
pub struct Res;
struct DynamicStruct {
fields: Vec<(String, Value)>,
}
impl Res {
pub fn json(res: Vec<(&str, DataTypes)>) -> &'static str {
let mut dynamic_struct = DynamicStruct { fields: vec![] };
for (response, data) in res {
match data {
DataTypes::Str(s) => dynamic_struct.fields.push((format!("{}", response), Value::String(format!("{}", s)))),
DataTypes::Int(num) => dynamic_struct.fields.push((format!("{}", response), Value::Number( serde_json::Number::from(num) ))),
}
}
let mut input_to_json = String::new();
for (index, value) in dynamic_struct.fields.iter().enumerate() {
if index == dynamic_struct.fields.len() - 1 {
let json_format = format!("\"{}\":{}", value.0, value.1);
input_to_json.push_str(&json_format)
} else {
let json_format = format!("\"{}\":{},", value.0, value.1);
input_to_json.push_str(&json_format)
}
};
let res_format_json = format!(r#"{{ {} }}"#, input_to_json);
Box::leak(res_format_json.into_boxed_str())
}
}