intelli_shell/process/
export.rs

1use color_eyre::Result;
2
3use super::{Process, ProcessOutput};
4use crate::{
5    cli::ExportItemsProcess,
6    component::{
7        Component,
8        pick::{ImportExportPickerComponent, ImportExportPickerComponentMode},
9    },
10    config::Config,
11    errors::AppError,
12    format_error,
13    process::InteractiveProcess,
14    service::IntelliShellService,
15};
16
17impl Process for ExportItemsProcess {
18    async fn execute(self, config: Config, service: IntelliShellService) -> color_eyre::Result<ProcessOutput> {
19        let items = match service.prepare_items_export(self.filter.clone()).await {
20            Ok(s) => s,
21            Err(AppError::UserFacing(err)) => {
22                return Ok(ProcessOutput::fail().stderr(format_error!(config.theme, "{err}")));
23            }
24            Err(AppError::Unexpected(report)) => return Err(report),
25        };
26        match service.export_items(items, self, config.gist).await {
27            Ok(stats) => Ok(stats.into_output(&config.theme)),
28            Err(AppError::UserFacing(err)) => Ok(ProcessOutput::fail().stderr(format_error!(config.theme, "{err}"))),
29            Err(AppError::Unexpected(report)) => Err(report),
30        }
31    }
32}
33impl InteractiveProcess for ExportItemsProcess {
34    fn into_component(self, config: Config, service: IntelliShellService, inline: bool) -> Result<Box<dyn Component>> {
35        Ok(Box::new(ImportExportPickerComponent::new(
36            service,
37            config,
38            inline,
39            ImportExportPickerComponentMode::Export { input: self },
40        )))
41    }
42}