use anyhow::{Error, Result};
use iceoryx2::prelude::*;
use iceoryx2_cli::Format;
use iceoryx2_cli::filter::Filter;
use iceoryx2_cli::output::ServiceDescription;
use crate::cli::OutputFilter;
pub(crate) fn details(service_name: String, filter: OutputFilter, format: Format) -> Result<()> {
let mut error: Option<Error> = None;
ipc::Service::list(Config::global_config(), |service| {
if service_name == service.static_details.name().to_string() && filter.matches(&service) {
match format.as_string(&ServiceDescription::from(&service)) {
Ok(output) => {
println!("{output}");
CallbackProgression::Continue
}
Err(e) => {
error = Some(e);
CallbackProgression::Stop
}
}
} else {
CallbackProgression::Continue
}
})?;
if let Some(err) = error {
return Err(err);
}
Ok(())
}