Skip to main content

module

Macro module 

Source
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");