iggy_cli/commands/binary_streams/
create_stream.rs1use crate::commands::cli_command::{CliCommand, PRINT_TARGET};
20use anyhow::Context;
21use async_trait::async_trait;
22use iggy_common::Client;
23use iggy_common::create_stream::CreateStream;
24use tracing::{Level, event};
25
26pub struct CreateStreamCmd {
27 create_stream: CreateStream,
28}
29
30impl CreateStreamCmd {
31 pub fn new(name: String) -> Self {
32 Self {
33 create_stream: CreateStream { name },
34 }
35 }
36
37 fn get_stream_id_info(&self) -> String {
38 "ID auto incremented".to_string()
39 }
40}
41
42#[async_trait]
43impl CliCommand for CreateStreamCmd {
44 fn explain(&self) -> String {
45 format!(
46 "create stream with name: {} and {}",
47 self.create_stream.name,
48 self.get_stream_id_info(),
49 )
50 }
51
52 async fn execute_cmd(&mut self, client: &dyn Client) -> anyhow::Result<(), anyhow::Error> {
53 client
54 .create_stream(&self.create_stream.name)
55 .await
56 .with_context(|| {
57 format!(
58 "Problem creating stream (name: {} and {})",
59 self.create_stream.name,
60 self.get_stream_id_info(),
61 )
62 })?;
63
64 event!(target: PRINT_TARGET, Level::INFO,
65 "Stream with name: {} and {} created",
66 self.create_stream.name,
67 self.get_stream_id_info(),
68 );
69
70 Ok(())
71 }
72}