alfred_workflow_rust_project/
workflow.rs1use std::process::exit;
2use crate::alfred::{Alfred, AlfredEnv};
3use crate::workflow_item::WorkflowItem;
4use serde::{Deserialize, Serialize};
5use crate::icon::BuiltinIcon;
6
7#[derive(Serialize, Deserialize)]
9pub struct AlfredWorkflow {
10 #[serde(skip_serializing)]
11 alfred: Alfred,
12 items: Vec<WorkflowItem>,
13}
14
15impl AlfredWorkflow {
16 pub fn init() -> AlfredWorkflow {
17 AlfredWorkflow {
18 alfred: Alfred::init(),
19 items: Vec::new(),
20 }
21 }
22
23 pub fn get_workflow_env(key: &str) -> String {
24 std::env::var(key).unwrap_or_default()
25 }
26
27 pub fn send_feedback(&self) {
28 print!("{}", serde_json::to_string(self).unwrap())
29 }
30
31 pub fn add_item(mut self, item: WorkflowItem) -> AlfredWorkflow {
32 self.items.push(item);
33 self
34 }
35
36 pub fn fatal_error(&mut self, msg: &str, detail: &str) {
42 let error = WorkflowItem::new(msg)
43 .subtitle(detail)
44 .icon(BuiltinIcon::ERROR.get_icon());
45 self.items = vec![error];
46 self.send_feedback();
47 exit(0)
48 }
49
50 pub fn get_config(&self, name: &str) -> String {
51 std::env::var(name).unwrap_or_default()
52 }
53}
54
55impl AlfredEnv for AlfredWorkflow {
56 fn get_preference_path(&self) -> String {
57 self.alfred.get_preference_path()
58 }
59
60 fn get_preference_hash_path(&self) -> String {
61 self.alfred.get_preference_hash_path()
62 }
63
64 fn get_theme(&self) -> String {
65 self.alfred.get_theme()
66 }
67
68 fn get_version(&self) -> String {
69 self.alfred.get_version()
70 }
71
72 fn get_version_build(&self) -> String {
73 self.alfred.get_version_build()
74 }
75
76 fn get_workflow_bundle_id(&self) -> String {
77 self.alfred.get_workflow_bundle_id()
78 }
79
80 fn get_workflow_cache_path(&self) -> String {
81 self.alfred.get_workflow_cache_path()
82 }
83
84 fn get_workflow_data_path(&self) -> String {
85 self.alfred.get_workflow_data_path()
86 }
87
88 fn get_workflow_name(&self) -> String {
89 self.alfred.get_workflow_name()
90 }
91
92 fn is_debug_mode(&self) -> bool {
93 self.alfred.is_debug_mode()
94 }
95
96 fn get_workflow_uuid(&self) -> String {
97 self.alfred.get_workflow_uuid()
98 }
99
100 fn get_workflow_version(&self) -> String {
101 self.alfred.get_workflow_version()
102 }
103
104 fn get_theme_background(&self) -> String {
105 self.alfred.get_theme_background()
106 }
107
108 fn get_theme_selection_background(&self) -> String {
109 self.alfred.get_theme_selection_background()
110 }
111
112 fn get_theme_subtext(&self) -> String {
113 self.alfred.get_theme_subtext()
114 }
115}