2025-02-23 16:12:02 +00:00
|
|
|
use crate::Ironbar;
|
2025-02-21 16:35:54 +00:00
|
|
|
use crate::ipc::{IronvarCommand, Response};
|
|
|
|
use crate::ironvar::{Namespace, WritableNamespace};
|
2025-02-23 16:12:02 +00:00
|
|
|
use std::sync::Arc;
|
2024-05-18 17:17:26 +01:00
|
|
|
|
|
|
|
pub fn handle_command(command: IronvarCommand) -> Response {
|
|
|
|
match command {
|
|
|
|
IronvarCommand::Set { key, value } => {
|
|
|
|
let variable_manager = Ironbar::variable_manager();
|
2025-02-23 16:12:02 +00:00
|
|
|
match variable_manager.set(&key, value) {
|
2024-05-18 17:17:26 +01:00
|
|
|
Ok(()) => Response::Ok,
|
|
|
|
Err(err) => Response::error(&format!("{err}")),
|
|
|
|
}
|
|
|
|
}
|
2025-02-23 16:12:02 +00:00
|
|
|
IronvarCommand::Get { mut key } => {
|
2024-05-18 17:17:26 +01:00
|
|
|
let variable_manager = Ironbar::variable_manager();
|
2025-02-23 16:12:02 +00:00
|
|
|
let mut ns: Arc<dyn Namespace + Sync + Send> = variable_manager;
|
|
|
|
|
|
|
|
if key.contains('.') {
|
|
|
|
for part in key.split('.') {
|
2025-05-25 12:14:24 +01:00
|
|
|
ns = if let Some(ns) = ns.get_namespace(part) {
|
|
|
|
ns.clone()
|
|
|
|
} else {
|
|
|
|
key = part.into();
|
|
|
|
break;
|
2025-02-23 16:12:02 +00:00
|
|
|
};
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
let value = ns.get(&key);
|
2024-05-18 17:17:26 +01:00
|
|
|
match value {
|
|
|
|
Some(value) => Response::OkValue { value },
|
|
|
|
None => Response::error("Variable not found"),
|
|
|
|
}
|
|
|
|
}
|
2025-02-23 16:12:02 +00:00
|
|
|
IronvarCommand::List { namespace } => {
|
2024-05-18 17:17:26 +01:00
|
|
|
let variable_manager = Ironbar::variable_manager();
|
2025-02-23 16:12:02 +00:00
|
|
|
let mut ns: Arc<dyn Namespace + Sync + Send> = variable_manager;
|
2024-05-18 17:17:26 +01:00
|
|
|
|
2025-02-23 16:12:02 +00:00
|
|
|
if let Some(namespace) = namespace {
|
|
|
|
for part in namespace.split('.') {
|
|
|
|
ns = match ns.get_namespace(part) {
|
|
|
|
Some(ns) => ns.clone(),
|
|
|
|
None => return Response::error("Namespace not found"),
|
|
|
|
};
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
let mut namespaces = ns
|
|
|
|
.namespaces()
|
|
|
|
.iter()
|
|
|
|
.map(|ns| format!("<{ns}>"))
|
|
|
|
.collect::<Vec<_>>();
|
|
|
|
|
|
|
|
namespaces.sort();
|
|
|
|
|
|
|
|
let mut value = namespaces.join("\n");
|
|
|
|
|
|
|
|
let mut values = ns
|
2024-05-18 17:17:26 +01:00
|
|
|
.get_all()
|
|
|
|
.iter()
|
2025-02-23 16:12:02 +00:00
|
|
|
.map(|(k, v)| format!("{k}: {v}"))
|
2024-05-18 17:17:26 +01:00
|
|
|
.collect::<Vec<_>>();
|
|
|
|
|
|
|
|
values.sort();
|
2025-02-23 16:12:02 +00:00
|
|
|
|
|
|
|
value.push('\n');
|
|
|
|
value.push_str(&values.join("\n"));
|
2024-05-18 17:17:26 +01:00
|
|
|
|
|
|
|
Response::OkValue { value }
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|