@devaloop/devalang 0.0.1-beta.1 → 0.0.1-beta.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (207) hide show
  1. package/.devalang +9 -10
  2. package/Cargo.toml +84 -80
  3. package/README.md +10 -7
  4. package/docs/CHANGELOG.md +83 -0
  5. package/docs/ROADMAP.md +6 -2
  6. package/docs/TODO.md +3 -14
  7. package/examples/bus.deva +10 -0
  8. package/examples/chain.deva +19 -0
  9. package/examples/effect.deva +2 -0
  10. package/examples/filter.deva +11 -0
  11. package/examples/lfo.deva +9 -0
  12. package/examples/plugin.deva +10 -10
  13. package/examples/routing.deva +23 -0
  14. package/examples/synth.deva +11 -1
  15. package/examples/synth_types.deva +17 -0
  16. package/out-tsc/bin/project-version.json +6 -0
  17. package/out-tsc/core/functions/index.d.ts +5 -0
  18. package/out-tsc/core/functions/index.js +11 -0
  19. package/out-tsc/pkg/devalang_core.d.ts +2 -0
  20. package/out-tsc/pkg/devalang_core.js +17 -2
  21. package/out-tsc/pkg/devalang_core_bg.wasm.d.ts +1 -0
  22. package/out-tsc/scripts/version/copy-to-binary.d.ts +1 -0
  23. package/out-tsc/scripts/version/copy-to-binary.js +79 -0
  24. package/package.json +23 -10
  25. package/project-version.json +3 -3
  26. package/rust/bindings/Cargo.toml +9 -0
  27. package/rust/bindings/src/lib.rs +86 -0
  28. package/rust/cli/addon/commands.rs +35 -0
  29. package/rust/cli/addon/download.rs +234 -0
  30. package/rust/cli/addon/install.rs +33 -0
  31. package/rust/cli/addon/list.rs +224 -0
  32. package/rust/cli/addon/metadata.rs +124 -0
  33. package/rust/cli/addon/mod.rs +8 -0
  34. package/rust/cli/addon/remove.rs +271 -0
  35. package/rust/cli/addon/update.rs +305 -0
  36. package/rust/cli/{install/addon.rs → addon/utils.rs} +34 -43
  37. package/rust/cli/build/commands.rs +153 -103
  38. package/rust/cli/build/mod.rs +2 -2
  39. package/rust/cli/build/process.rs +165 -146
  40. package/rust/cli/check/mod.rs +208 -208
  41. package/rust/cli/discover/commands.rs +53 -31
  42. package/rust/cli/discover/config.rs +2 -4
  43. package/rust/cli/discover/install.rs +139 -28
  44. package/rust/cli/discover/metadata.rs +3 -3
  45. package/rust/cli/login/commands.rs +124 -124
  46. package/rust/cli/me/commands.rs +52 -0
  47. package/rust/cli/me/mod.rs +1 -0
  48. package/rust/cli/mod.rs +2 -2
  49. package/rust/cli/parser.rs +76 -70
  50. package/rust/cli/play/commands.rs +375 -324
  51. package/rust/cli/play/mod.rs +5 -5
  52. package/rust/cli/play/process.rs +159 -150
  53. package/rust/cli/play/realtime.rs +91 -91
  54. package/rust/cli/telemetry/commands.rs +22 -22
  55. package/rust/cli/telemetry/event_creator.rs +80 -80
  56. package/rust/cli/telemetry/mod.rs +3 -3
  57. package/rust/cli/telemetry/send.rs +51 -51
  58. package/rust/cli/template/commands.rs +69 -69
  59. package/rust/config/driver.rs +112 -103
  60. package/rust/config/mod.rs +3 -3
  61. package/rust/config/ops.rs +26 -26
  62. package/rust/config/settings.rs +101 -101
  63. package/rust/core/audio/engine/driver.rs +237 -0
  64. package/rust/core/audio/engine/export.rs +169 -0
  65. package/rust/core/audio/engine/helpers.rs +178 -170
  66. package/rust/core/audio/engine/mod.rs +56 -7
  67. package/rust/core/audio/engine/notes/dsp.rs +88 -0
  68. package/rust/core/audio/engine/notes/mod.rs +53 -0
  69. package/rust/core/audio/engine/notes/params.rs +294 -0
  70. package/rust/core/audio/engine/sample/insert.rs +300 -0
  71. package/rust/core/audio/engine/sample/mod.rs +40 -0
  72. package/rust/core/audio/engine/sample/padding.rs +170 -0
  73. package/rust/core/audio/evaluator/condition.rs +61 -0
  74. package/rust/core/audio/evaluator/mod.rs +9 -0
  75. package/rust/core/audio/{evaluator.rs → evaluator/numeric.rs} +152 -310
  76. package/rust/core/audio/evaluator/rhs.rs +16 -0
  77. package/rust/core/audio/evaluator/string_expr.rs +94 -0
  78. package/rust/core/audio/interpreter/driver.rs +574 -542
  79. package/rust/core/audio/interpreter/mod.rs +2 -14
  80. package/rust/core/audio/interpreter/statements/arrow_call/interprete.rs +179 -0
  81. package/rust/core/audio/interpreter/statements/arrow_call/methods/chord.rs +398 -0
  82. package/rust/core/audio/interpreter/statements/arrow_call/methods/effects.rs +323 -0
  83. package/rust/core/audio/interpreter/statements/arrow_call/methods/mod.rs +3 -0
  84. package/rust/core/audio/interpreter/statements/arrow_call/methods/note.rs +371 -0
  85. package/rust/core/audio/interpreter/statements/arrow_call/mod.rs +3 -0
  86. package/rust/core/audio/interpreter/statements/arrow_call/types/arp.rs +192 -0
  87. package/rust/core/audio/interpreter/statements/arrow_call/types/mod.rs +24 -0
  88. package/rust/core/audio/interpreter/statements/arrow_call/types/pad.rs +116 -0
  89. package/rust/core/audio/interpreter/statements/arrow_call/types/pluck.rs +97 -0
  90. package/rust/core/audio/interpreter/statements/arrow_call/types/sub.rs +100 -0
  91. package/rust/core/audio/interpreter/{automate.rs → statements/automate.rs} +2 -4
  92. package/rust/core/audio/interpreter/{call.rs → statements/call.rs} +36 -5
  93. package/rust/core/audio/interpreter/{condition.rs → statements/condition.rs} +72 -71
  94. package/rust/core/audio/interpreter/{function.rs → statements/function.rs} +24 -26
  95. package/rust/core/audio/interpreter/{let_.rs → statements/let_.rs} +36 -38
  96. package/rust/core/audio/interpreter/{load.rs → statements/load.rs} +17 -19
  97. package/rust/core/audio/interpreter/{loop_.rs → statements/loop_.rs} +115 -114
  98. package/rust/core/audio/interpreter/statements/mod.rs +12 -0
  99. package/rust/core/audio/interpreter/{sleep.rs → statements/sleep.rs} +28 -28
  100. package/rust/core/audio/interpreter/{spawn.rs → statements/spawn.rs} +54 -4
  101. package/rust/core/audio/interpreter/{tempo.rs → statements/tempo.rs} +40 -40
  102. package/rust/core/audio/interpreter/{trigger.rs → statements/trigger.rs} +242 -239
  103. package/rust/core/audio/loader/trigger.rs +98 -97
  104. package/rust/core/audio/mod.rs +6 -7
  105. package/rust/core/audio/special/easing.rs +189 -189
  106. package/rust/core/audio/special/env.rs +45 -45
  107. package/rust/core/audio/special/math.rs +134 -134
  108. package/rust/core/audio/special/modulator.rs +143 -143
  109. package/rust/core/builder/mod.rs +129 -86
  110. package/rust/core/debugger/{module.rs → logs.rs} +52 -55
  111. package/rust/core/debugger/mod.rs +30 -30
  112. package/rust/core/debugger/store.rs +38 -40
  113. package/rust/core/error/mod.rs +269 -269
  114. package/rust/core/lexer/driver.rs +2 -4
  115. package/rust/core/mod.rs +9 -10
  116. package/rust/core/parser/driver/block.rs +111 -0
  117. package/rust/core/parser/driver/cursor.rs +82 -0
  118. package/rust/core/parser/driver/driver_impl.rs +159 -0
  119. package/rust/core/parser/driver/mod.rs +6 -0
  120. package/rust/core/parser/driver/parse_array.rs +120 -0
  121. package/rust/core/parser/driver/parse_map.rs +247 -0
  122. package/rust/core/parser/driver/parser.rs +160 -0
  123. package/rust/core/parser/handler/arrow_call.rs +90 -15
  124. package/rust/core/parser/handler/at.rs +279 -279
  125. package/rust/core/parser/handler/bank.rs +104 -104
  126. package/rust/core/parser/handler/condition.rs +83 -83
  127. package/rust/core/parser/handler/dot.rs +148 -148
  128. package/rust/core/parser/handler/identifier/automate.rs +254 -254
  129. package/rust/core/parser/handler/identifier/call.rs +91 -91
  130. package/rust/core/parser/handler/identifier/emit.rs +70 -70
  131. package/rust/core/parser/handler/identifier/function.rs +113 -113
  132. package/rust/core/parser/handler/identifier/group.rs +89 -89
  133. package/rust/core/parser/handler/identifier/let_.rs +173 -173
  134. package/rust/core/parser/handler/identifier/mod.rs +55 -55
  135. package/rust/core/parser/handler/identifier/on.rs +107 -107
  136. package/rust/core/parser/handler/identifier/print.rs +49 -49
  137. package/rust/core/parser/handler/identifier/sleep.rs +96 -43
  138. package/rust/core/parser/handler/identifier/spawn.rs +91 -91
  139. package/rust/core/parser/handler/identifier/synth.rs +39 -3
  140. package/rust/core/parser/handler/loop_.rs +194 -194
  141. package/rust/core/parser/handler/pattern.rs +25 -2
  142. package/rust/core/parser/handler/tempo.rs +105 -57
  143. package/rust/core/parser/statement.rs +10 -11
  144. package/rust/core/plugin/loader.rs +137 -137
  145. package/rust/core/plugin/runner/mod.rs +11 -0
  146. package/rust/core/plugin/{runner.rs → runner/non_wasm.rs} +206 -72
  147. package/rust/core/plugin/runner/wasm32.rs +44 -0
  148. package/rust/core/preprocessor/loader/inject.rs +313 -0
  149. package/rust/core/preprocessor/loader/loader_helpers.rs +110 -0
  150. package/rust/core/preprocessor/loader/mod.rs +235 -0
  151. package/rust/core/preprocessor/module.rs +55 -60
  152. package/rust/core/preprocessor/{processor.rs → processor/handlers.rs} +107 -114
  153. package/rust/core/preprocessor/processor/mod.rs +1 -0
  154. package/rust/core/preprocessor/resolver/function.rs +69 -69
  155. package/rust/core/preprocessor/resolver/group.rs +122 -94
  156. package/rust/core/preprocessor/resolver/pattern.rs +14 -2
  157. package/rust/core/store/global.rs +57 -61
  158. package/rust/core/store/mod.rs +1 -5
  159. package/rust/lib.rs +323 -308
  160. package/rust/macros/Cargo.toml +14 -0
  161. package/rust/macros/src/lib.rs +52 -0
  162. package/rust/main.rs +336 -143
  163. package/rust/types/Cargo.toml +1 -1
  164. package/rust/types/src/addons.rs +57 -55
  165. package/rust/types/src/config.rs +82 -74
  166. package/rust/types/src/lib.rs +15 -12
  167. package/rust/types/src/plugin.rs +20 -0
  168. package/rust/types/src/store.rs +139 -0
  169. package/rust/types/src/telemetry.rs +85 -85
  170. package/rust/utils/Cargo.toml +5 -2
  171. package/rust/utils/src/file.rs +477 -94
  172. package/rust/utils/src/first_usage.rs +97 -97
  173. package/rust/utils/src/lib.rs +9 -9
  174. package/rust/utils/src/logger.rs +200 -200
  175. package/rust/utils/src/path.rs +158 -88
  176. package/rust/utils/src/signature.rs +41 -41
  177. package/rust/utils/src/spinner.rs +20 -20
  178. package/rust/utils/src/version.rs +58 -27
  179. package/rust/utils/src/watcher.rs +46 -46
  180. package/rust/web/api.rs +5 -5
  181. package/rust/web/auth.rs +5 -0
  182. package/rust/web/cdn.rs +34 -34
  183. package/rust/web/forge.rs +5 -0
  184. package/rust/web/mod.rs +2 -0
  185. package/tests/integration.rs +21 -21
  186. package/typescript/core/functions/index.ts +11 -0
  187. package/typescript/pkg/devalang_core.ts +20 -4
  188. package/typescript/scripts/version/copy-to-binary.ts +82 -0
  189. package/rust/cli/bank/api.rs +0 -122
  190. package/rust/cli/bank/commands.rs +0 -275
  191. package/rust/cli/bank/mod.rs +0 -29
  192. package/rust/cli/install/bank.rs +0 -53
  193. package/rust/cli/install/commands.rs +0 -35
  194. package/rust/cli/install/mod.rs +0 -4
  195. package/rust/cli/install/plugin.rs +0 -61
  196. package/rust/core/audio/engine/sample.rs +0 -366
  197. package/rust/core/audio/engine/synth.rs +0 -325
  198. package/rust/core/audio/interpreter/arrow_call.rs +0 -311
  199. package/rust/core/audio/renderer.rs +0 -54
  200. package/rust/core/parser/driver.rs +0 -584
  201. package/rust/core/preprocessor/loader.rs +0 -637
  202. package/rust/core/store/export.rs +0 -28
  203. package/rust/core/store/function.rs +0 -40
  204. package/rust/core/store/import.rs +0 -28
  205. package/rust/core/store/variable.rs +0 -51
  206. package/rust/core/utils/mod.rs +0 -1
  207. package/rust/core/utils/path.rs +0 -37
