use clap::Subcommand;
use flatland_client_lib::{read_local_state, sync_assets, AssetSyncKind, AssetSyncOptions};
#[derive(Debug, Subcommand)]
pub enum AssetsCommand {
Sync {
#[arg(long)]
rev: Option<u64>,
#[arg(long, env = "FLATLAND_ASSETS_INDEX_URL")]
index_url: Option<String>,
},
Status,
}
pub async fn run(command: AssetsCommand) -> anyhow::Result<()> {
match command {
AssetsCommand::Sync { rev, index_url } => {
let mut opts = AssetSyncOptions::default();
opts.target_rev = rev;
if let Some(url) = index_url {
opts.index_url = url;
}
opts.quiet = false;
let result = sync_assets(opts).await?;
if matches!(result.kind, AssetSyncKind::Remote) {
println!("publish_rev: {}", result.state.publish_rev);
println!("sprites_dir: {}", result.state.sprites_dir.display());
} else {
println!("sprites_dir: {}", result.state.sprites_dir.display());
println!("note: remote bundle not published (using local sprites)");
}
Ok(())
}
AssetsCommand::Status => {
match read_local_state() {
Some(state) => {
println!("publish_rev: {}", state.publish_rev);
println!("sprites_dir: {}", state.sprites_dir.display());
}
None => println!("No synced assets — run: flatland3 assets sync"),
}
Ok(())
}
}
}