mecha10-core 0.6.2

Mecha10 core runtime and foundational types
Documentation
//! `SchemaRegistryExt`: the Redis-backed schema registry API.

use super::MessageSchema;
use crate::error::Result;

/// Schema registry extension trait for Context
pub trait SchemaRegistryExt {
    /// Register a schema in the registry
    ///
    /// # Arguments
    ///
    /// * `schema` - Schema to register
    ///
    /// # Example
    ///
    /// ```rust
    /// use mecha10::prelude::*;
    /// use mecha10::schema::{SchemaRegistryExt, MessageSchema};
    ///
    /// # async fn example(ctx: &Context) -> Result<()> {
    /// let schema = MessageSchema::new("LaserScan", 1)
    ///     .with_description("2D laser scan data")
    ///     .with_field("timestamp", "integer", true)
    ///     .with_field("ranges", "array", true);
    ///
    /// ctx.register_schema(&schema).await?;
    /// # Ok(())
    /// # }
    /// ```
    fn register_schema(&self, schema: &MessageSchema) -> impl std::future::Future<Output = Result<()>> + Send;

    /// Get a specific version of a schema
    ///
    /// # Arguments
    ///
    /// * `name` - Schema name
    /// * `version` - Schema version
    fn get_schema(
        &self,
        name: &str,
        version: u32,
    ) -> impl std::future::Future<Output = Result<Option<MessageSchema>>> + Send;

    /// Get the latest version of a schema
    ///
    /// # Arguments
    ///
    /// * `name` - Schema name
    fn get_latest_schema(&self, name: &str) -> impl std::future::Future<Output = Result<Option<MessageSchema>>> + Send;

    /// List all registered schemas (returns latest version of each)
    fn list_schemas(&self) -> impl std::future::Future<Output = Result<Vec<MessageSchema>>> + Send;

    /// Get all versions of a schema
    ///
    /// # Arguments
    ///
    /// * `name` - Schema name
    fn get_schema_versions(&self, name: &str) -> impl std::future::Future<Output = Result<Vec<MessageSchema>>> + Send;

    /// Delete a schema version
    ///
    /// # Arguments
    ///
    /// * `name` - Schema name
    /// * `version` - Schema version (if None, deletes all versions)
    fn delete_schema(&self, name: &str, version: Option<u32>) -> impl std::future::Future<Output = Result<()>> + Send;
}

// The `impl SchemaRegistryExt for Context` block lives in `registry_impl.rs`
// to keep the trait's public API and its Redis-backed implementation in
// separately readable files.