blob: 91649333d22b1b5f440cfe5c46d458a98a58ff74 [file]
use crate::cli_command::{CliCommand, PRINT_TARGET};
use crate::client::Client;
use crate::streams::create_stream::CreateStream;
use anyhow::Context;
use async_trait::async_trait;
use tracing::{event, Level};
pub struct CreateStreamCmd {
create_stream: CreateStream,
}
impl CreateStreamCmd {
pub fn new(stream_id: Option<u32>, name: String) -> Self {
Self {
create_stream: CreateStream { stream_id, name },
}
}
fn get_stream_id_info(&self) -> String {
match self.create_stream.stream_id {
Some(stream_id) => format!("ID: {}", stream_id),
None => "ID auto incremented".to_string(),
}
}
}
#[async_trait]
impl CliCommand for CreateStreamCmd {
fn explain(&self) -> String {
format!(
"create stream with name: {} and {}",
self.create_stream.name,
self.get_stream_id_info(),
)
}
async fn execute_cmd(&mut self, client: &dyn Client) -> anyhow::Result<(), anyhow::Error> {
client
.create_stream(&self.create_stream.name, self.create_stream.stream_id)
.await
.with_context(|| {
format!(
"Problem creating stream (name: {} and {})",
self.create_stream.name,
self.get_stream_id_info(),
)
})?;
event!(target: PRINT_TARGET, Level::INFO,
"Stream with name: {} and {} created",
self.create_stream.name,
self.get_stream_id_info(),
);
Ok(())
}
}