greentic-runner-host 0.5.24

Host runtime shim for Greentic runner: config, pack loading, activity handling
Documentation
use super::error::GResult;
use async_trait::async_trait;
use serde::{Deserialize, Serialize};
use serde_json::Value;
use std::collections::HashMap;
use std::sync::Arc;

#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct AdapterCall {
    pub adapter: String,
    pub operation: String,
    pub payload: Value,
}

#[async_trait]
pub trait Adapter: Send + Sync {
    async fn call(&self, call: &AdapterCall) -> GResult<Value>;
}

#[derive(Default, Clone)]
pub struct AdapterRegistry {
    inner: HashMap<String, Arc<dyn Adapter>>,
}

impl AdapterRegistry {
    pub fn register(&mut self, name: impl Into<String>, adapter: Box<dyn Adapter>) {
        self.inner.insert(name.into(), Arc::from(adapter));
    }

    pub fn register_arc(&mut self, name: impl Into<String>, adapter: Arc<dyn Adapter>) {
        self.inner.insert(name.into(), adapter);
    }

    pub fn get(&self, name: &str) -> Option<Arc<dyn Adapter>> {
        self.inner.get(name).cloned()
    }
}