#[macro_export]
macro_rules! generate_from_tuples {
($obj_type:ty, $tuples:expr) => {
{
use serde_json::{Map, Value};
fn extract_result_content(content: &str) -> String {
if let Some(start) = content.find("<result>") {
if let Some(end) = content.find("</result>") {
if start < end {
return content[start + 8..end].trim().to_string();
}
}
}
content.trim().to_string()
}
let mut json_map = Map::new();
for (field_name, content) in $tuples {
let cleaned_content = extract_result_content(&content);
let value = match serde_json::from_str::<Value>(&cleaned_content) {
Ok(v) => v,
Err(_) => Value::String(cleaned_content),
};
json_map.insert(field_name, value);
}
let json_value = Value::Object(json_map);
serde_json::from_value::<$obj_type>(json_value)
.unwrap_or_else(|_| <$obj_type>::default())
}
};
}