64 lines
1.6 KiB
Rust
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)
|
|
}
|
|
|
|
*/
|