use crate::args::common::ListMode;
use clap::{Args, Subcommand};
use iggy::prelude::{CompressionAlgorithm, Identifier, IggyExpiry, MaxTopicSize};
#[derive(Debug, Clone, Subcommand)]
pub(crate) enum TopicAction {
#[clap(verbatim_doc_comment, visible_alias = "c")]
Create(TopicCreateArgs),
#[clap(verbatim_doc_comment, visible_alias = "d")]
Delete(TopicDeleteArgs),
#[clap(verbatim_doc_comment, visible_alias = "u")]
Update(TopicUpdateArgs),
#[clap(verbatim_doc_comment, visible_alias = "g")]
Get(TopicGetArgs),
#[clap(verbatim_doc_comment, visible_alias = "l")]
List(TopicListArgs),
#[clap(verbatim_doc_comment, visible_alias = "p")]
Purge(TopicPurgeArgs),
}
#[derive(Debug, Clone, Args)]
pub(crate) struct TopicCreateArgs {
#[arg(value_parser = clap::value_parser!(Identifier))]
pub(crate) stream_id: Identifier,
pub(crate) name: String,
#[clap(short, long)]
pub(crate) topic_id: Option<u32>,
pub(crate) partitions_count: u32,
#[arg(value_parser = clap::value_parser!(CompressionAlgorithm), verbatim_doc_comment)]
pub(crate) compression_algorithm: CompressionAlgorithm,
#[arg(short, long, default_value = "server_default", verbatim_doc_comment)]
pub(crate) max_topic_size: MaxTopicSize,
#[arg(short, long, default_value = "1")]
pub(crate) replication_factor: u8,
#[arg(default_value = "server_default", value_parser = clap::value_parser!(IggyExpiry), verbatim_doc_comment)]
pub(crate) message_expiry: Vec<IggyExpiry>,
}
#[derive(Debug, Clone, Args)]
pub(crate) struct TopicDeleteArgs {
#[arg(value_parser = clap::value_parser!(Identifier))]
pub(crate) stream_id: Identifier,
#[arg(value_parser = clap::value_parser!(Identifier))]
pub(crate) topic_id: Identifier,
}
#[derive(Debug, Clone, Args)]
pub(crate) struct TopicUpdateArgs {
#[arg(value_parser = clap::value_parser!(Identifier))]
pub(crate) stream_id: Identifier,
#[arg(value_parser = clap::value_parser!(Identifier))]
pub(crate) topic_id: Identifier,
pub(crate) name: String,
#[arg(value_parser = clap::value_parser!(CompressionAlgorithm), verbatim_doc_comment)]
pub(crate) compression_algorithm: CompressionAlgorithm,
#[arg(short, long, default_value = "server_default", verbatim_doc_comment)]
pub(crate) max_topic_size: MaxTopicSize,
#[arg(short, long, default_value = "1")]
pub(crate) replication_factor: u8,
#[arg(default_value = "server_default", value_parser = clap::value_parser!(IggyExpiry), verbatim_doc_comment)]
pub(crate) message_expiry: Vec<IggyExpiry>,
}
#[derive(Debug, Clone, Args)]
pub(crate) struct TopicGetArgs {
#[arg(value_parser = clap::value_parser!(Identifier))]
pub(crate) stream_id: Identifier,
#[arg(value_parser = clap::value_parser!(Identifier))]
pub(crate) topic_id: Identifier,
}
#[derive(Debug, Clone, Args)]
pub(crate) struct TopicListArgs {
#[arg(value_parser = clap::value_parser!(Identifier))]
pub(crate) stream_id: Identifier,
#[clap(short, long, value_enum, default_value_t = ListMode::Table)]
pub(crate) list_mode: ListMode,
}
#[derive(Debug, Clone, Args)]
pub(crate) struct TopicPurgeArgs {
#[arg(value_parser = clap::value_parser!(Identifier))]
pub(crate) stream_id: Identifier,
#[arg(value_parser = clap::value_parser!(Identifier))]
pub(crate) topic_id: Identifier,
}