use nu_protocol::{
engine::{Call, Command, EngineState, Stack},
PipelineData, ShellError, Signature, Type,
};
use crate::{call_ext2::CallExt2, conv, signature_ext::SignatureExt, State};
#[derive(Clone)]
pub(crate) struct Config {
state: State,
}
impl Config {
pub(crate) fn new(state: State) -> Self {
Self { state }
}
}
impl Command for Config {
fn name(&self) -> &str {
"zenoh config"
}
fn signature(&self) -> Signature {
Signature::build(self.name())
.session()
.zenoh_category()
.input_output_type(Type::Nothing, Type::record())
}
fn description(&self) -> &str {
"Session config"
}
fn run(
&self,
engine_state: &EngineState,
stack: &mut Stack,
call: &Call,
_input: PipelineData,
) -> Result<PipelineData, ShellError> {
let config = self
.state
.with_session(&call.session(engine_state, stack)?, |sess| {
sess.config().to_string()
})?;
let nujson = nu_json::from_str::<nu_json::Value>(config.trim()).map_err(|e| {
nu_protocol::LabeledError::new("Config deserialization failed")
.with_label(format!("Config deserialization failed: {e}"), call.head)
})?;
Ok(PipelineData::Value(
conv::nujson_to_value(nujson, call.head),
None,
))
}
}