mhome-app-facade-api 1.1.2

Canonical public App Facade protocol for MeowLink clients
Documentation
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum OperationKind {
    Request,
    Event,
}

#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum Authority {
    Cloud,
    Hub,
    Host,
}

#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub struct Operation {
    pub id: &'static str,
    pub target: &'static str,
    pub kind: OperationKind,
    pub authority: Authority,
}

pub const SHARED_OPERATIONS: &[Operation] = &[
    Operation {
        id: "plugin.installed.list",
        target: crate::plugin::INSTALLED_LIST_TARGET,
        kind: OperationKind::Request,
        authority: Authority::Hub,
    },
    Operation {
        id: "plugin.settings.changed",
        target: crate::plugin::SETTINGS_CHANGED_TARGET,
        kind: OperationKind::Event,
        authority: Authority::Hub,
    },
    Operation {
        id: "runtime.status.list",
        target: crate::runtime::STATUS_LIST_TARGET,
        kind: OperationKind::Request,
        authority: Authority::Host,
    },
    Operation {
        id: "runtime.status.changed",
        target: crate::runtime::STATUS_CHANGED_TARGET,
        kind: OperationKind::Event,
        authority: Authority::Host,
    },
];

pub fn operation_by_target(target: &str) -> Option<&'static Operation> {
    SHARED_OPERATIONS
        .iter()
        .find(|operation| operation.target == target)
}