@@ -0,0 +1,52 @@
1
+ use proc_macro::TokenStream;
2
+ use quote::quote;
3
+ use syn::{ parse_macro_input, ItemFn, LitStr };
4
+
5
+ #[proc_macro_attribute]
6
+ pub fn export_plugin(args: TokenStream, item: TokenStream) -> TokenStream {
7
+ let input = parse_macro_input!(item as ItemFn);
8
+
9
+ // default export name = function name
10
+ let export_name = if args.is_empty() {
11
+ input.sig.ident.to_string()
12
+ } else {
13
+ // accept single string literal: #[export_plugin("synth")]
14
+ let s = parse_macro_input!(args as LitStr);
15
+ s.value()
16
+ };
17
+
18
+ let fn_ident = &input.sig.ident;
19
+ let vis = &input.vis;
20
+ let sig = &input.sig;
21
+ let block = &input.block;
22
+
23
+ let wrapper_ident = syn::Ident::new(&export_name, fn_ident.span());
24
+
25
+ let expanded =
26
+ quote! {
27
+ #vis #sig #block
28
+
29
+ #[no_mangle]
30
+ pub extern "C" fn #wrapper_ident(
31
+ out_ptr: *mut f32,
32
+ out_len: i32,
33
+ freq: f32,
34
+ amp: f32,
35
+ duration_ms: i32,
36
+ sample_rate: i32,
37
+ channels: i32,
38
+ ) {
39
+ if out_ptr.is_null() { return; }
40
+ let out_len_usz = out_len.max(0) as usize;
41
+ let ch = channels.max(1) as usize;
42
+ let frames = (out_len_usz / ch) as u32;
43
+ let params = devalang_bindings::BufferParams { sample_rate: sample_rate.max(1) as u32, channels: channels.max(1) as u32, frames };
44
+ unsafe {
45
+ let out = core::slice::from_raw_parts_mut(out_ptr, out_len_usz);
46
+ #fn_ident(out, params, devalang_bindings::Note::default(), freq, amp, duration_ms.max(1) as u32);
47
+ }
48
+ }
49
+ };
50
+
51
+ TokenStream::from(expanded)
52
+ }
package/rust/main.rs CHANGED
@@ -5,38 +5,38 @@ pub mod config;
5
5
  pub mod core;
