coil-runtime 0.1.0

HTTP runtime and request handling for the Coil framework.
Documentation
use coil_auth::{Entity, Namespace};

pub(super) fn route_capability_resource(
    namespace: Namespace,
    module: Option<&str>,
    contract_kind: Option<&str>,
    route_name: &str,
) -> Entity {
    let resource_id = match (module, contract_kind) {
        (Some(module), Some(contract_kind)) => {
            format!("http.surface.module.{module}.{contract_kind}.{route_name}")
        }
        (Some(module), None) => format!("http.surface.module.{module}.{route_name}"),
        (None, Some(contract_kind)) => format!("http.surface.{contract_kind}.{route_name}"),
        (None, None) => format!("http.surface.{route_name}"),
    };

    match namespace {
        Namespace::Tenant => Entity::tenant(resource_id),
        Namespace::Site => Entity::site(resource_id),
        Namespace::Brand => Entity::brand(resource_id),
        Namespace::Storefront => Entity::storefront(resource_id),
        Namespace::User => Entity::user(resource_id),
        Namespace::Group => Entity::group(resource_id),
        Namespace::Team => Entity::team(resource_id),
        Namespace::ServiceAccount => Entity::service_account(resource_id),
        Namespace::Page => Entity::page(resource_id),
        Namespace::Navigation => Entity::navigation(resource_id),
        Namespace::Product => Entity::product(resource_id),
        Namespace::Collection => Entity::collection(resource_id),
        Namespace::Order => Entity::order(resource_id),
        Namespace::Subscription => Entity::subscription(resource_id),
        Namespace::MembershipTier => Entity::membership_tier(resource_id),
        Namespace::Event => Entity::event(resource_id),
        Namespace::EventSlot => Entity::event_slot(resource_id),
        Namespace::Booking => Entity::booking(resource_id),
        Namespace::Media => Entity::media(resource_id),
        Namespace::MediaLibrary => Entity::media_library(resource_id),
        Namespace::Asset => Entity::asset(resource_id),
        Namespace::AssetFolder => Entity::asset_folder(resource_id),
        Namespace::ThemeAssetBundle => Entity::theme_asset_bundle(resource_id),
        Namespace::AdminModule => Entity::admin_module(resource_id),
    }
}