systemprompt-models 0.13.0

Foundation data models for systemprompt.io AI governance infrastructure. Shared DTOs, config, and domain types consumed by every layer of the MCP governance pipeline.
Documentation
use std::path::PathBuf;

use thiserror::Error;

#[derive(Debug, Error)]
pub enum GatewayProfileError {
    #[error("Failed to read gateway catalog {path}: {source}")]
    CatalogRead {
        path: PathBuf,
        #[source]
        source: std::io::Error,
    },

    #[error("Failed to parse gateway catalog {path}: {source}")]
    CatalogParse {
        path: PathBuf,
        #[source]
        source: serde_yaml::Error,
    },

    #[error("Invalid gateway catalog {path}: {source}")]
    CatalogInvalid {
        path: PathBuf,
        #[source]
        source: Box<Self>,
    },

    #[error("gateway catalog model has empty id")]
    ModelEmptyId,

    #[error("gateway catalog model '{model}' references unknown provider '{provider}'")]
    UnknownProvider { model: String, provider: String },

    #[error("gateway catalog provider has empty name")]
    ProviderEmptyName,

    #[error("gateway catalog provider '{name}' has empty endpoint")]
    ProviderEmptyEndpoint { name: String },

    #[error("gateway {label} endpoint '{endpoint}' is not permitted: {reason}")]
    BlockedEndpoint {
        label: String,
        endpoint: String,
        reason: String,
    },

    #[error(
        "gateway route '{route}' provider '{provider}' is not declared in the catalog providers"
    )]
    RouteProviderNotInCatalog { route: String, provider: String },

    #[error(
        "gateway route '{route}' endpoint '{route_endpoint}' disagrees with catalog provider \
         '{provider}' endpoint '{catalog_endpoint}'"
    )]
    RouteEndpointMismatch {
        route: String,
        provider: String,
        route_endpoint: String,
        catalog_endpoint: String,
    },

    #[error("gateway catalog model id or alias '{id}' is declared more than once")]
    DuplicateModelId { id: String },

    #[error("gateway route id '{id}' is declared more than once")]
    DuplicateRouteId { id: String },

    #[error("gateway catalog model '{model}' has no route whose pattern matches its id")]
    UnreachableModel { model: String },
}

pub type GatewayResult<T> = Result<T, GatewayProfileError>;