@devaloop/devalang 0.0.1-beta.2 → 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.
- package/Cargo.toml +84 -81
- package/README.md +3 -2
- package/docs/CHANGELOG.md +41 -0
- package/docs/ROADMAP.md +3 -3
- package/examples/chain.deva +19 -0
- package/examples/plugin.deva +10 -10
- package/examples/routing.deva +23 -0
- package/out-tsc/bin/project-version.json +6 -0
- package/out-tsc/pkg/devalang_core_bg.wasm.d.ts +8 -8
- package/out-tsc/scripts/version/copy-to-binary.d.ts +1 -0
- package/out-tsc/scripts/version/copy-to-binary.js +79 -0
- package/package.json +23 -10
- package/project-version.json +3 -3
- package/rust/bindings/Cargo.toml +9 -0
- package/rust/bindings/src/lib.rs +86 -0
- package/rust/cli/addon/commands.rs +35 -0
- package/rust/cli/addon/download.rs +234 -0
- package/rust/cli/addon/install.rs +33 -0
- package/rust/cli/addon/list.rs +224 -0
- package/rust/cli/addon/metadata.rs +124 -0
- package/rust/cli/addon/mod.rs +8 -0
- package/rust/cli/addon/remove.rs +271 -0
- package/rust/cli/addon/update.rs +305 -0
- package/rust/cli/{install/addon.rs → addon/utils.rs} +109 -118
- package/rust/cli/build/commands.rs +153 -153
- package/rust/cli/build/process.rs +165 -165
- package/rust/cli/check/mod.rs +208 -208
- package/rust/cli/discover/commands.rs +275 -253
- package/rust/cli/discover/config.rs +109 -111
- package/rust/cli/discover/fs.rs +19 -19
- package/rust/cli/discover/install.rs +214 -103
- package/rust/cli/discover/metadata.rs +48 -48
- package/rust/cli/discover/mod.rs +5 -5
- package/rust/cli/me/commands.rs +52 -0
- package/rust/cli/me/mod.rs +1 -0
- package/rust/cli/mod.rs +12 -12
- package/rust/cli/parser.rs +30 -69
- package/rust/cli/play/commands.rs +375 -375
- package/rust/cli/play/process.rs +159 -159
- package/rust/core/audio/engine/driver.rs +19 -2
- package/rust/core/audio/engine/export.rs +169 -169
- package/rust/core/audio/engine/mod.rs +56 -56
- package/rust/core/audio/engine/notes/dsp.rs +88 -85
- package/rust/core/audio/engine/notes/mod.rs +53 -44
- package/rust/core/audio/engine/notes/params.rs +294 -294
- package/rust/core/audio/engine/sample/insert.rs +148 -47
- package/rust/core/audio/engine/sample/mod.rs +40 -40
- package/rust/core/audio/engine/sample/padding.rs +170 -170
- package/rust/core/audio/evaluator/condition.rs +61 -61
- package/rust/core/audio/evaluator/numeric.rs +152 -152
- package/rust/core/audio/evaluator/rhs.rs +16 -16
- package/rust/core/audio/evaluator/string_expr.rs +94 -94
- package/rust/core/audio/interpreter/driver.rs +574 -574
- package/rust/core/audio/interpreter/mod.rs +2 -2
- package/rust/core/audio/interpreter/statements/arrow_call/interprete.rs +9 -5
- package/rust/core/audio/interpreter/statements/arrow_call/methods/chord.rs +398 -384
- package/rust/core/audio/interpreter/statements/arrow_call/methods/effects.rs +323 -0
- package/rust/core/audio/interpreter/statements/arrow_call/methods/mod.rs +1 -0
- package/rust/core/audio/interpreter/statements/arrow_call/methods/note.rs +66 -11
- package/rust/core/audio/interpreter/statements/arrow_call/mod.rs +3 -3
- package/rust/core/audio/interpreter/statements/arrow_call/types/arp.rs +192 -192
- package/rust/core/audio/interpreter/statements/arrow_call/types/mod.rs +24 -24
- package/rust/core/audio/interpreter/statements/arrow_call/types/pad.rs +116 -116
- package/rust/core/audio/interpreter/statements/arrow_call/types/pluck.rs +97 -97
- package/rust/core/audio/interpreter/statements/arrow_call/types/sub.rs +100 -100
- package/rust/core/audio/interpreter/statements/automate.rs +16 -16
- package/rust/core/audio/interpreter/statements/call.rs +31 -1
- package/rust/core/audio/interpreter/statements/condition.rs +72 -72
- package/rust/core/audio/interpreter/statements/function.rs +24 -24
- package/rust/core/audio/interpreter/statements/let_.rs +36 -36
- package/rust/core/audio/interpreter/statements/load.rs +17 -17
- package/rust/core/audio/interpreter/statements/loop_.rs +115 -115
- package/rust/core/audio/interpreter/statements/spawn.rs +51 -2
- package/rust/core/audio/interpreter/statements/trigger.rs +242 -239
- package/rust/core/audio/loader/trigger.rs +98 -98
- package/rust/core/audio/player.rs +70 -70
- package/rust/core/audio/special/mod.rs +9 -9
- package/rust/core/builder/mod.rs +129 -129
- package/rust/core/debugger/lexer.rs +27 -27
- package/rust/core/debugger/logs.rs +52 -52
- package/rust/core/debugger/preprocessor.rs +27 -27
- package/rust/core/debugger/store.rs +38 -38
- package/rust/core/lexer/driver.rs +59 -59
- package/rust/core/lexer/handler/arrow.rs +82 -82
- package/rust/core/lexer/handler/at.rs +21 -21
- package/rust/core/lexer/handler/brace.rs +41 -41
- package/rust/core/lexer/handler/colon.rs +21 -21
- package/rust/core/lexer/handler/comment.rs +30 -30
- package/rust/core/lexer/handler/dot.rs +21 -21
- package/rust/core/lexer/handler/driver.rs +337 -337
- package/rust/core/lexer/handler/identifier.rs +47 -47
- package/rust/core/lexer/handler/indent.rs +66 -66
- package/rust/core/lexer/handler/mod.rs +15 -15
- package/rust/core/lexer/handler/newline.rs +23 -23
- package/rust/core/lexer/handler/number.rs +31 -31
- package/rust/core/lexer/handler/operator.rs +46 -46
- package/rust/core/lexer/handler/parenthesis.rs +41 -41
- package/rust/core/lexer/handler/slash.rs +21 -21
- package/rust/core/lexer/handler/string.rs +63 -63
- package/rust/core/lexer/mod.rs +3 -3
- package/rust/core/mod.rs +9 -9
- package/rust/core/parser/driver/block.rs +111 -111
- package/rust/core/parser/driver/cursor.rs +82 -82
- package/rust/core/parser/driver/driver_impl.rs +21 -1
- package/rust/core/parser/driver/mod.rs +6 -6
- package/rust/core/parser/driver/parse_array.rs +120 -120
- package/rust/core/parser/driver/parse_map.rs +247 -223
- package/rust/core/parser/driver/parser.rs +160 -160
- package/rust/core/parser/handler/arrow_call.rs +65 -14
- package/rust/core/parser/handler/identifier/synth.rs +171 -135
- package/rust/core/parser/handler/mod.rs +9 -9
- package/rust/core/parser/handler/pattern.rs +24 -1
- package/rust/core/plugin/loader.rs +137 -137
- package/rust/core/plugin/mod.rs +2 -2
- package/rust/core/plugin/runner/non_wasm.rs +481 -297
- package/rust/core/plugin/runner/wasm32.rs +1 -0
- package/rust/core/preprocessor/loader/inject.rs +313 -278
- package/rust/core/preprocessor/loader/loader_helpers.rs +110 -110
- package/rust/core/preprocessor/loader/mod.rs +235 -235
- package/rust/core/preprocessor/module.rs +55 -55
- package/rust/core/preprocessor/processor/handlers.rs +107 -107
- package/rust/core/preprocessor/resolver/bank.rs +49 -49
- package/rust/core/preprocessor/resolver/call.rs +124 -124
- package/rust/core/preprocessor/resolver/condition.rs +95 -95
- package/rust/core/preprocessor/resolver/driver.rs +324 -324
- package/rust/core/preprocessor/resolver/function.rs +69 -69
- package/rust/core/preprocessor/resolver/group.rs +122 -122
- package/rust/core/preprocessor/resolver/let_.rs +32 -32
- package/rust/core/preprocessor/resolver/loop_.rs +318 -318
- package/rust/core/preprocessor/resolver/mod.rs +16 -16
- package/rust/core/preprocessor/resolver/pattern.rs +95 -83
- package/rust/core/preprocessor/resolver/spawn.rs +99 -99
- package/rust/core/preprocessor/resolver/synth.rs +54 -54
- package/rust/core/preprocessor/resolver/tempo.rs +48 -48
- package/rust/core/preprocessor/resolver/trigger.rs +116 -116
- package/rust/core/preprocessor/resolver/value.rs +176 -176
- package/rust/core/store/global.rs +57 -57
- package/rust/lib.rs +323 -323
- package/rust/macros/Cargo.toml +14 -0
- package/rust/macros/src/lib.rs +52 -0
- package/rust/main.rs +311 -142
- package/rust/types/Cargo.toml +1 -1
- package/rust/types/src/addons.rs +3 -1
- package/rust/types/src/config.rs +1 -3
- package/rust/utils/Cargo.toml +5 -2
- package/rust/utils/src/file.rs +397 -14
- package/rust/utils/src/path.rs +31 -2
- package/rust/utils/src/version.rs +38 -7
- package/rust/web/auth.rs +5 -0
- package/rust/web/forge.rs +5 -0
- package/rust/web/mod.rs +5 -3
- package/typescript/scripts/version/copy-to-binary.ts +82 -0
- package/rust/cli/bank/api.rs +0 -122
- package/rust/cli/bank/commands.rs +0 -306
- package/rust/cli/bank/mod.rs +0 -29
- package/rust/cli/install/bank.rs +0 -72
- package/rust/cli/install/commands.rs +0 -35
- package/rust/cli/install/mod.rs +0 -4
- package/rust/cli/install/plugin.rs +0 -80
|
@@ -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::{
|
|
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::
|
|
38
|
+
use devalang_types::TelemetryErrorLevel;
|
|
39
|
+
use devalang_utils::path::ensure_deva_dir;
|
|
40
40
|
use std::io;
|
|
41
41
|
|
|
42
42
|
#[tokio::main]
|
|
@@ -51,7 +51,7 @@ async fn main() -> io::Result<()> {
|
|
|
51
51
|
cmd = cmd.version(version_static).before_help(signature_static);
|
|
52
52
|
|
|
53
53
|
let raw_args: Vec<String> = std::env::args().collect();
|
|
54
|
-
if raw_args.iter().any(|a|
|
|
54
|
+
if raw_args.iter().any(|a| a == "--version" || a == "-V") {
|
|
55
55
|
println!("{}", signature_static);
|
|
56
56
|
return Ok(());
|
|
57
57
|
}
|
|
@@ -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!("
|
|
110
|
+
&format!("[error] Check failed: {}", err),
|
|
111
111
|
);
|
|
112
112
|
had_error = true;
|
|
113
113
|
last_error_message = Some(format!("check failed: {}", err));
|
|
@@ -139,7 +139,7 @@ async fn main() -> io::Result<()> {
|
|
|
139
139
|
let logger = devalang_utils::logger::Logger::new();
|
|
140
140
|
logger.log_message(
|
|
141
141
|
devalang_utils::logger::LogLevel::Error,
|
|
142
|
-
&format!("
|
|
142
|
+
&format!("[error] Build failed: {}", err),
|
|
143
143
|
);
|
|
144
144
|
had_error = true;
|
|
145
145
|
last_error_message = Some(format!("build failed: {}", err));
|
|
@@ -169,7 +169,7 @@ async fn main() -> io::Result<()> {
|
|
|
169
169
|
let logger = devalang_utils::logger::Logger::new();
|
|
170
170
|
logger.log_message(
|
|
171
171
|
devalang_utils::logger::LogLevel::Error,
|
|
172
|
-
&format!("
|
|
172
|
+
&format!("[error] Play failed: {}", err),
|
|
173
173
|
);
|
|
174
174
|
had_error = true;
|
|
175
175
|
last_error_message = Some(format!("play failed: {}", err));
|
|
@@ -177,144 +177,300 @@ async fn main() -> io::Result<()> {
|
|
|
177
177
|
}
|
|
178
178
|
}
|
|
179
179
|
|
|
180
|
-
Commands::
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
let
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
InstallCommand::Bank { name } => {
|
|
194
|
-
if let Err(err) = handle_install_command(name, AddonType::Bank).await {
|
|
195
|
-
let logger = devalang_utils::logger::Logger::new();
|
|
196
|
-
logger.log_message(
|
|
197
|
-
devalang_utils::logger::LogLevel::Error,
|
|
198
|
-
&format!("❌ Failed to install bank: {}", err),
|
|
199
|
-
);
|
|
200
|
-
had_error = true;
|
|
201
|
-
last_error_message = Some(format!("install bank failed: {}", err));
|
|
202
|
-
exit_code = Some(1);
|
|
203
|
-
}
|
|
204
|
-
}
|
|
205
|
-
InstallCommand::Plugin { name } => {
|
|
206
|
-
if let Err(err) = handle_install_command(name, AddonType::Plugin).await {
|
|
207
|
-
let logger = devalang_utils::logger::Logger::new();
|
|
208
|
-
logger.log_message(
|
|
209
|
-
devalang_utils::logger::LogLevel::Error,
|
|
210
|
-
&format!("❌ Failed to install plugin: {}", err),
|
|
211
|
-
);
|
|
212
|
-
had_error = true;
|
|
213
|
-
last_error_message = Some(format!("install plugin failed: {}", err));
|
|
214
|
-
exit_code = Some(1);
|
|
215
|
-
}
|
|
216
|
-
}
|
|
217
|
-
InstallCommand::Preset { name } => {
|
|
218
|
-
if let Err(err) = handle_install_command(name, AddonType::Preset).await {
|
|
219
|
-
let logger = devalang_utils::logger::Logger::new();
|
|
220
|
-
logger.log_message(
|
|
221
|
-
devalang_utils::logger::LogLevel::Error,
|
|
222
|
-
&format!("❌ Failed to install preset: {}", err),
|
|
223
|
-
);
|
|
224
|
-
had_error = true;
|
|
225
|
-
last_error_message = Some(format!("install preset failed: {}", err));
|
|
226
|
-
exit_code = Some(1);
|
|
227
|
-
}
|
|
228
|
-
}
|
|
229
|
-
},
|
|
230
|
-
|
|
231
|
-
Commands::Bank { command } => match command {
|
|
232
|
-
BankCommand::List => {
|
|
233
|
-
if let Err(err) = handle_bank_list_command().await {
|
|
234
|
-
let logger = devalang_utils::logger::Logger::new();
|
|
235
|
-
logger.log_message(
|
|
236
|
-
devalang_utils::logger::LogLevel::Error,
|
|
237
|
-
&format!("❌ Failed to list local banks: {}", err),
|
|
238
|
-
);
|
|
239
|
-
had_error = true;
|
|
240
|
-
last_error_message = Some(format!("bank list failed: {}", err));
|
|
241
|
-
exit_code = Some(1);
|
|
242
|
-
}
|
|
243
|
-
}
|
|
244
|
-
|
|
245
|
-
BankCommand::Available => {
|
|
246
|
-
if let Err(err) = handle_bank_available_command().await {
|
|
247
|
-
let logger = devalang_utils::logger::Logger::new();
|
|
248
|
-
logger.log_message(
|
|
249
|
-
devalang_utils::logger::LogLevel::Error,
|
|
250
|
-
&format!("❌ Failed to list available banks: {}", err),
|
|
251
|
-
);
|
|
252
|
-
had_error = true;
|
|
253
|
-
last_error_message = Some(format!("bank available failed: {}", err));
|
|
254
|
-
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
|
+
}
|
|
255
193
|
}
|
|
256
|
-
}
|
|
257
194
|
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
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
|
+
}
|
|
268
206
|
}
|
|
269
|
-
}
|
|
270
|
-
|
|
271
|
-
BankCommand::Remove { name } => {
|
|
272
|
-
if let Err(err) = handle_remove_bank_command(name).await {
|
|
273
|
-
let logger = devalang_utils::logger::Logger::new();
|
|
274
|
-
logger.log_message(
|
|
275
|
-
devalang_utils::logger::LogLevel::Error,
|
|
276
|
-
&format!("❌ Failed to remove bank: {}", err),
|
|
277
|
-
);
|
|
278
|
-
had_error = true;
|
|
279
|
-
last_error_message = Some(format!("bank remove failed: {}", err));
|
|
280
|
-
exit_code = Some(1);
|
|
281
|
-
}
|
|
282
|
-
}
|
|
283
207
|
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
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
|
+
}
|
|
294
219
|
}
|
|
295
|
-
}
|
|
296
|
-
},
|
|
297
220
|
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
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
|
+
// }
|
|
308
334
|
}
|
|
309
335
|
}
|
|
310
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
|
+
// }
|
|
311
467
|
Commands::Telemetry { command } => match command {
|
|
312
468
|
TelemetryCommand::Enable { .. } => {
|
|
313
469
|
if let Err(err) = handle_telemetry_enable_command().await {
|
|
314
470
|
let logger = devalang_utils::logger::Logger::new();
|
|
315
471
|
logger.log_message(
|
|
316
472
|
devalang_utils::logger::LogLevel::Error,
|
|
317
|
-
&format!("
|
|
473
|
+
&format!("[error] Failed to enable telemetry: {}", err),
|
|
318
474
|
);
|
|
319
475
|
had_error = true;
|
|
320
476
|
last_error_message = Some(format!("telemetry enable failed: {}", err));
|
|
@@ -326,7 +482,7 @@ async fn main() -> io::Result<()> {
|
|
|
326
482
|
let logger = devalang_utils::logger::Logger::new();
|
|
327
483
|
logger.log_message(
|
|
328
484
|
devalang_utils::logger::LogLevel::Error,
|
|
329
|
-
&format!("
|
|
485
|
+
&format!("[error] Failed to disable telemetry: {}", err),
|
|
330
486
|
);
|
|
331
487
|
had_error = true;
|
|
332
488
|
last_error_message = Some(format!("telemetry disable failed: {}", err));
|
|
@@ -335,12 +491,12 @@ async fn main() -> io::Result<()> {
|
|
|
335
491
|
}
|
|
336
492
|
},
|
|
337
493
|
|
|
338
|
-
Commands::Discover {} => {
|
|
339
|
-
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 {
|
|
340
496
|
let logger = devalang_utils::logger::Logger::new();
|
|
341
497
|
logger.log_message(
|
|
342
498
|
devalang_utils::logger::LogLevel::Error,
|
|
343
|
-
&format!("
|
|
499
|
+
&format!("[error] Failed to discover: {}", err),
|
|
344
500
|
);
|
|
345
501
|
had_error = true;
|
|
346
502
|
last_error_message = Some(format!("discover failed: {}", err));
|
|
@@ -353,7 +509,7 @@ async fn main() -> io::Result<()> {
|
|
|
353
509
|
let logger = devalang_utils::logger::Logger::new();
|
|
354
510
|
logger.log_message(
|
|
355
511
|
devalang_utils::logger::LogLevel::Error,
|
|
356
|
-
&format!("
|
|
512
|
+
&format!("[error] Login failed: {}", err),
|
|
357
513
|
);
|
|
358
514
|
had_error = true;
|
|
359
515
|
last_error_message = Some(format!("login failed: {}", err));
|
|
@@ -361,11 +517,24 @@ async fn main() -> io::Result<()> {
|
|
|
361
517
|
}
|
|
362
518
|
}
|
|
363
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
|
+
|
|
364
533
|
Commands::Logout { .. } => {
|
|
365
534
|
let logger = devalang_utils::logger::Logger::new();
|
|
366
535
|
logger.log_message(
|
|
367
536
|
devalang_utils::logger::LogLevel::Error,
|
|
368
|
-
"
|
|
537
|
+
"[error] Logout command is not implemented yet.",
|
|
369
538
|
);
|
|
370
539
|
had_error = true;
|
|
371
540
|
last_error_message = Some("logout not implemented".to_string());
|
package/rust/types/Cargo.toml
CHANGED
package/rust/types/src/addons.rs
CHANGED
|
@@ -4,6 +4,7 @@ use serde::Deserialize;
|
|
|
4
4
|
pub struct DiscoveredAddon {
|
|
5
5
|
pub path: std::path::PathBuf,
|
|
6
6
|
pub name: String,
|
|
7
|
+
pub publisher: String,
|
|
7
8
|
pub extension: String,
|
|
8
9
|
pub addon_type: String,
|
|
9
10
|
}
|
|
@@ -12,6 +13,7 @@ pub struct DiscoveredAddon {
|
|
|
12
13
|
pub struct AddonWithMetadata {
|
|
13
14
|
pub name: String,
|
|
14
15
|
pub path: String,
|
|
16
|
+
pub publisher: String,
|
|
15
17
|
pub addon_type: String,
|
|
16
18
|
pub metadata: AddonMetadata,
|
|
17
19
|
}
|
|
@@ -19,7 +21,7 @@ pub struct AddonWithMetadata {
|
|
|
19
21
|
#[derive(Debug, Clone)]
|
|
20
22
|
pub struct AddonMetadata {
|
|
21
23
|
pub name: String,
|
|
22
|
-
pub
|
|
24
|
+
pub publisher: String,
|
|
23
25
|
pub version: String,
|
|
24
26
|
pub description: String,
|
|
25
27
|
pub access: String,
|