1use crate::{Format, Runnable};
2use anyhow::Result;
3use clap::Parser;
4
5mod chunk_recover;
6mod clear_ino_cache;
7mod clear_space_cache;
8mod clear_uuid_tree;
9mod create_control_device;
10mod fix_data_checksum;
11mod fix_device_size;
12mod super_recover;
13mod zero_log;
14
15use chunk_recover::RescueChunkRecoverCommand;
16use clear_ino_cache::RescueClearInoCacheCommand;
17use clear_space_cache::RescueClearSpaceCacheCommand;
18use clear_uuid_tree::RescueClearUuidTreeCommand;
19use create_control_device::RescueCreateControlDeviceCommand;
20use fix_data_checksum::RescueFixDataChecksumCommand;
21use fix_device_size::RescueFixDeviceSizeCommand;
22use super_recover::RescueSuperRecoverCommand;
23use zero_log::RescueZeroLogCommand;
24
25#[derive(Parser, Debug)]
32pub struct RescueCommand {
33 #[clap(subcommand)]
34 pub subcommand: RescueSubcommand,
35}
36
37impl Runnable for RescueCommand {
38 fn run(&self, format: Format, dry_run: bool) -> Result<()> {
39 match &self.subcommand {
40 RescueSubcommand::ChunkRecover(cmd) => cmd.run(format, dry_run),
41 RescueSubcommand::SuperRecover(cmd) => cmd.run(format, dry_run),
42 RescueSubcommand::ZeroLog(cmd) => cmd.run(format, dry_run),
43 RescueSubcommand::FixDeviceSize(cmd) => cmd.run(format, dry_run),
44 RescueSubcommand::FixDataChecksum(cmd) => cmd.run(format, dry_run),
45 RescueSubcommand::CreateControlDevice(cmd) => cmd.run(format, dry_run),
46 RescueSubcommand::ClearInoCache(cmd) => cmd.run(format, dry_run),
47 RescueSubcommand::ClearSpaceCache(cmd) => cmd.run(format, dry_run),
48 RescueSubcommand::ClearUuidTree(cmd) => cmd.run(format, dry_run),
49 }
50 }
51}
52
53#[derive(Parser, Debug)]
54pub enum RescueSubcommand {
55 ChunkRecover(RescueChunkRecoverCommand),
56 SuperRecover(RescueSuperRecoverCommand),
57 ZeroLog(RescueZeroLogCommand),
58 FixDeviceSize(RescueFixDeviceSizeCommand),
59 FixDataChecksum(RescueFixDataChecksumCommand),
60 CreateControlDevice(RescueCreateControlDeviceCommand),
61 ClearInoCache(RescueClearInoCacheCommand),
62 ClearSpaceCache(RescueClearSpaceCacheCommand),
63 ClearUuidTree(RescueClearUuidTreeCommand),
64}