feat: add basic cli

This commit is contained in:
2025-02-12 21:15:46 +01:00
parent fefa3647a4
commit cdab2e1c25
5 changed files with 592 additions and 3 deletions

View File

@@ -12,3 +12,6 @@ clap.workspace = true
dotenvy.workspace = true
serde.workspace = true
uuid.workspace = true
rusty-s3 = "0.7.0"
url = "2.5.4"

View File

@@ -1,6 +1,7 @@
use std::net::SocketAddr;
use clap::{Parser, Subcommand};
use rusty_s3::{Bucket, Credentials, S3Action};
use crate::state::SharedState;
@@ -16,14 +17,48 @@ enum Commands {
Serve {
#[arg(env = "FOREST_HOST", long, default_value = "127.0.0.1:3000")]
host: SocketAddr,
#[arg(env = "FOREST_S3_ENDPOINT", long = "s3-endpoint")]
s3_endpoint: String,
#[arg(env = "FOREST_S3_REGION", long = "s3-region")]
s3_region: String,
#[arg(env = "FOREST_S3_BUCKET", long = "s3-bucket")]
s3_bucket: String,
#[arg(env = "FOREST_S3_USER", long = "s3-user")]
s3_user: String,
#[arg(env = "FOREST_S3_PASSWORD", long = "s3-password")]
s3_password: String,
},
}
pub async fn execute() -> anyhow::Result<()> {
let cli = Command::parse();
if let Some(Commands::Serve { .. }) = cli.command {
tracing::info!("Starting forest server");
if let Some(Commands::Serve {
host,
s3_endpoint,
s3_bucket,
s3_region,
s3_user,
s3_password,
}) = cli.command
{
tracing::info!("Starting server");
let creds = Credentials::new(s3_user, s3_password);
let bucket = Bucket::new(
url::Url::parse(&s3_endpoint)?,
rusty_s3::UrlStyle::Path,
s3_bucket,
s3_region,
)?;
let put_object = bucket.put_object(Some(&creds), "some-object");
put_object.sign(expires_in)
let state = SharedState::new().await?;
}