schema-registry-client 0.4.2

Serialize/deserialize data to/from Kafka using the Confluent Schema Registry
Documentation
use crate::serdes::serde::{
    SchemaIdDeserializer, SchemaIdSerializer, SubjectNameStrategyType, dual_schema_id_deserializer,
    prefix_schema_id_serializer,
};
use std::collections::HashMap;

#[derive(Clone, Debug)]
pub enum SchemaSelector {
    SchemaId(i32),
    LatestVersion,
    LatestWithMetadata(HashMap<String, String>),
}

#[derive(Clone, Debug)]
pub struct SerializerConfig {
    pub auto_register_schemas: bool,
    pub use_schema: Option<SchemaSelector>,
    pub normalize_schemas: bool,
    pub validate: bool,
    pub rule_config: HashMap<String, String>,
    pub subject_name_strategy_type: SubjectNameStrategyType,
    pub strategy_config: HashMap<String, String>,
    pub schema_id_serializer: SchemaIdSerializer,
}

impl SerializerConfig {
    pub fn new(
        auto_register_schemas: bool,
        use_schema: Option<SchemaSelector>,
        normalize_schemas: bool,
        validate: bool,
        rule_config: HashMap<String, String>,
    ) -> SerializerConfig {
        SerializerConfig {
            auto_register_schemas,
            use_schema,
            normalize_schemas,
            validate,
            rule_config,
            subject_name_strategy_type: SubjectNameStrategyType::Associated,
            strategy_config: HashMap::new(),
            schema_id_serializer: prefix_schema_id_serializer,
        }
    }
}

impl Default for SerializerConfig {
    fn default() -> SerializerConfig {
        SerializerConfig {
            auto_register_schemas: true,
            use_schema: None,
            normalize_schemas: false,
            validate: false,
            rule_config: HashMap::new(),
            subject_name_strategy_type: SubjectNameStrategyType::Associated,
            strategy_config: HashMap::new(),
            schema_id_serializer: prefix_schema_id_serializer,
        }
    }
}

#[derive(Clone, Debug)]
pub struct DeserializerConfig {
    pub use_schema: Option<SchemaSelector>,
    pub validate: bool,
    pub rule_config: HashMap<String, String>,
    pub subject_name_strategy_type: SubjectNameStrategyType,
    pub strategy_config: HashMap<String, String>,
    pub schema_id_deserializer: SchemaIdDeserializer,
}

impl DeserializerConfig {
    pub fn new(
        use_schema: Option<SchemaSelector>,
        validate: bool,
        rule_config: HashMap<String, String>,
    ) -> DeserializerConfig {
        DeserializerConfig {
            use_schema,
            validate,
            rule_config,
            subject_name_strategy_type: SubjectNameStrategyType::Associated,
            strategy_config: HashMap::new(),
            schema_id_deserializer: dual_schema_id_deserializer,
        }
    }
}

impl Default for DeserializerConfig {
    fn default() -> DeserializerConfig {
        DeserializerConfig {
            use_schema: None,
            validate: false,
            rule_config: HashMap::new(),
            subject_name_strategy_type: SubjectNameStrategyType::Associated,
            strategy_config: HashMap::new(),
            schema_id_deserializer: dual_schema_id_deserializer,
        }
    }
}