use zbus::zvariant::Value;
pub fn frequency_to_channel(freq: u32) -> Option<u32> {
if freq == 2484 {
return Some(14);
}
if (2412..2484).contains(&freq) {
return Some((freq - 2407) / 5);
}
if (5000..6000).contains(&freq) {
return Some((freq - 5000) / 5);
}
None
}
pub fn parse_dbus_variant(var: Value) -> String {
match var {
Value::U8(value) => value.to_string(),
Value::Bool(value) => value.to_string(),
Value::I16(value) => value.to_string(),
Value::U16(value) => value.to_string(),
Value::I32(value) => value.to_string(),
Value::U32(value) => value.to_string(),
Value::I64(value) => value.to_string(),
Value::U64(value) => value.to_string(),
Value::F64(value) => value.to_string(),
Value::Str(value) => value.to_string(),
Value::Signature(value) => value.to_string(),
Value::ObjectPath(value) => value.to_string(),
Value::Value(value) => value.to_string(),
Value::Array(value) => {
let items: Vec<Value> = value.to_vec();
let mut buffer = String::from("[");
let mut do_pop = false;
for item in items.into_iter() {
do_pop = true;
buffer.push(' ');
buffer.push_str(&parse_dbus_variant(item));
buffer.push(',');
}
if do_pop {
buffer.pop();
}
buffer.push_str(" ]");
buffer
}
Value::Dict(value) => {
let mut buffer = String::from("{ ");
let mut do_pop = false;
for (key, value) in value {
do_pop = true;
let key = parse_dbus_variant(key);
let value = parse_dbus_variant(value);
buffer.push(' ');
buffer.push_str(&key);
buffer.push_str(": ");
buffer.push_str(&value);
buffer.push(',');
}
if do_pop {
buffer.pop();
}
buffer.push('}');
buffer
}
Value::Structure(structure) => structure.to_string(),
Value::Fd(_) => "Unsupported".to_owned(),
}
}