1use clap::Parser;
2use uuid::Uuid;
3
4#[derive(Debug, Parser, PartialEq, Eq)]
5#[command(arg_required_else_help = true, about, version)]
6pub struct Args {
7 #[clap(subcommand)]
8 pub subcommand: Option<Subcommand>,
9}
10
11#[derive(Debug, Parser, PartialEq, Eq)]
12pub enum Subcommand {
13 #[clap(subcommand)]
14 Generate(GenerateSubcommand),
15
16 Validate {
17 #[clap(long)]
18 uuid: String,
19 },
20}
21
22#[derive(Debug, Parser, PartialEq, Eq)]
23pub enum GenerateSubcommand {
24 Version {
25 #[clap(subcommand)]
26 version: GenerateSubcommandVersion,
27 },
28}
29
30#[derive(Debug, Parser, PartialEq, Eq)]
31pub enum GenerateSubcommandVersion {
32 #[clap(about = "Generate a UUID using a timestamp and monotonic counter")]
33 V1 {
34 #[clap(long)]
35 seconds: u64,
36 #[clap(long)]
37 nanos: u32,
38 #[clap(long, help = "Use provided seed, if not present use random one")]
39 seed: Option<u16>,
40 },
41 V2,
42 #[clap(about = "Generate a UUID using a md5 hash")]
43 V3 {
44 #[clap(long)]
45 namespace: Uuid,
46 #[clap(long)]
47 name: String,
48 },
49 #[clap(about = "Generate random UUID")]
50 V4,
51 #[clap(about = "Generate a UUID using a sha1 hash")]
52 V5 {
53 #[clap(long)]
54 namespace: Uuid,
55 #[clap(long)]
56 name: String,
57 },
58 #[clap(about = "Generate a UUID using provided data")]
59 V8 {
60 #[clap(long)]
61 data: String,
62 },
63}