use structopt::StructOpt;
use fluvio::FluvioConfig;
use fluvio::dataplane::Offset;
use crate::error::CliError;
use crate::target::ClusterTarget;
use super::ConsumeOutputType;
#[derive(Debug, StructOpt)]
pub struct ConsumeLogOpt {
#[structopt(value_name = "string")]
pub topic: String,
#[structopt(short = "p", long, default_value = "0", value_name = "integer")]
pub partition: i32,
#[structopt(short = "B", long = "from-beginning")]
pub from_beginning: bool,
#[structopt(short = "d", long)]
pub disable_continuous: bool,
#[structopt(short, long, value_name = "integer")]
pub offset: Option<i64>,
#[structopt(short = "b", long = "maxbytes", value_name = "integer")]
pub max_bytes: Option<i32>,
#[structopt(short = "s", long = "suppress-unknown")]
pub suppress_unknown: bool,
#[structopt(
short = "O",
long = "output",
value_name = "type",
possible_values = &ConsumeOutputType::variants(),
case_insensitive = true,
default_value
)]
output: ConsumeOutputType,
#[structopt(flatten)]
target: ClusterTarget,
}
impl ConsumeLogOpt {
pub fn validate(self) -> Result<(FluvioConfig, ConsumeLogConfig), CliError> {
let target_server = self.target.load()?;
let consume_log_cfg = ConsumeLogConfig {
topic: self.topic,
partition: self.partition,
from_beginning: self.from_beginning,
disable_continuous: self.disable_continuous,
offset: self.offset,
max_bytes: self.max_bytes,
output: self.output,
suppress_unknown: self.suppress_unknown,
};
Ok((target_server, consume_log_cfg))
}
}
#[derive(Debug)]
pub struct ConsumeLogConfig {
pub topic: String,
pub partition: i32,
pub from_beginning: bool,
pub disable_continuous: bool,
pub offset: Option<Offset>,
pub max_bytes: Option<i32>,
pub output: ConsumeOutputType,
pub suppress_unknown: bool,
}