actrpc-orchestrator 0.1.0

Configuration and orchestration utilities for ActRPC.
Documentation
use crate::method::{MethodName, ProviderName};
use actrpc_core::json_rpc::JsonRpcError;
use actrpc_transport::TransportError;

#[non_exhaustive]
#[derive(Debug, thiserror::Error)]
pub enum MethodCatalogError {
    #[error("duplicate method provider: {provider}")]
    DuplicateProvider { provider: ProviderName },

    #[error("failed to build method provider {provider}: {source}")]
    ProviderBuild {
        provider: ProviderName,
        #[source]
        source: MethodProviderBuildError,
    },
}

#[non_exhaustive]
#[derive(Debug, thiserror::Error)]
pub enum MethodProviderBuildError {
    #[error("failed to create client for method provider {provider}: {source}")]
    ClientCreate {
        provider: ProviderName,
        #[source]
        source: TransportError,
    },

    #[error("method provider discovery transport failed for {provider}: {source}")]
    DiscoveryTransport {
        provider: ProviderName,
        #[source]
        source: TransportError,
    },

    #[error("method provider discovery failed for {provider}: {message}")]
    DiscoveryFailed {
        provider: ProviderName,
        message: String,
    },

    #[error("duplicate method {method} in provider {provider}")]
    DuplicateMethod {
        provider: ProviderName,
        method: MethodName,
    },

    #[error("invalid method provider config for {provider}: {message}")]
    InvalidConfig {
        provider: ProviderName,
        message: String,
    },
}

#[non_exhaustive]
#[derive(Debug, thiserror::Error)]
pub enum MethodCallError {
    #[error("method provider not found: {provider}")]
    ProviderNotFound { provider: ProviderName },

    #[error("method {method} not found in provider {provider}")]
    MethodNotFound {
        provider: ProviderName,
        method: MethodName,
    },

    #[error("method call transport failed for {provider}/{method}: {source}")]
    Transport {
        provider: ProviderName,
        method: MethodName,
        #[source]
        source: TransportError,
    },

    #[error("method {provider}/{method} returned remote JSON-RPC error: {error:?}")]
    RemoteError {
        provider: ProviderName,
        method: MethodName,
        error: JsonRpcError,
    },

    #[error("method {provider}/{method} returned invalid response: {message}")]
    InvalidResponse {
        provider: ProviderName,
        method: MethodName,
        message: String,
    },

    #[error("invalid params for method {provider}/{method}: {message}")]
    InvalidParams {
        provider: ProviderName,
        method: MethodName,
        message: String,
    },
}