actrpc-orchestrator 0.1.0

Configuration and orchestration utilities for ActRPC.
Documentation
use crate::{
    error::MethodProviderBuildError,
    method::{
        MethodProvider, ProviderName,
        providers::{
            mcp::{McpMethodProvider, McpMethodSourceConfig},
            native::{NativeMethodProvider, NativeMethodSourceConfig},
        },
    },
};
use actrpc_transport::{JsonRpcClient, JsonRpcClientProvider, TransportError};
use serde::{Deserialize, Serialize};
use std::sync::Arc;

#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[serde(tag = "kind", rename_all = "snake_case", deny_unknown_fields)]
pub enum MethodSourceConfig {
    Native(NativeMethodSourceConfig),
    Mcp(McpMethodSourceConfig),
}

impl MethodSourceConfig {
    pub fn name(&self) -> &ProviderName {
        match self {
            Self::Native(config) => &config.name,
            Self::Mcp(config) => &config.name,
        }
    }

    pub async fn build_provider<P>(
        self,
        client_provider: &P,
    ) -> Result<Arc<dyn MethodProvider>, MethodProviderBuildError>
    where
        P: JsonRpcClientProvider<
                Client = Arc<dyn JsonRpcClient<Error = TransportError>>,
                Error = TransportError,
            > + Send
            + Sync,
    {
        match self {
            Self::Native(config) => {
                let provider = NativeMethodProvider::from_config(config, client_provider).await?;
                Ok(Arc::new(provider) as Arc<dyn MethodProvider>)
            }

            Self::Mcp(config) => {
                let provider = McpMethodProvider::from_config(config, client_provider).await?;
                Ok(Arc::new(provider) as Arc<dyn MethodProvider>)
            }
        }
    }
}