flatland3 0.2.12

Flatland3 terminal play client and account CLI
Documentation
//! Gfx sprite asset sync (delegates to flatland-client-lib).

use clap::Subcommand;
use flatland_client_lib::{read_local_state, sync_assets, AssetSyncKind, AssetSyncOptions};

#[derive(Debug, Subcommand)]
pub enum AssetsCommand {
    /// Fetch the latest published sprite bundle from Firebase
    Sync {
        #[arg(long)]
        rev: Option<u64>,
        #[arg(long, env = "FLATLAND_ASSETS_INDEX_URL")]
        index_url: Option<String>,
    },
    /// Show local synced asset state
    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(())
        }
    }
}