SNot/src/formats/serde.rs
2024-09-28 16:49:48 +05:30

64 lines
1.6 KiB
Rust

use serde::{Serialize, Serializer};
use std::collections::HashMap;
use zvariant::OwnedValue;
//use std::hash::BuildHasher;
use serde::ser::SerializeMap;
pub fn serialize_actions<S>(actions: &[String], serializer: S) -> Result<S::Ok, S::Error>
where
S: Serializer,
{
let mut map = serde_json::Map::new();
// Actions are in pairs: [id, label, id, label, ...]
for pair in actions.chunks(2) {
if let [id, label] = pair {
map.insert(id.clone(), serde_json::Value::String(label.clone()));
}
}
map.serialize(serializer)
}
/*
pub fn serialize_hints<S>(hints: &HashMap<String, OwnedValue>, serializer: S) -> Result<S::Ok, S::Error>
where
S: serde::Serializer,
{
let mut map = serializer.serialize_map(Some(hints.len()))?;
for (key, value) in hints {
// Try to cast the value to a string, otherwise fallback to debug format
let value_str = match value.downcast_ref::<String>() {
Ok(s) => s.clone(), // Successfully cast to String
Err(_) => format!("{:?}", value), // Fallback for non-String values
};
map.serialize_entry(key, &value_str)?;
}
map.end()
}
*/
/*
pub fn serialize_hints<S, H>(
hints: &HashMap<String, OwnedValue, H>,
serializer: S,
) -> Result<S::Ok, S::Error>
where
S: Serializer,
H: BuildHasher,
{
let mut map = serde_json::Map::new();
for (key, value) in hints {
// Customize OwnedValue serialization as needed
map.insert(key.clone(), serde_json::Value::String(value.to_string()));
}
map.serialize(serializer)
}
*/