datasources 0.1.5

Async datasource interfaces, middleware, registry, and test doubles
Documentation
use crate::converters::{RowTypeConverter, TypeConverter};
use crate::mappers::Mapper;
use crate::row::Row;
use crate::value::Value;
use std::collections::HashMap;
use std::sync::Arc;

pub struct ReadonlyRepositoryMappingOptions {
    pub entity: String,
    pub entity_mapper: Option<Arc<dyn Mapper<String, String> + Send + Sync>>,
    pub property_mappings: Option<Arc<dyn Mapper<String, String> + Send + Sync>>,
    pub read_properties: Vec<String>,
    pub row_converter: Option<RowTypeConverter>,
    pub object_converter: Option<Box<dyn TypeConverter<Row, Row> + Send + Sync>>,
    pub row_type_converters: HashMap<String, Box<dyn TypeConverter<Value, Value> + Send + Sync>>,
}

impl Clone for ReadonlyRepositoryMappingOptions {
    fn clone(&self) -> Self {
        Self {
            entity: self.entity.clone(),
            entity_mapper: self.entity_mapper.clone(),
            property_mappings: self.property_mappings.clone(),
            read_properties: self.read_properties.clone(),
            row_converter: self.row_converter.clone(),
            object_converter: None,
            row_type_converters: HashMap::new(),
        }
    }
}

impl Default for ReadonlyRepositoryMappingOptions {
    fn default() -> Self {
        Self {
            entity: "items".into(),
            entity_mapper: None,
            property_mappings: None,
            read_properties: Vec::new(),
            row_converter: None,
            object_converter: None,
            row_type_converters: HashMap::new(),
        }
    }
}