macro_rules! module {
(
id: $id:expr,
title: $title:expr,
description: $description:expr,
stability: $stability:expr,
capabilities: [ $($cap:expr),* $(,)? ] $(,)?
) => { ... };
}Expand description
Build a ModuleDescriptor: the module’s identity and metadata once, and the
executables it composes, each a capability! value.
use majordomus_cli::{capability, module};
use majordomus_cli::capability::{BenchmarkCases, CaseContext, Context, CapabilityError, Exposure, NamedCase, Stability};
#[derive(serde::Serialize, serde::Deserialize, schemars::JsonSchema)]
struct In {}
impl BenchmarkCases for In {
fn benchmark_cases(_: &CaseContext<'_>) -> Vec<NamedCase<Self>> { vec![NamedCase::new("default", In {})] }
}
#[derive(serde::Serialize, schemars::JsonSchema)]
struct Out { ok: bool }
fn ping(_: &Context, _: In) -> Result<Out, CapabilityError> { Ok(Out { ok: true }) }
let m = module! {
id: "demo", title: "Demo", description: "A module of one.", stability: Stability::Experimental,
capabilities: [
capability! { id: "demo.ping", title: "Ping", description: "Answers.", input: In, output: Out,
stability: Stability::Experimental, exposure: Exposure::default(), tags: [], handler: ping },
],
};
assert_eq!(m.capabilities[0].capability.module.as_str(), "demo");