intelli_shell/process/
export.rs1use 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}