1use crate::{CommandGroup, Runnable};
2use clap::Parser;
3
4mod chunk_recover;
5mod clear_ino_cache;
6mod clear_space_cache;
7mod clear_uuid_tree;
8mod create_control_device;
9mod fix_data_checksum;
10mod fix_device_size;
11mod super_recover;
12mod zero_log;
13
14pub use self::{
15 chunk_recover::*, clear_ino_cache::*, clear_space_cache::*,
16 clear_uuid_tree::*, create_control_device::*, fix_data_checksum::*,
17 fix_device_size::*, super_recover::*, zero_log::*,
18};
19
20#[derive(Parser, Debug)]
27#[allow(clippy::doc_markdown)]
28#[clap(arg_required_else_help = true)]
29pub struct RescueCommand {
30 #[clap(subcommand)]
31 pub subcommand: RescueSubcommand,
32}
33
34impl CommandGroup for RescueCommand {
35 fn leaf(&self) -> &dyn Runnable {
36 match &self.subcommand {
37 RescueSubcommand::ChunkRecover(cmd) => cmd,
38 RescueSubcommand::SuperRecover(cmd) => cmd,
39 RescueSubcommand::ZeroLog(cmd) => cmd,
40 RescueSubcommand::FixDeviceSize(cmd) => cmd,
41 RescueSubcommand::FixDataChecksum(cmd) => cmd,
42 RescueSubcommand::CreateControlDevice(cmd) => cmd,
43 RescueSubcommand::ClearInoCache(cmd) => cmd,
44 RescueSubcommand::ClearSpaceCache(cmd) => cmd,
45 RescueSubcommand::ClearUuidTree(cmd) => cmd,
46 }
47 }
48}
49
50#[derive(Parser, Debug)]
51pub enum RescueSubcommand {
52 ChunkRecover(RescueChunkRecoverCommand),
53 SuperRecover(RescueSuperRecoverCommand),
54 ZeroLog(RescueZeroLogCommand),
55 FixDeviceSize(RescueFixDeviceSizeCommand),
56 FixDataChecksum(RescueFixDataChecksumCommand),
57 CreateControlDevice(RescueCreateControlDeviceCommand),
58 ClearInoCache(RescueClearInoCacheCommand),
59 ClearSpaceCache(RescueClearSpaceCacheCommand),
60 ClearUuidTree(RescueClearUuidTreeCommand),
61}