reddb-io-server 1.24.0

RedDB server-side engine: storage, runtime, replication, MCP, AI, and the gRPC/HTTP/RedWire/PG-wire dispatchers. Re-exported by the umbrella `reddb` crate.
Documentation
use crate::server::route_catalog::{
    RouteAlias, RouteAudience, RouteAuth, RouteEntry, RouteGroupDefaults, RouteMethod,
    RouteRegistry, RouteRequest, RouteStability,
};
use crate::server::routes::common::{PUBLIC_SURFACES, STANDARD_MIDDLEWARE};
use crate::server::{HttpResponse, RedDBServer};

const CACHE_USER: RouteGroupDefaults = RouteGroupDefaults {
    family: "cache",
    audience: RouteAudience::Client,
    auth: RouteAuth::UserRequired,
    surfaces: PUBLIC_SURFACES,
    stability: RouteStability::Stable,
    middlewares: STANDARD_MIDDLEWARE,
};

macro_rules! cache_aliases {
    ($method:expr, $pattern:expr) => {
        &[RouteAlias::canonical(
            $method,
            $pattern,
            "canonical v1 cache path",
        )]
    };
}

const CACHE_ROUTES: &[RouteEntry] = &[
    RouteEntry::with_aliases(
        "cache.get",
        RouteMethod::Get,
        "/cache/ns/:namespace/:key",
        cache_aliases!(RouteMethod::Get, "/v1/cache/ns/:namespace/:key"),
        get,
    ),
    RouteEntry::with_aliases(
        "cache.put",
        RouteMethod::Put,
        "/cache/ns/:namespace/:key",
        cache_aliases!(RouteMethod::Put, "/v1/cache/ns/:namespace/:key"),
        put,
    ),
    RouteEntry::with_aliases(
        "cache.exists",
        RouteMethod::Get,
        "/cache/ns/:namespace/:key/exists",
        cache_aliases!(RouteMethod::Get, "/v1/cache/ns/:namespace/:key/exists"),
        exists,
    ),
    RouteEntry::with_aliases(
        "cache.invalidate",
        RouteMethod::Delete,
        "/cache/ns/:namespace/:key",
        cache_aliases!(RouteMethod::Delete, "/v1/cache/ns/:namespace/:key"),
        invalidate,
    ),
    RouteEntry::with_aliases(
        "cache.invalidate_prefix",
        RouteMethod::Delete,
        "/cache/ns/:namespace",
        cache_aliases!(RouteMethod::Delete, "/v1/cache/ns/:namespace"),
        invalidate_prefix,
    ),
    RouteEntry::with_aliases(
        "cache.invalidate_tags",
        RouteMethod::Post,
        "/cache/ns/:namespace/invalidate-tags",
        cache_aliases!(RouteMethod::Post, "/v1/cache/ns/:namespace/invalidate-tags"),
        invalidate_tags,
    ),
    RouteEntry::with_aliases(
        "cache.flush_namespace",
        RouteMethod::Post,
        "/cache/ns/:namespace/flush",
        cache_aliases!(RouteMethod::Post, "/v1/cache/ns/:namespace/flush"),
        flush,
    ),
];

pub(crate) fn register(registry: &mut RouteRegistry) {
    registry.routes(CACHE_USER, CACHE_ROUTES);
}

macro_rules! cache_handler {
    ($name:ident, $operation:literal, $capability:literal) => {
        fn $name(server: &RedDBServer, request: &RouteRequest<'_>) -> Option<HttpResponse> {
            Some(server.handle_cache(request, $operation, $capability))
        }
    };
}

cache_handler!(get, "get", "cache:read");
cache_handler!(put, "put", "cache:write");
cache_handler!(exists, "exists", "cache:read");
cache_handler!(invalidate, "invalidate", "cache:invalidate");
cache_handler!(invalidate_prefix, "invalidate_prefix", "cache:invalidate");
cache_handler!(invalidate_tags, "invalidate_tags", "cache:invalidate");
cache_handler!(flush, "flush", "cache:invalidate");