backbone-mail 0.2.32

Odoo mail core port — message/notification/followers/activity/alias/sms queue (schema: messaging)
//! Version-aware Routing
//!
//! Generated by metaphor-schema. Do not edit manually.
//!
//! Provides helpers for version-aware routing.

use axum::{
    Router,
    routing::{get, post, put, patch, delete},
};
use super::version::ApiVersion;

// =============================================================================
// Version Router Builder
// =============================================================================

/// Builder for creating versioned API routes
pub struct VersionedRouter<S = ()> {
    base_path: String,
    routers: Vec<(ApiVersion, Router<S>)>,
}

impl<S: Clone + Send + Sync + 'static> VersionedRouter<S> {
    /// Create a new versioned router with base path
    pub fn new(base_path: impl Into<String>) -> Self {
        Self {
            base_path: base_path.into(),
            routers: Vec::new(),
        }
    }

    /// Add routes for a specific version
    pub fn version(mut self, version: ApiVersion, router: Router<S>) -> Self {
        self.routers.push((version, router));
        self
    }

    /// Build the final router with all versions
    pub fn build(self) -> Router<S> {
        let mut router = Router::new();
        
        for (version, version_router) in self.routers {
            let path = format!("{}/{}", self.base_path, version.as_str());
            router = router.nest(&path, version_router);
        }
        
        router
    }
}

// =============================================================================
// Helper Functions
// =============================================================================

/// Create a versioned path from base path and version
pub fn versioned_path(base: &str, version: ApiVersion) -> String {
    format!("{}/{}", base, version.as_str())
}

/// Create a versioned path with resource
pub fn versioned_resource_path(base: &str, version: ApiVersion, resource: &str) -> String {
    format!("{}/{}/{}", base, version.as_str(), resource)
}