6
6
  pub mod web;
7
7
  pub use devalang_utils as utils;
8
- use devalang_utils::path::ensure_deva_dir;
9
8
 
9
+ use crate::cli::addon::commands::handle_install_addon_command;
10
+ use crate::cli::addon::commands::handle_list_addon_command;
11
+ use crate::cli::addon::commands::handle_remove_addon_command;
12
+ use crate::cli::addon::commands::handle_update_addon_command;
13
+ use crate::cli::me::commands::handle_me_command;
14
+ use crate::cli::parser::AddonCommand;
10
15
  use crate::cli::telemetry::send::send_telemetry_event;
11
16
  use crate::config::settings::ensure_user_config_file_exists;
12
17
  use crate::config::settings::write_user_config_file;
13
18
  use crate::{
14
19
  cli::{
15
- bank::{
16
- handle_bank_available_command, handle_bank_info_command, handle_bank_list_command,
17
- handle_remove_bank_command, handle_update_bank_command,
18
- },
19
20
  build::commands::handle_build_command,
20
21
  check::handle_check_command,
21
22
  discover::commands::handle_discover_command,
22
23
  init::commands::handle_init_command,
23
- install::commands::handle_install_command,
24
24
  login::commands::handle_login_command,
25
- parser::{BankCommand, Cli, Commands, InstallCommand, TelemetryCommand, TemplateCommand},
25
+ parser::{Cli, Commands, TelemetryCommand, TemplateCommand},
26
26
  play::commands::handle_play_command,
27
27
  telemetry::{
28
28
  commands::{handle_telemetry_disable_command, handle_telemetry_enable_command},
29
29
  event_creator::{TelemetryEventCreator, TelemetryEventExt},
30
30
  },
31
31
  template::commands::{handle_template_info_command, handle_template_list_command},
32
- update::commands::handle_update_command,
33
32
  },
34
33
  config::driver::ProjectConfig,
35
34
  utils::first_usage::check_is_first_usage,
36
35
  };
