pub mod convert;
pub mod dump;
pub mod hexdump;
pub mod ls;
pub mod ui;
use std::process::exit;
use anyhow::Result as AnyResult;
use clap::{Parser, Subcommand, ValueEnum};
#[cfg(not(feature = "hotpath-alloc"))]
#[global_allocator]
static GLOBAL: mimalloc::MiMalloc = mimalloc::MiMalloc;
use crate::convert::{ConvertArgs, convert};
use crate::dump::{AfterDump, DumpArgs, dump};
use crate::hexdump::{HexdumpArgs, hexdump};
use crate::ls::{LsArgs, ls};
use crate::ui::{UiArgs, ui};
#[hotpath::main]
fn main() -> AnyResult<()> {
match Cli::parse().command {
Commands::Convert(args) => convert(&args)?,
Commands::Dump(args) => dump(&args, AfterDump::KeepRaw)?,
Commands::Decode(args) => dump(&args, AfterDump::Decode)?,
Commands::Hexdump(args) => hexdump(&args)?,
Commands::Ls(args) => {
if !ls(&args)? {
exit(1)
}
}
Commands::Ui(args) => ui(&args)?,
}
Ok(())
}
#[derive(Parser)]
#[command(name = "mlt", about = "MapLibre Tile format utilities")]
#[command(version = env!("CARGO_PKG_VERSION"))]
struct Cli {
#[command(subcommand)]
command: Commands,
}
#[derive(Subcommand)]
enum Commands {
Convert(ConvertArgs),
Dump(DumpArgs),
Decode(DumpArgs),
Hexdump(HexdumpArgs),
Ls(LsArgs),
Ui(UiArgs),
}
#[derive(Clone, Default, ValueEnum)]
enum OutputFormat {
#[default]
Text,
#[clap(alias = "geojson")]
GeoJson,
}