treq/view/commands/
save_new_request.rs

1use async_trait::async_trait;
2
3use super::ViewCommand;
4use crate::app::backend::Backend;
5use crate::app::services::request::entities::requests::RequestData;
6use crate::view::output::utils::BREAK_LINE;
7use crate::view::output::writer::CliWriterRepository;
8use crate::view::style::{Color, StyledStr};
9
10pub struct SaveNewRequestExecutor<W1, W2>
11where
12    W1: CliWriterRepository,
13    W2: CliWriterRepository,
14{
15    pub request_name: String,
16    pub request_data: RequestData,
17    pub writer_stdout: W1,
18    pub writer_stderr: W2,
19}
20
21#[async_trait]
22impl<W1, W2> ViewCommand for SaveNewRequestExecutor<W1, W2>
23where
24    W1: CliWriterRepository,
25    W2: CliWriterRepository,
26{
27    async fn execute(mut self: Box<Self>, provider: &mut dyn Backend) -> anyhow::Result<()> {
28        self.writer_stderr.print_lines([BREAK_LINE]);
29        self.writer_stderr
30            .print_lines_styled([[StyledStr::from(" Saving").with_color_text(Color::Yellow)]]);
31        self.writer_stderr.print_lines_styled([[
32            StyledStr::from(" -> "),
33            StyledStr::from(&self.request_name).with_color_text(Color::Blue),
34        ]]);
35
36        provider
37            .save_request_datas_as(self.request_name, self.request_data)
38            .await?;
39
40        Ok(())
41    }
42}