37
36
  use clap::CommandFactory;
38
37
  use clap::FromArgMatches;
39
- use devalang_types::{AddonType, TelemetryErrorLevel};
38
+ use devalang_types::TelemetryErrorLevel;
39
+ use devalang_utils::path::ensure_deva_dir;
40
40
  use std::io;
41
41
 
42
42
  #[tokio::main]
@@ -107,7 +107,7 @@ async fn main() -> io::Result<()> {
107
107
  let logger = devalang_utils::logger::Logger::new();
108
108
  logger.log_message(
109
109
  devalang_utils::logger::LogLevel::Error,
110
- &format!(" Check failed: {}", err),
110
+ &format!("[error] Check failed: {}", err),
111
111
  );
112
112
  had_error = true;
113
113
  last_error_message = Some(format!("check failed: {}", err));
@@ -121,12 +121,25 @@ async fn main() -> io::Result<()> {
121
121
  watch,
122
122
  debug,
123
123
  compress,
124
+ output_format,
125
+ audio_format,
126
+ sample_rate,
124
127
  } => {
125
- if let Err(err) = handle_build_command(config, entry, output, watch, debug, compress) {
128
+ if let Err(err) = handle_build_command(
129
+ config,
130
+ entry,
131
+ output,
132
+ output_format,
133
+ audio_format,
134
+ sample_rate,
135
+ watch,
136
+ debug,
137
+ compress,
138
+ ) {
126
139
  let logger = devalang_utils::logger::Logger::new();
127
140
  logger.log_message(
128
141
  devalang_utils::logger::LogLevel::Error,
129
- &format!(" Build failed: {}", err),
142
+ &format!("[error] Build failed: {}", err),
130
143
  );
131
144
  had_error = true;
132
145
  last_error_message = Some(format!("build failed: {}", err));
@@ -137,15 +150,26 @@ async fn main() -> io::Result<()> {
137
150
  Commands::Play {
138
151
  entry,
139
152
  output,
153
+ sample_rate,
140
154
  watch,
141
155
  repeat,
142
156
  debug,
157
+ audio_format,
143
158
  } => {
144
- if let Err(err) = handle_play_command(config, entry, output, watch, repeat, debug) {
159
+ if let Err(err) = handle_play_command(
160
+ config,
161
+ entry,
162
+ output,
163
+ audio_format,
164
+ sample_rate,
165
+ watch,
166
+ repeat,
167
+ debug,
168
+ ) {
145
169
  let logger = devalang_utils::logger::Logger::new();
146
170
  logger.log_message(
147
171
  devalang_utils::logger::LogLevel::Error,
148
- &format!(" Play failed: {}", err),
172
+ &format!("[error] Play failed: {}", err),
149
173
  );
150
174
  had_error = true;
151
175
  last_error_message = Some(format!("play failed: {}", err));
@@ -153,144 +177,300 @@ async fn main() -> io::Result<()> {
153
177
  }
154
178
  }
155
179
 
156
- Commands::Install { command } => match command {
157
- InstallCommand::Template { name } => {
158
- if let Err(err) = handle_install_command(name, AddonType::Template).await {
159
- let logger = devalang_utils::logger::Logger::new();
160
- logger.log_message(
161
- devalang_utils::logger::LogLevel::Error,
162
- &format!("❌ Failed to install template: {}", err),
163
- );
164
- had_error = true;
165
- last_error_message = Some(format!("install template failed: {}", err));
166
- exit_code = Some(1);
167
- }
168
- }
169
- InstallCommand::Bank { name } => {
170
- if let Err(err) = handle_install_command(name, AddonType::Bank).await {
171
- let logger = devalang_utils::logger::Logger::new();
172
- logger.log_message(
173
- devalang_utils::logger::LogLevel::Error,
174
- &format!("❌ Failed to install bank: {}", err),
175
- );
176
- had_error = true;
177
- last_error_message = Some(format!("install bank failed: {}", err));
178
- exit_code = Some(1);
179
- }
180
- }
181
- InstallCommand::Plugin { name } => {
182
- if let Err(err) = handle_install_command(name, AddonType::Plugin).await {
183
- let logger = devalang_utils::logger::Logger::new();
184
- logger.log_message(
185
- devalang_utils::logger::LogLevel::Error,
186
- &format!("❌ Failed to install plugin: {}", err),
187
- );
188
- had_error = true;
189
- last_error_message = Some(format!("install plugin failed: {}", err));
190
- exit_code = Some(1);
191
- }
192
- }
193
- InstallCommand::Preset { name } => {
194
- if let Err(err) = handle_install_command(name, AddonType::Preset).await {
195
- let logger = devalang_utils::logger::Logger::new();
196
- logger.log_message(
197
- devalang_utils::logger::LogLevel::Error,
198
- &format!("❌ Failed to install preset: {}", err),
199
- );
200
- had_error = true;
201
- last_error_message = Some(format!("install preset failed: {}", err));
202
- exit_code = Some(1);
203
- }
204
- }
205
- },
206
-
207
- Commands::Bank { command } => match command {
208
- BankCommand::List => {
209
- if let Err(err) = handle_bank_list_command().await {
210
- let logger = devalang_utils::logger::Logger::new();
211
- logger.log_message(
212
- devalang_utils::logger::LogLevel::Error,
213
- &format!("❌ Failed to list local banks: {}", err),
214
- );
215
- had_error = true;
216
- last_error_message = Some(format!("bank list failed: {}", err));
217
- exit_code = Some(1);
218
- }
219
- }
220
-
221
- BankCommand::Available => {
222
- if let Err(err) = handle_bank_available_command().await {
223
- let logger = devalang_utils::logger::Logger::new();
224
- logger.log_message(
225
- devalang_utils::logger::LogLevel::Error,
226
- &format!("❌ Failed to list available banks: {}", err),
227
- );
228
- had_error = true;
229
- last_error_message = Some(format!("bank available failed: {}", err));
230
- exit_code = Some(1);
180
+ Commands::Addon { command } => {
181
+ match command {
182
+ AddonCommand::Install { name, no_clear_tmp } => {
183
+ if let Err(err) = handle_install_addon_command(name, no_clear_tmp).await {
184
+ let logger = devalang_utils::logger::Logger::new();
185
+ logger.log_message(
186
+ devalang_utils::logger::LogLevel::Error,
187
+ &format!("[error] Failed to install addon: {}", err),
188
+ );
189
+ had_error = true;
190
+ last_error_message = Some(format!("install addon failed: {}", err));
191
+ exit_code = Some(1);
192
+ }
231
193
  }
232
- }
233
194
 
234
- BankCommand::Info { name } => {
235
- if let Err(err) = handle_bank_info_command(name).await {
236
- let logger = devalang_utils::logger::Logger::new();
237
- logger.log_message(
238
- devalang_utils::logger::LogLevel::Error,
239
- &format!(" Failed to get bank info: {}", err),
240
- );
241
- had_error = true;
242
- last_error_message = Some(format!("bank info failed: {}", err));
243
- exit_code = Some(1);
195
+ AddonCommand::Update { name } => {
196
+ if let Err(err) = handle_update_addon_command(name).await {
197
+ let logger = devalang_utils::logger::Logger::new();
198
+ logger.log_message(
199
+ devalang_utils::logger::LogLevel::Error,
200
+ &format!("[error] Failed to update addon: {}", err),
201
+ );
202
+ had_error = true;
203
+ last_error_message = Some(format!("update addon failed: {}", err));
204
+ exit_code = Some(1);
205
+ }
244
206
  }
245
- }
246
-
247
- BankCommand::Remove { name } => {
248
- if let Err(err) = handle_remove_bank_command(name).await {
249
- let logger = devalang_utils::logger::Logger::new();
250
- logger.log_message(
251
- devalang_utils::logger::LogLevel::Error,
252
- &format!("❌ Failed to remove bank: {}", err),
253
- );
254
- had_error = true;
255
- last_error_message = Some(format!("bank remove failed: {}", err));
256
- exit_code = Some(1);
257
- }
258
- }
259
207
 
260
- BankCommand::Update { name } => {
261
- if let Err(err) = handle_update_bank_command(name).await {
262
- let logger = devalang_utils::logger::Logger::new();
263
- logger.log_message(
264
- devalang_utils::logger::LogLevel::Error,
265
- &format!(" Failed to update bank: {}", err),
266
- );
267
- had_error = true;
268
- last_error_message = Some(format!("bank update failed: {}", err));
269
- exit_code = Some(1);
208
+ AddonCommand::List {} => {
209
+ if let Err(err) = handle_list_addon_command().await {
210
+ let logger = devalang_utils::logger::Logger::new();
211
+ logger.log_message(
212
+ devalang_utils::logger::LogLevel::Error,
213
+ &format!("[error] Failed to list local addons: {}", err),
214
+ );
215
+ had_error = true;
216
+ last_error_message = Some(format!("addon list failed: {}", err));
217
+ exit_code = Some(1);
218
+ }
270
219
  }
271
- }
272
- },
273
220
 
274
- Commands::Update { only } => {
275
- if let Err(err) = handle_update_command(only).await {
276
- let logger = devalang_utils::logger::Logger::new();
277
- logger.log_message(
278
- devalang_utils::logger::LogLevel::Error,
279
- &format!(" Update failed: {}", err),
280
- );
281
- had_error = true;
282
- last_error_message = Some(format!("update failed: {}", err));
283
- exit_code = Some(1);
221
+ AddonCommand::Remove { name } => {
222
+ if let Err(err) = handle_remove_addon_command(name).await {
223
+ let logger = devalang_utils::logger::Logger::new();
224
+ logger.log_message(
225
+ devalang_utils::logger::LogLevel::Error,
226
+ &format!("[error] Failed to remove addon: {}", err),
227
+ );
228
+ had_error = true;
229
+ last_error_message = Some(format!("remove addon failed: {}", err));
230
+ exit_code = Some(1);
231
+ }
232
+ } // AddonCommand::Bank { command } => {
233
+ // match command {
234
+ // BankCommand::List => {
235
+ // if let Err(err) = handle_bank_list_command().await {
236
+ // let logger = devalang_utils::logger::Logger::new();
237
+ // logger.log_message(
238
+ // devalang_utils::logger::LogLevel::Error,
239
+ // &format!("[error] Failed to list local banks: {}", err)
240
+ // );
241
+ // had_error = true;
242
+ // last_error_message = Some(format!("bank list failed: {}", err));
243
+ // exit_code = Some(1);
244
+ // }
245
+ // }
246
+
247
+ // BankCommand::Available => {
248
+ // if let Err(err) = handle_bank_available_command().await {
249
+ // let logger = devalang_utils::logger::Logger::new();
250
+ // logger.log_message(
251
+ // devalang_utils::logger::LogLevel::Error,
252
+ // &format!("[error] Failed to list available banks: {}", err)
253
+ // );
254
+ // had_error = true;
255
+ // last_error_message = Some(
256
+ // format!("bank available failed: {}", err)
257
+ // );
258
+ // exit_code = Some(1);
259
+ // }
260
+ // }
261
+
262
+ // // BankCommand::Info { name } => {
263
+ // // if let Err(err) = handle_bank_info_command(name).await {
264
+ // // let logger = devalang_utils::logger::Logger::new();
265
+ // // logger.log_message(
266
+ // // devalang_utils::logger::LogLevel::Error,
267
+ // // &format!("[error] Failed to get bank info: {}", err)
268
+ // // );
269
+ // // had_error = true;
270
+ // // last_error_message = Some(format!("bank info failed: {}", err));
271
+ // // exit_code = Some(1);
272
+ // // }
273
+ // // }
274
+
275
+ // // BankCommand::Remove { name } => {
276
+ // // if let Err(err) = handle_remove_bank_command(name).await {
277
+ // // let logger = devalang_utils::logger::Logger::new();
278
+ // // logger.log_message(
279
+ // // devalang_utils::logger::LogLevel::Error,
280
+ // // &format!("[error] Failed to remove bank: {}", err)
281
+ // // );
282
+ // // had_error = true;
283
+ // // last_error_message = Some(format!("bank remove failed: {}", err));
284
+ // // exit_code = Some(1);
285
+ // // }
286
+ // // }
287
+
288
+ // // BankCommand::Update { name } => {
289
+ // // if let Err(err) = handle_update_bank_command(name).await {
290
+ // // let logger = devalang_utils::logger::Logger::new();
291
+ // // logger.log_message(
292
+ // // devalang_utils::logger::LogLevel::Error,
293
+ // // &format!("[error] Failed to update bank: {}", err)
294
+ // // );
295
+ // // had_error = true;
296
+ // // last_error_message = Some(format!("bank update failed: {}", err));
297
+ // // exit_code = Some(1);
298
+ // // }
299
+ // // }
300
+ // }
301
+ // }
302
+
303
+ // AddonCommand::Plugin { command} => {
304
+ // match command {
305
+ // PluginCommand::List => {
306
+ // if let Err(err) = handle_plugin_list_command().await {
307
+ // let logger = devalang_utils::logger::Logger::new();
308
+ // logger.log_message(
309
+ // devalang_utils::logger::LogLevel::Error,
310
+ // &format!("[error] Failed to list local plugins: {}", err)
311
+ // );
312
+ // had_error = true;
313
+ // last_error_message = Some(format!("plugin list failed: {}", err));
314
+ // exit_code = Some(1);
315
+ // }
316
+ // }
317
+
318
+ // PluginCommand::Available => {
319
+ // if let Err(err) = handle_plugin_available_command().await {
320
+ // let logger = devalang_utils::logger::Logger::new();
321
+ // logger.log_message(
322
+ // devalang_utils::logger::LogLevel::Error,
323
+ // &format!("[error] Failed to list available plugins: {}", err)
324
+ // );
325
+ // had_error = true;
326
+ // last_error_message = Some(
327
+ // format!("plugin available failed: {}", err)
328
+ // );
329
+ // exit_code = Some(1);
330
+ // }
331
+ // }
332
+ // }
333
+ // }
284
334
  }
285
335
  }
286
336
 
337
+ // Commands::Install { command } => match command {
338
+ // InstallCommand::Template { name } => {
339
+ // if let Err(err) = handle_install_command(name, AddonType::Template).await {
340
+ // let logger = devalang_utils::logger::Logger::new();
341
+ // logger.log_message(
342
+ // devalang_utils::logger::LogLevel::Error,
343
+ // &format!("[error] Failed to install template: {}", err),
344
+ // );
345
+ // had_error = true;
346
+ // last_error_message = Some(format!("install template failed: {}", err));
347
+ // exit_code = Some(1);
348
+ // }
349
+ // }
350
+ // InstallCommand::Bank { name } => {
351
+ // if let Err(err) = handle_install_command(name, AddonType::Bank).await {
352
+ // let logger = devalang_utils::logger::Logger::new();
353
+ // logger.log_message(
354
+ // devalang_utils::logger::LogLevel::Error,
355
+ // &format!("[error] Failed to install bank: {}", err),
356
+ // );
357
+ // had_error = true;
358
+ // last_error_message = Some(format!("install bank failed: {}", err));
359
+ // exit_code = Some(1);
360
+ // }
361
+ // }
362
+ // InstallCommand::Plugin { name } => {
363
+ // if let Err(err) = handle_install_command(name, AddonType::Plugin).await {
364
+ // let logger = devalang_utils::logger::Logger::new();
365
+ // logger.log_message(
366
+ // devalang_utils::logger::LogLevel::Error,
367
+ // &format!("[error] Failed to install plugin: {}", err),
368
+ // );
369
+ // had_error = true;
370
+ // last_error_message = Some(format!("install plugin failed: {}", err));
371
+ // exit_code = Some(1);
372
+ // }
373
+ // }
374
+ // InstallCommand::Preset { name } => {
375
+ // if let Err(err) = handle_install_command(name, AddonType::Preset).await {
376
+ // let logger = devalang_utils::logger::Logger::new();
377
+ // logger.log_message(
378
+ // devalang_utils::logger::LogLevel::Error,
379
+ // &format!("[error] Failed to install preset: {}", err),
380
+ // );
381
+ // had_error = true;
382
+ // last_error_message = Some(format!("install preset failed: {}", err));
383
+ // exit_code = Some(1);
384
+ // }
385
+ // }
386
+ // },
387
+
388
+ // Commands::Bank { command } => match command {
389
+ // BankCommand::List => {
390
+ // if let Err(err) = handle_bank_list_command().await {
391
+ // let logger = devalang_utils::logger::Logger::new();
392
+ // logger.log_message(
393
+ // devalang_utils::logger::LogLevel::Error,
394
+ // &format!("[error] Failed to list local banks: {}", err),
395
+ // );
396
+ // had_error = true;
397
+ // last_error_message = Some(format!("bank list failed: {}", err));
398
+ // exit_code = Some(1);
399
+ // }
400
+ // }
401
+
402
+ // BankCommand::Available => {
403
+ // if let Err(err) = handle_bank_available_command().await {
404
+ // let logger = devalang_utils::logger::Logger::new();
405
+ // logger.log_message(
406
+ // devalang_utils::logger::LogLevel::Error,
407
+ // &format!("[error] Failed to list available banks: {}", err),
408
+ // );
409
+ // had_error = true;
410
+ // last_error_message = Some(format!("bank available failed: {}", err));
411
+ // exit_code = Some(1);
412
+ // }
413
+ // }
414
+
415
+ // BankCommand::Info { name } => {
416
+ // if let Err(err) = handle_bank_info_command(name).await {
417
+ // let logger = devalang_utils::logger::Logger::new();
418
+ // logger.log_message(
419
+ // devalang_utils::logger::LogLevel::Error,
420
+ // &format!("[error] Failed to get bank info: {}", err),
421
+ // );
422
+ // had_error = true;
423
+ // last_error_message = Some(format!("bank info failed: {}", err));
424
+ // exit_code = Some(1);
425
+ // }
426
+ // }
427
+
428
+ // BankCommand::Remove { name } => {
429
+ // if let Err(err) = handle_remove_bank_command(name).await {
430
+ // let logger = devalang_utils::logger::Logger::new();
431
+ // logger.log_message(
432
+ // devalang_utils::logger::LogLevel::Error,
433
+ // &format!("[error] Failed to remove bank: {}", err),
434
+ // );
435
+ // had_error = true;
436
+ // last_error_message = Some(format!("bank remove failed: {}", err));
437
+ // exit_code = Some(1);
438
+ // }
439
+ // }
440
+
441
+ // BankCommand::Update { name } => {
442
+ // if let Err(err) = handle_update_bank_command(name).await {
443
+ // let logger = devalang_utils::logger::Logger::new();
444
+ // logger.log_message(
445
+ // devalang_utils::logger::LogLevel::Error,
446
+ // &format!("[error] Failed to update bank: {}", err),
447
+ // );
448
+ // had_error = true;
449
+ // last_error_message = Some(format!("bank update failed: {}", err));
450
+ // exit_code = Some(1);
451
+ // }
452
+ // }
453
+ // },
454
+
455
+ // Commands::Update { only } => {
456
+ // if let Err(err) = handle_update_command(only).await {
457
+ // let logger = devalang_utils::logger::Logger::new();
458
+ // logger.log_message(
459
+ // devalang_utils::logger::LogLevel::Error,
460
+ // &format!("[error] Update failed: {}", err)
461
+ // );
462
+ // had_error = true;
463
+ // last_error_message = Some(format!("update failed: {}", err));
464
+ // exit_code = Some(1);
465
+ // }
466
+ // }
287
467
  Commands::Telemetry { command } => match command {
288
468
  TelemetryCommand::Enable { .. } => {
289
469
  if let Err(err) = handle_telemetry_enable_command().await {
290
470
  let logger = devalang_utils::logger::Logger::new();
291
471
  logger.log_message(
292
472
  devalang_utils::logger::LogLevel::Error,
293
- &format!(" Failed to enable telemetry: {}", err),
473
+ &format!("[error] Failed to enable telemetry: {}", err),
294
474
  );
295
475
  had_error = true;
296
476
  last_error_message = Some(format!("telemetry enable failed: {}", err));
@@ -302,7 +482,7 @@ async fn main() -> io::Result<()> {
302
482
  let logger = devalang_utils::logger::Logger::new();
303
483
  logger.log_message(
304
484
  devalang_utils::logger::LogLevel::Error,
305
- &format!(" Failed to disable telemetry: {}", err),
485
+ &format!("[error] Failed to disable telemetry: {}", err),
306
486
  );
307
487
  had_error = true;
308
488
  last_error_message = Some(format!("telemetry disable failed: {}", err));
@@ -311,12 +491,12 @@ async fn main() -> io::Result<()> {
311
491
  }
312
492
  },
313
493
 
314
- Commands::Discover {} => {
315
- if let Err(err) = handle_discover_command().await {
494
+ Commands::Discover { no_clear_tmp } => {
495
+ if let Err(err) = handle_discover_command(no_clear_tmp).await {
316
496
  let logger = devalang_utils::logger::Logger::new();
317
497
  logger.log_message(
318
498
  devalang_utils::logger::LogLevel::Error,
319
- &format!(" Failed to discover: {}", err),
499
+ &format!("[error] Failed to discover: {}", err),
320
500
  );
321
501
  had_error = true;
322
502
  last_error_message = Some(format!("discover failed: {}", err));
@@ -329,7 +509,7 @@ async fn main() -> io::Result<()> {
329
509
  let logger = devalang_utils::logger::Logger::new();
330
510
  logger.log_message(
331
511
  devalang_utils::logger::LogLevel::Error,
332
- &format!(" Login failed: {}", err),
512
+ &format!("[error] Login failed: {}", err),
333
513
  );
334
514
  had_error = true;
335
515
  last_error_message = Some(format!("login failed: {}", err));
@@ -337,11 +517,24 @@ async fn main() -> io::Result<()> {
337
517
  }
338
518
  }
339
519
 
520
+ Commands::Me {} => {
521
+ if let Err(err) = handle_me_command().await {
522
+ let logger = devalang_utils::logger::Logger::new();
523
+ logger.log_message(
524
+ devalang_utils::logger::LogLevel::Error,
525
+ &format!("[error] Me command failed: {}", err),
526
+ );
527
+ had_error = true;
528
+ last_error_message = Some(format!("me command failed: {}", err));
529
+ exit_code = Some(1);
530
+ }
531
+ }
532
+
340
533
  Commands::Logout { .. } => {
341
534
  let logger = devalang_utils::logger::Logger::new();
342
535
  logger.log_message(
343
536
  devalang_utils::logger::LogLevel::Error,
344
- " Logout command is not implemented yet.",
537
+ "[error] Logout command is not implemented yet.",
345
538
  );
346
539
  had_error = true;
347
540
  last_error_message = Some("logout not implemented".to_string());
@@ -1,6 +1,6 @@
1
1
  [package]
2
2
  name = "devalang_types"
3
- version = "0.0.2"
3
+ version = "0.0.4"
4
4
  description = "Types and traits for Devalang"
5
5
  license = "MIT"
6
6
  authors = ["Devaloop <contact@devaloop.com>"]