1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
mod external;
mod perf;
mod random;

use crate::Result;
pub use external::ExternalDataCommandArgs;
pub use jormungandr_lib::interfaces::Initial;
pub use perf::PerfDataCommandArgs;
pub use random::{
    AllRandomDataCommandArgs, RandomReviewsDataCommandArgs, RandomScoresDataCommandArgs,
};

use clap::Parser;

#[derive(Parser, Debug)]
pub enum DataCommandArgs {
    /// generate data from external data
    Import(ExternalDataCommandArgs),
    /// generate random data
    #[clap(subcommand)]
    Random(RandomDataCommandArgs),
    /// generate data for performance tests
    Perf(PerfDataCommandArgs),
}

impl DataCommandArgs {
    pub fn exec(self) -> Result<()> {
        match self {
            Self::Import(import_command) => import_command.exec(),
            Self::Random(random_command) => random_command.exec(),
            Self::Perf(perf_command) => perf_command.exec(),
        }
    }
}

#[derive(Parser, Debug)]
pub enum RandomDataCommandArgs {
    /// generate all random data
    All(AllRandomDataCommandArgs),
    /// generate reviews random data
    Reviews(RandomReviewsDataCommandArgs),
    /// generate reviews random data
    Scores(RandomScoresDataCommandArgs),
}

impl RandomDataCommandArgs {
    pub fn exec(self) -> Result<()> {
        match self {
            Self::All(all_data_command) => all_data_command.exec(),
            Self::Reviews(reviews_random_command) => reviews_random_command.exec(),
            Self::Scores(scores_random_command) => scores_random_command.exec(),
        }
    }
}