schema_registry_cli/settings/
schema.rs

1use clap::{Args, Subcommand};
2use schema_registry_api::{SchemaId, SubjectName};
3
4use crate::SchemaRegistrySettings;
5
6/// Subject commands
7#[derive(Debug, Clone, PartialEq, Subcommand)]
8pub enum SchemaSubCommand {
9    /// List subjects
10    Get(GetSchema),
11    // TODO types, versions
12}
13
14/// Get a schema by id
15#[derive(Debug, Clone, PartialEq, Args)]
16pub struct GetSchema {
17    /// The schema registry
18    #[clap(flatten)]
19    pub schema_registry: SchemaRegistrySettings,
20
21    /// A subject name
22    #[clap(short, long)]
23    pub subject: Option<SubjectName>,
24
25    /// The schema id
26    pub id: SchemaId,
27}
28
29#[cfg(test)]
30mod tests {
31    use assert2::check;
32    use clap::Parser;
33
34    use crate::settings::DEFAULT_SCHEMA_REGISTRY_URL;
35
36    use super::*;
37
38    #[derive(Debug, Parser)]
39    struct JustSchema {
40        #[clap(subcommand)]
41        command: SchemaSubCommand,
42    }
43
44    #[rstest::rstest]
45    #[case(&["bin", "get", "42"], SchemaSubCommand::Get(GetSchema { 
46        schema_registry: SchemaRegistrySettings {
47            url: DEFAULT_SCHEMA_REGISTRY_URL.parse().unwrap(),
48        },
49        subject: None,
50        id: SchemaId::from(42),
51    }))]
52    #[case(&["bin", "get", "--subject", "plop", "42"], SchemaSubCommand::Get(GetSchema { 
53        schema_registry: SchemaRegistrySettings {
54            url: DEFAULT_SCHEMA_REGISTRY_URL.parse().unwrap(),
55        },
56        subject: Some("plop".parse().unwrap()), 
57        id: SchemaId::from(42),
58    }))]
59    #[case(&["bin", "get", "42", "-s", "plop"], SchemaSubCommand::Get(GetSchema { 
60        schema_registry: SchemaRegistrySettings {
61            url: DEFAULT_SCHEMA_REGISTRY_URL.parse().unwrap(),
62        },
63        subject: Some("plop".parse().unwrap()), 
64        id: SchemaId::from(42),
65    }))]
66    fn should_parse_schema(#[case] args: &[&str], #[case] expected: SchemaSubCommand) {
67        let result = JustSchema::parse_from(args);
68        check!(result.command == expected);
69    }
70}