use clap::Parser;
use datafold::{constants::DEFAULT_SCHEMA_SERVICE_PORT, schema_service::SchemaServiceServer};
#[cfg(feature = "aws-backend")]
use datafold::storage::DynamoDbConfig;
#[derive(Parser, Debug)]
#[command(author, version, about)]
struct Cli {
#[arg(long, default_value_t = DEFAULT_SCHEMA_SERVICE_PORT)]
port: u16,
#[arg(long, default_value = "schema_registry")]
db_path: String,
}
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
datafold::logging::LoggingSystem::init_default().await.ok();
let Cli { port, db_path } = Cli::parse();
let bind_address = format!("127.0.0.1:{}", port);
#[cfg(feature = "aws-backend")]
let server = if let Ok(dynamodb_config) = DynamoDbConfig::from_env() {
println!("🚀 Schema service starting with DynamoDB storage");
println!(
" Tables: {} (main), {} (schemas), etc.",
dynamodb_config.tables.main, dynamodb_config.tables.schemas
);
println!(" Region: {}", dynamodb_config.region);
println!(" ✨ No locking needed - topology hashes ensure idempotent writes!");
SchemaServiceServer::new_with_dynamodb(dynamodb_config, &bind_address).await?
} else {
println!("🚀 Schema service starting with local sled storage");
println!(" Database path: {}", db_path);
SchemaServiceServer::new(db_path, &bind_address)?
};
#[cfg(not(feature = "aws-backend"))]
let server = {
println!("🚀 Schema service starting with local sled storage");
println!(" Database path: {}", db_path);
SchemaServiceServer::new(db_path, &bind_address)?
};
println!("✅ Schema service listening on {}", bind_address);
server
.run()
.await
.map_err(|e| Box::new(e) as Box<dyn std::error::Error>)
}
#[cfg(test)]
mod tests {
use super::Cli;
use clap::Parser;
use datafold::constants::DEFAULT_SCHEMA_SERVICE_PORT;
#[test]
fn defaults() {
let cli = Cli::parse_from(["test"]);
assert_eq!(cli.port, DEFAULT_SCHEMA_SERVICE_PORT);
assert_eq!(cli.db_path, "schema_registry");
}
#[test]
fn custom_args() {
let cli = Cli::parse_from(["test", "--port", "8000", "--db-path", "my_schema_db"]);
assert_eq!(cli.port, 8000);
assert_eq!(cli.db_path, "my_schema_db");
}
}