mod build; mod command; mod forward; mod image; mod inject; mod qemu; mod registry; use anyhow::Result; use clap::{Parser, Subcommand}; use crate::{build::BuildCmd, image::ImageCmd, qemu::RunCmd}; #[derive(Parser, Debug)] #[command(about = "Turn containers into bootable VMs")] struct Cli { #[command(subcommand)] command: Commands, } #[derive(Subcommand, Debug)] enum Commands { /// Build initrd from an image (podman image must exist) Build(BuildCmd), /// Launch a previously built VM via QEMU. Run(RunCmd), /// List slim images in the registry #[command(subcommand)] Image(ImageCmd), } fn main() -> Result<()> { let cli = Cli::parse(); match cli.command { Commands::Build(cmd) => { build::build(cmd)?; } Commands::Run(cmd) => { qemu::run(cmd)?; } Commands::Image(cmd) => { image::run(cmd)?; } } Ok(()) }