use std::sync::Arc;
use async_trait::async_trait;
use nisshi_storage::{
ArcDynStorage, Result, StorageFactory, StorageFactoryConfiguration, reject_unrecognized_options,
};
use regex::Regex;
use super::Engine;
#[derive(Clone, Copy, Debug)]
pub struct LimboFactory;
#[async_trait]
impl StorageFactory for LimboFactory {
fn scheme(&self) -> Result<Regex> {
Regex::new(r"turso").map_err(Into::into)
}
async fn build(&self, configuration: StorageFactoryConfiguration) -> Result<ArcDynStorage> {
reject_unrecognized_options(&configuration.storage, &[])?;
Engine::builder()
.storage(configuration.storage)
.node(configuration.node_id)
.cluster(configuration.cluster)
.advertised_listener(configuration.advertised_listener)
.schemas(configuration.schema_registry)
.lake(configuration.lake_house)
.build()
.await
.map(Box::new)
.map(|storage| Arc::new(storage) as ArcDynStorage)
}
}