schema_registry_cli/settings/
schema.rs1use clap::{Args, Subcommand};
2use schema_registry_api::{SchemaId, SubjectName};
3
4use crate::SchemaRegistrySettings;
5
6#[derive(Debug, Clone, PartialEq, Subcommand)]
8pub enum SchemaSubCommand {
9 Get(GetSchema),
11 }
13
14#[derive(Debug, Clone, PartialEq, Args)]
16pub struct GetSchema {
17 #[clap(flatten)]
19 pub schema_registry: SchemaRegistrySettings,
20
21 #[clap(short, long)]
23 pub subject: Option<SubjectName>,
24
25 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}