#![forbid(unsafe_code)]
use clap::{Parser, Subcommand};
mod cli;
#[allow(unused_imports)]
use entropyfs::{
cache, core, dsfb, entropy, evidence, format, fsck, fuse, integrity, optimizer, platform, rans,
store, ublk,
};
#[derive(Parser)]
#[command(
name = "entropyfs",
version,
about = "Entropy-native Linux filesystem: persist irreducible state, materialize structure, preserve exact bytes",
long_about = None
)]
struct Cli {
#[command(subcommand)]
command: Command,
}
#[derive(Subcommand)]
enum Command {
Mkfs(cli::mkfs::MkfsArgs),
Mount(cli::mount::MountArgs),
Unmount(cli::unmount::UnmountArgs),
Status(cli::status::StatusArgs),
Inspect(cli::inspect::InspectArgs),
Explain(cli::explain::ExplainArgs),
Snapshot {
#[command(subcommand)]
action: SnapshotAction,
},
Snapshots(cli::snapshot::SnapshotsArgs),
Fsck(cli::fsck::FsckArgs),
Scrub(cli::fsck::ScrubArgs),
Gc(cli::gc::GcArgs),
Optimize(cli::optimize::OptimizeArgs),
Benchmark(cli::benchmark::BenchmarkArgs),
Capabilities,
Ublk {
#[command(subcommand)]
action: UblkAction,
},
}
#[derive(Subcommand)]
enum UblkAction {
Run(cli::ublk::UblkRunArgs),
Bench(cli::ublk::UblkBenchArgs),
}
#[derive(Subcommand)]
enum SnapshotAction {
Create(cli::snapshot::SnapshotCreateArgs),
Delete(cli::snapshot::SnapshotDeleteArgs),
Restore(cli::snapshot::SnapshotRestoreArgs),
}
fn main() {
let cli = Cli::parse();
let result = match &cli.command {
Command::Mkfs(a) => cli::mkfs::run(a),
Command::Mount(a) => cli::mount::run(a),
Command::Unmount(a) => cli::unmount::run(a),
Command::Status(a) => cli::status::run(a),
Command::Inspect(a) => cli::inspect::run(a),
Command::Explain(a) => cli::explain::run(a),
Command::Snapshot { action } => match action {
SnapshotAction::Create(a) => cli::snapshot::run_create(a),
SnapshotAction::Delete(a) => cli::snapshot::run_delete(a),
SnapshotAction::Restore(a) => cli::snapshot::run_restore(a),
},
Command::Snapshots(a) => cli::snapshot::run_list(a),
Command::Fsck(a) => cli::fsck::run_fsck(a),
Command::Scrub(a) => cli::fsck::run_scrub(a),
Command::Gc(a) => cli::gc::run(a),
Command::Optimize(a) => cli::optimize::run(a),
Command::Benchmark(a) => cli::benchmark::run(a),
Command::Capabilities => cli::capabilities::run(),
Command::Ublk { action } => match action {
UblkAction::Run(a) => cli::ublk::run(a),
UblkAction::Bench(a) => cli::ublk::bench(a),
},
};
if let Err(e) = result {
eprintln!("entropyfs: {e}");
std::process::exit(1);
}
}