cargo_tangle/command/create/
types.rs

1use clap::{Args, ValueEnum};
2
3#[derive(Debug, Clone, Args)]
4pub struct CreateArgs {
5    /// The name of the blueprint
6    #[arg(short, long, value_name = "NAME", env = "NAME")]
7    pub name: String,
8
9    #[command(flatten)]
10    pub blueprint_type: BlueprintType,
11}
12
13#[derive(Debug, Clone, Args, Default)]
14#[group(required = false, multiple = false)]
15pub struct BlueprintType {
16    /// Create a Tangle blueprint
17    #[arg(long, conflicts_with = "eigenlayer")]
18    pub tangle: bool,
19
20    /// Create an EigenLayer blueprint
21    #[arg(long, value_name = "VARIANT", value_enum, num_args = 0..=1, default_value = "bls")]
22    pub eigenlayer: Option<EigenlayerVariant>,
23}
24
25#[derive(Debug, Default, Clone, Copy, ValueEnum)]
26pub enum EigenlayerVariant {
27    #[default]
28    BLS,
29    ECDSA,
30}
31
32impl BlueprintType {
33    pub fn get_type(&self) -> Option<BlueprintVariant> {
34        if self.eigenlayer.is_some() {
35            self.eigenlayer.map(BlueprintVariant::Eigenlayer)
36        } else if self.tangle {
37            Some(BlueprintVariant::Tangle)
38        } else {
39            None
40        }
41    }
42}
43
44#[derive(Debug, Clone)]
45pub enum BlueprintVariant {
46    Tangle,
47    Eigenlayer(EigenlayerVariant),
48}