From 56f658da1e3c1588ce28367694387b144d4cfcf1 Mon Sep 17 00:00:00 2001 From: Sebastian Moser Date: Wed, 18 Feb 2026 16:08:39 +0100 Subject: [PATCH] ppc cli runs --- Cargo.lock | 279 ++++++++++--------------- Cargo.toml | 9 +- crates/macro_mize/src/lib.rs | 10 +- crates/marts/Cargo.toml | 10 + crates/{parts => marts}/src/cli/mod.rs | 33 ++- crates/{parts => marts}/src/js/mod.rs | 105 ++++------ crates/marts/src/lib.rs | 4 + crates/mize/Cargo.toml | 4 +- crates/mize/src/core/instance/mod.rs | 25 ++- crates/parts/Cargo.toml | 5 - crates/parts/src/lib.rs | 3 - crates/ppc/Cargo.toml | 13 +- crates/ppc/src/main.rs | 31 --- crates/ppc/src/platform/os/main.rs | 35 ++++ crates/vic/Cargo.toml | 18 +- 15 files changed, 292 insertions(+), 292 deletions(-) create mode 100644 crates/marts/Cargo.toml rename crates/{parts => marts}/src/cli/mod.rs (51%) rename crates/{parts => marts}/src/js/mod.rs (64%) create mode 100644 crates/marts/src/lib.rs delete mode 100644 crates/parts/Cargo.toml delete mode 100644 crates/parts/src/lib.rs delete mode 100644 crates/ppc/src/main.rs create mode 100644 crates/ppc/src/platform/os/main.rs diff --git a/Cargo.lock b/Cargo.lock index 94fe878..7641ae3 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -120,6 +120,28 @@ version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8" +[[package]] +name = "aws-lc-rs" +version = "1.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d9a7b350e3bb1767102698302bc37256cbd48422809984b98d292c40e2579aa9" +dependencies = [ + "aws-lc-sys", + "zeroize", +] + +[[package]] +name = "aws-lc-sys" +version = "0.37.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b092fe214090261288111db7a2b2c2118e5a7f30dc2569f1732c4069a6840549" +dependencies = [ + "cc", + "cmake", + "dunce", + "fs_extra", +] + [[package]] name = "axum" version = "0.6.20" @@ -406,6 +428,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "47b26a0954ae34af09b50f0de26458fa95369a0d478d8236d3f93082b219bd29" dependencies = [ "find-msvc-tools", + "jobserver", + "libc", "shlex", ] @@ -487,9 +511,9 @@ dependencies = [ [[package]] name = "clap" -version = "4.5.57" +version = "4.5.59" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6899ea499e3fb9305a65d5ebf6e3d2248c5fab291f300ad0a704fbe142eae31a" +checksum = "c5caf74d17c3aec5495110c34cc3f78644bfa89af6c8993ed4de2790e49b6499" dependencies = [ "clap_builder", "clap_derive", @@ -497,9 +521,9 @@ dependencies = [ [[package]] name = "clap_builder" -version = "4.5.57" +version = "4.5.59" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b12c8b680195a62a8364d16b8447b01b6c2c8f9aaf68bee653be34d4245e238" +checksum = "370daa45065b80218950227371916a1633217ae42b2715b2287b606dcd618e24" dependencies = [ "anstream", "anstyle", @@ -521,16 +545,17 @@ dependencies = [ [[package]] name = "clap_lex" -version = "0.7.7" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3e64b0cc0439b12df2fa678eae89a1c56a529fd067a9115f7827f1fffd22b32" +checksum = "3a822ea5bc7590f9d40f1ba12c0dc3c2760f3482c6984db1573ad11031420831" [[package]] -name = "cli" -version = "0.1.0" +name = "cmake" +version = "0.1.57" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75443c44cd6b379beb8c5b45d85d0773baf31cce901fe7bb252f4eff3008ef7d" dependencies = [ - "clap", - "mize", + "cc", ] [[package]] @@ -565,16 +590,6 @@ version = "5.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "147be55d677052dabc6b22252d5dd0fd4c29c8c27aa4f2fbef0f94aa003b406f" -[[package]] -name = "core-foundation" -version = "0.9.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91e195e091a93c46f7102ec7818a2aa394e1e1771c3ab4825963fa03e45afb8f" -dependencies = [ - "core-foundation-sys", - "libc", -] - [[package]] name = "core-foundation-sys" version = "0.8.7" @@ -676,9 +691,9 @@ dependencies = [ [[package]] name = "deno_core" -version = "0.383.0" +version = "0.385.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee60c193b9e93726558e20dca14b36db7fccfebdf4479271e834e52709d101ca" +checksum = "e348ea58ad12f6bee5407768b571a8af09756246a45c83dfd27a5aeeb338c5eb" dependencies = [ "anyhow", "az", @@ -746,9 +761,9 @@ dependencies = [ [[package]] name = "deno_ops" -version = "0.259.0" +version = "0.261.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4e102069f83f92da6cba0867ffc9bfe3a5a98fa8b01e49687da764d64e91810d" +checksum = "86077bea01b43941082edef61e150fa661bab25a839f17592bb763faaae0c14b" dependencies = [ "indexmap 2.13.0", "proc-macro2", @@ -847,6 +862,12 @@ dependencies = [ "syn", ] +[[package]] +name = "dunce" +version = "1.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "92773504d58c093f6de2459af4af33faa518c13451eb8f2b5698ed3d36e7c813" + [[package]] name = "dyn-clone" version = "1.0.20" @@ -961,21 +982,6 @@ version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2" -[[package]] -name = "foreign-types" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1" -dependencies = [ - "foreign-types-shared", -] - -[[package]] -name = "foreign-types-shared" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" - [[package]] name = "form_urlencoded" version = "1.2.2" @@ -985,6 +991,12 @@ dependencies = [ "percent-encoding", ] +[[package]] +name = "fs_extra" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42703706b716c37f96a77aea830392ad231f44c9e9a67872fa5548707e11b11c" + [[package]] name = "fslock" version = "0.2.1" @@ -1045,9 +1057,9 @@ dependencies = [ [[package]] name = "futures-io" -version = "0.3.31" +version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e5c1b78ca4aae1ac06c48a526a655760685149f0d465d21f37abfe57ce075c6" +checksum = "cecba35d7ad927e23624b22ad55235f2239cfa44fd10428eecbeba6d6a717718" [[package]] name = "futures-macro" @@ -1276,10 +1288,15 @@ checksum = "add0ab9360ddbd88cfeb3bd9574a1d85cfdfa14db10b3e21d3700dbc4328758f" [[package]] name = "http_req" version = "0.12.0" -source = "git+https://github.com/c2vi/http_req#46b0f93087ef6f68a360b303192e30ecb7b055e2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "92208b0986f414edaca8ede2c6962c979309346a9e8e19d07d0a7879aae1549e" dependencies = [ - "native-tls", + "rustls", + "rustls-pemfile", + "rustls-pki-types", "unicase", + "webpki", + "webpki-roots 0.26.11", ] [[package]] @@ -1582,6 +1599,16 @@ dependencies = [ "syn", ] +[[package]] +name = "jobserver" +version = "0.1.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9afb3de4395d6b3e67a780b6de64b51c978ecf11cb9a462c66be7d4ca9039d33" +dependencies = [ + "getrandom 0.3.4", + "libc", +] + [[package]] name = "js-sys" version = "0.3.85" @@ -1592,15 +1619,6 @@ dependencies = [ "wasm-bindgen", ] -[[package]] -name = "js_part" -version = "0.1.0" -dependencies = [ - "deno_core", - "mize", - "tokio", -] - [[package]] name = "lazy_static" version = "1.5.0" @@ -1685,6 +1703,15 @@ version = "0.4.29" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5e5032e24019045c762d3c0f28f5b6b8bbf38563a65908389bf7978758920897" +[[package]] +name = "marts" +version = "0.1.0" +dependencies = [ + "clap", + "deno_core", + "mize", +] + [[package]] name = "matchers" version = "0.2.0" @@ -1843,23 +1870,6 @@ dependencies = [ "getrandom 0.2.17", ] -[[package]] -name = "native-tls" -version = "0.2.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87de3442987e9dbec73158d5c715e7ad9072fda936bb03d19d7fa10e00520f0e" -dependencies = [ - "libc", - "log", - "openssl", - "openssl-probe", - "openssl-sys", - "schannel", - "security-framework", - "security-framework-sys", - "tempfile", -] - [[package]] name = "nix" version = "0.27.1" @@ -1972,50 +1982,6 @@ version = "11.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d6790f58c7ff633d8771f42965289203411a5e5c68388703c06e14f24770b41e" -[[package]] -name = "openssl" -version = "0.10.75" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08838db121398ad17ab8531ce9de97b244589089e290a384c900cb9ff7434328" -dependencies = [ - "bitflags 2.10.0", - "cfg-if 1.0.4", - "foreign-types", - "libc", - "once_cell", - "openssl-macros", - "openssl-sys", -] - -[[package]] -name = "openssl-macros" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "openssl-probe" -version = "0.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d05e27ee213611ffe7d6348b942e8f942b37114c00cc03cec254295a4a17852e" - -[[package]] -name = "openssl-sys" -version = "0.9.111" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "82cab2d520aa75e3c58898289429321eb788c3106963d0dc886ec7a5f4adc321" -dependencies = [ - "cc", - "libc", - "pkg-config", - "vcpkg", -] - [[package]] name = "outref" version = "0.5.2" @@ -2089,12 +2055,6 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" -[[package]] -name = "pkg-config" -version = "0.3.32" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7edddbd0b52d732b21ad9a5fab5c704c14cd949e5e9a1ec5929a24fded1b904c" - [[package]] name = "portable-atomic" version = "1.13.1" @@ -2131,7 +2091,8 @@ checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" name = "ppc" version = "0.1.0" dependencies = [ - "js_part", + "clap", + "marts", "mize", ] @@ -2377,6 +2338,7 @@ version = "0.23.36" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c665f33d38cea657d9614f766881e4d510e0eda4239891eea56b4cadcf01801b" dependencies = [ + "aws-lc-rs", "log", "once_cell", "ring", @@ -2386,6 +2348,15 @@ dependencies = [ "zeroize", ] +[[package]] +name = "rustls-pemfile" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dce314e5fee3f39953d46bb63bb8a46d40c2f8fb7cc5a3b6cab2bde9721d6e50" +dependencies = [ + "rustls-pki-types", +] + [[package]] name = "rustls-pki-types" version = "1.14.0" @@ -2401,6 +2372,7 @@ version = "0.103.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d7df23109aa6c1567d1c575b9952556388da57401e4ace1d15f79eedad0d8f53" dependencies = [ + "aws-lc-rs", "ring", "rustls-pki-types", "untrusted", @@ -2433,44 +2405,12 @@ dependencies = [ "winapi-util", ] -[[package]] -name = "schannel" -version = "0.1.28" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "891d81b926048e76efe18581bf793546b4c0eaf8448d72be8de2bbee5fd166e1" -dependencies = [ - "windows-sys 0.61.2", -] - [[package]] name = "scopeguard" version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" -[[package]] -name = "security-framework" -version = "2.11.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "897b2245f0b511c87893af39b033e5ca9cce68824c4d7e7630b5a1d339658d02" -dependencies = [ - "bitflags 2.10.0", - "core-foundation", - "core-foundation-sys", - "libc", - "security-framework-sys", -] - -[[package]] -name = "security-framework-sys" -version = "2.15.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc1f0cbffaac4852523ce30d8bd3c5cdc873501d96ff467ca09b6767bb8cd5c0" -dependencies = [ - "core-foundation-sys", - "libc", -] - [[package]] name = "semver" version = "1.0.27" @@ -2566,9 +2506,9 @@ dependencies = [ [[package]] name = "serde_v8" -version = "0.292.0" +version = "0.294.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0d7af6a35bbed7c8d91b951608bf2e820a077992bf3dde06ef016af6e7b503f" +checksum = "8386a10eddc03e63b28ad6963dbd0552470b430419d81fd6409e19e28146a3c8" dependencies = [ "deno_error", "num-bigint", @@ -2797,9 +2737,9 @@ dependencies = [ [[package]] name = "sys_traits" -version = "0.1.22" +version = "0.1.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4121e69c72108134f9daf82cf6580269f018f5d8fb8cd3063df17699fbb84cb1" +checksum = "5410f31d223892c1ce7a098da845c99d023b4c7f18632bc8f09e60dfae3cbb75" dependencies = [ "sys_traits_macros", ] @@ -3294,7 +3234,7 @@ dependencies = [ "rustls-pki-types", "ureq-proto", "utf-8", - "webpki-roots", + "webpki-roots 1.0.5", ] [[package]] @@ -3373,12 +3313,6 @@ version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ba73ea9cf16a25df0c8caa16c51acb937d5712a8429db78a3ee29d5dcacd3a65" -[[package]] -name = "vcpkg" -version = "0.2.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" - [[package]] name = "version_check" version = "0.9.5" @@ -3635,6 +3569,25 @@ dependencies = [ "wasm-bindgen", ] +[[package]] +name = "webpki" +version = "0.22.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed63aea5ce73d0ff405984102c42de94fc55a6b75765d621c65262469b3c9b53" +dependencies = [ + "ring", + "untrusted", +] + +[[package]] +name = "webpki-roots" +version = "0.26.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "521bc38abb08001b01866da9f51eb7c5d647a19260e00054a8c7fd5f9e57f7a9" +dependencies = [ + "webpki-roots 1.0.5", +] + [[package]] name = "webpki-roots" version = "1.0.5" diff --git a/Cargo.toml b/Cargo.toml index a8718f8..b52a3dd 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -2,6 +2,9 @@ resolver = "2" members = [ "crates/mize", - "crates/vic", - "crates/ppc" -, "crates/parts", "crates/macro_mize", "crates/mme"] + #"crates/vic", + "crates/ppc", + "crates/marts", + "crates/macro_mize", + #"crates/mme", +] diff --git a/crates/macro_mize/src/lib.rs b/crates/macro_mize/src/lib.rs index 27e30db..0f17b8b 100644 --- a/crates/macro_mize/src/lib.rs +++ b/crates/macro_mize/src/lib.rs @@ -35,6 +35,7 @@ pub fn mize_part(attr: TokenStream, item: TokenStream) -> TokenStream { let expanded = quote! { #input + use std::any::Any; // impl the default new impl impl mize::MizePartGenerated for #struct_name { @@ -45,20 +46,21 @@ pub fn mize_part(attr: TokenStream, item: TokenStream) -> TokenStream { &mut self.mize } fn as_any_generated(&self) -> &dyn Any { - &self + self } - fn as_any_mut_generated(&mut self) -> &dyn Any { - &mut self + fn as_any_mut_generated(&mut self) -> &mut dyn Any { + self } fn into_any_generated(self: Box) -> Box { self } } + impl mize::MizePartCreateGenerated for #struct_name { fn create_generated(mize: Mize) -> Self { Self { mize, - ... Default::default(), + .. Default::default() } } } diff --git a/crates/marts/Cargo.toml b/crates/marts/Cargo.toml new file mode 100644 index 0000000..1ae6abe --- /dev/null +++ b/crates/marts/Cargo.toml @@ -0,0 +1,10 @@ +[package] +name = "marts" +description = "marts = mize_parts - parts collection of the Mize framework" +version = "0.1.0" +edition = "2021" + +[dependencies] +clap = "4.5.59" +deno_core = "0.385.0" +mize = { path = "../mize/" } diff --git a/crates/parts/src/cli/mod.rs b/crates/marts/src/cli/mod.rs similarity index 51% rename from crates/parts/src/cli/mod.rs rename to crates/marts/src/cli/mod.rs index 1da63b9..9fd368c 100644 --- a/crates/parts/src/cli/mod.rs +++ b/crates/marts/src/cli/mod.rs @@ -1,16 +1,26 @@ use clap::{ArgMatches, Command}; -use std::any::Any; use std::collections::HashMap; -use mize::{Mize, MizePart, MizeResult, instance::MizePartGuard}; +use mize::{mize_part, Mize, MizePart, MizeResult}; #[mize_part("cli")] -struct CliPart { +#[derive(Default)] +pub struct CliPart { mize: Mize, cmd: Option, actions: HashMap MizeResult<()>>, } +pub fn cli(mize: &mut Mize) -> MizeResult<()> { + let cli_part = CliPart { + mize: mize.clone(), + cmd: Some(Command::new("marts-cli")), + actions: HashMap::new(), + }; + + mize.register_part(Box::new(cli_part)) +} + impl MizePart for CliPart { fn init(&mut self, _mize: &mut Mize) -> MizeResult<()> { Ok(()) @@ -19,7 +29,7 @@ impl MizePart for CliPart { let matches = self.cmd.take().unwrap().get_matches(); let sub_cmd = matches.subcommand_name().unwrap(); let action = self.actions.get(sub_cmd).unwrap(); - action(matches.subcommand_matches(sub_cmd).unwrap()); + action(matches.subcommand_matches(sub_cmd).unwrap())?; Ok(()) } fn opts(&self, mize: &mut Mize) { @@ -30,12 +40,21 @@ impl MizePart for CliPart { impl CliPart { pub fn subcommand( &mut self, - cmd: Command, + subcmd: Command, action: fn(sub_matches: &ArgMatches) -> MizeResult<()>, ) -> &mut Command { - let cmd = self.cmd.take().unwrap().subcommand(cmd); - self.actions.insert(cmd.get_name().to_string(), action); + let name = subcmd.get_name().to_string(); + let cmd = self.cmd.take().unwrap().subcommand(subcmd); + self.actions.insert(name, action); self.cmd = Some(cmd); self.cmd.as_mut().unwrap() } + pub fn with_cmd( + &mut self, + func: fn(mize: Mize, cmd: Command) -> MizeResult, + ) -> MizeResult<()> { + let cmd = func(self.mize.clone(), self.cmd.take().unwrap())?; + self.cmd = Some(cmd); + Ok(()) + } } diff --git a/crates/parts/src/js/mod.rs b/crates/marts/src/js/mod.rs similarity index 64% rename from crates/parts/src/js/mod.rs rename to crates/marts/src/js/mod.rs index 0eae8e6..957b25a 100644 --- a/crates/parts/src/js/mod.rs +++ b/crates/marts/src/js/mod.rs @@ -1,9 +1,9 @@ -use deno_core::FsModuleLoader; use deno_core::error::AnyError; -use deno_core::{JsRuntime, ModuleSpecifier, PollEventLoopOptions, RuntimeOptions, extension, op2}; +use deno_core::FsModuleLoader; +use deno_core::{extension, op2, JsRuntime, ModuleSpecifier, PollEventLoopOptions, RuntimeOptions}; use mize::async_trait; use mize::instance::MizePartCreate; -use mize::{Mize, MizePart, MizeResult, mize_part}; +use mize::{mize_part, Mize, MizePart, MizeResult}; use std::path::Path; use std::rc::Rc; @@ -13,38 +13,52 @@ pub struct JsPart { js_runtime: JsRuntime, } +// Define your custom ops for the "mize" object inside deno +#[op2(fast)] +fn op_mize_get_part(#[string] name: &str) { + println!("js wants the part {}", name); +} + +#[op2] +#[string] +fn op_mize_get_config(#[string] key: &str) -> String { + format!("config_value_for_{}", key) +} + +// Create an extension with your custom ops +extension!(mize_ext, ops = [op_mize_get_part, op_mize_get_config]); + impl MizePart for JsPart { fn init(&mut self, mize: &mut Mize) -> MizeResult<()> { println!("js part init"); Ok(()) } } -impl MizePartCreate for JsPart { - fn create(mize: &mut Mize) -> Box { - let mut js_runtime = JsRuntime::new(RuntimeOptions { - module_loader: Some(Rc::new(FsModuleLoader)), - extensions: vec![mize_ext::init_ops()], - ..Default::default() - }); - let bootstrap_code = r#" - globalThis.mize = { - get_part: (name) => Deno.core.ops.op_mize_get_part(name), - get_config: (key) => Deno.core.ops.op_mize_get_config(key), - version: "1.0.0", - // Add more methods as needed - }; - "#; - js_runtime.execute_script("[bootstrap]", bootstrap_code)?; - JsPart { mize, js_runtime } - } +fn js(mize: &mut Mize) -> Box { + let mut js_runtime = JsRuntime::new(RuntimeOptions { + module_loader: Some(Rc::new(FsModuleLoader)), + extensions: vec![mize_ext::init_ops()], + ..Default::default() + }); + let bootstrap_code = r#" + globalThis.mize = { + get_part: (name) => Deno.core.ops.op_mize_get_part(name), + get_config: (key) => Deno.core.ops.op_mize_get_config(key), + version: "1.0.0", + // Add more methods as needed + }; + "#; + + js_runtime.execute_script("[bootstrap]", bootstrap_code)?; + JsPart { mize, js_runtime } } impl JsPart { pub fn part_from_js_file( &mut self, name: &'static str, - path: &str, + path: &'static str, ) -> Box { Box::new(PartFromJsFileAdapter { mize: self.mize.clone(), @@ -52,6 +66,9 @@ impl JsPart { js_file: path, }) } + pub fn runtime(&mut self) -> &mut JsRuntime { + &mut self.js_runtime + } } #[mize_part] @@ -70,7 +87,7 @@ impl MizePart for PartFromJsFileAdapter { self.name } async fn async_init(&mut self, mize: &mut Mize) -> MizeResult<()> { - let js: JsPart = mize.get_part_native("js"); + let js = mize.get_part_native::("js")?; let path = self.js_file; let js_code = format!( r#" @@ -96,13 +113,13 @@ impl MizePart for PartFromJsFileAdapter { ); // Execute the script - let result = js.runtime.execute_script("[main]", js_code)?; + let result = js.runtime().execute_script("[main]", js_code)?; // Resolve the promise and run event loop - let resolved_value = js.runtime.resolve_value(result).await?; + let resolved_value = js.runtime().resolve_value(result).await?; // Run the event loop to completion - js.runtime + js.runtime() .run_event_loop(PollEventLoopOptions::default()) .await?; @@ -110,7 +127,7 @@ impl MizePart for PartFromJsFileAdapter { Ok(()) } async fn async_run(&mut self, mize: &mut Mize) -> MizeResult<()> { - let js: JsPart = mize.get_part_native("js"); + let js = mize.get_part_native::("js")?; let path = self.js_file; let js_code = format!( r#" @@ -122,13 +139,13 @@ impl MizePart for PartFromJsFileAdapter { "# ); // Execute the script - let result = js.runtime.execute_script("[main]", js_code)?; + let result = js.runtime().execute_script("[main]", js_code)?; // Resolve the promise and run event loop let resolved_value = js.runtime.resolve_value(result).await?; // Run the event loop to completion - js.runtime + js.runtime() .run_event_loop(PollEventLoopOptions::default()) .await?; @@ -136,33 +153,3 @@ impl MizePart for PartFromJsFileAdapter { Ok(()) } } - -/* -async fn run_js_file(file_path: &str) -> Result<(), AnyError> { - let main_module = deno_core::resolve_path(file_path, &std::env::current_dir()?)?; - let mut js_runtime = deno_core::JsRuntime::new(deno_core::RuntimeOptions { - module_loader: Some(Rc::new(deno_core::FsModuleLoader)), - ..Default::default() - }); - - let mod_id = js_runtime.load_main_es_module(&main_module).await?; - let result = js_runtime.mod_evaluate(mod_id); - js_runtime.run_event_loop(Default::default()).await?; - result.await -} - */ - -// Define your custom ops for the "mize" object inside deno -#[op2(fast)] -fn op_mize_get_part(#[string] name: &str) { - println!("js wants the part {}", name); -} - -#[op2] -#[string] -fn op_mize_get_config(#[string] key: &str) -> String { - format!("config_value_for_{}", key) -} - -// Create an extension with your custom ops -extension!(mize_ext, ops = [op_mize_get_part, op_mize_get_config]); diff --git a/crates/marts/src/lib.rs b/crates/marts/src/lib.rs new file mode 100644 index 0000000..76febdf --- /dev/null +++ b/crates/marts/src/lib.rs @@ -0,0 +1,4 @@ +mod cli; +pub use cli::*; + +//mod js; diff --git a/crates/mize/Cargo.toml b/crates/mize/Cargo.toml index 118159d..f1a2e7e 100644 --- a/crates/mize/Cargo.toml +++ b/crates/mize/Cargo.toml @@ -66,8 +66,8 @@ ciborium-io = { version = "0.2.2", optional = true } tracing-core = { version = "0.1.32", optional = true } tar = { version = "0.4.42", optional = true } flate2 = { version = "1.0.33", optional = true } -#http_req = { version = "0.12.0", default-features = false, features = [ "rustls" ], optional = true } -http_req = { git = "https://github.com/c2vi/http_req", optional = true, default-features = false, features = [ "native-tls" ] } +http_req = { version = "0.12.0", default-features = false, features = [ "rust-tls" ], optional = true } +#http_req = { git = "https://github.com/c2vi/http_req", optional = true, default-features = false, features = [ "native-tls" ] } # bare dependencies diff --git a/crates/mize/src/core/instance/mod.rs b/crates/mize/src/core/instance/mod.rs index 2a7743f..8ef4326 100644 --- a/crates/mize/src/core/instance/mod.rs +++ b/crates/mize/src/core/instance/mod.rs @@ -104,22 +104,25 @@ pub struct MizePartGuard { pub part: Option, } -impl> Deref for MizePartGuard { +impl Deref for MizePartGuard { type Target = T; fn deref(&self) -> &Self::Target { - &*self.part.as_deref().unwrap() + &*self.part.as_ref().unwrap() } } -impl> DerefMut for MizePartGuard { +impl DerefMut for MizePartGuard { fn deref_mut(&mut self) -> &mut Self::Target { - &mut *self.part.as_deref_mut().unwrap() + &mut *self.part.as_mut().unwrap() } } impl Drop for MizePartGuard { fn drop(&mut self) { + if self.part.is_none() { + return; + } let part = self.part.take().unwrap(); self.mize.give_back_part(Box::new(part)); } @@ -141,6 +144,9 @@ impl DerefMut for DynMizePartGuard { impl Drop for DynMizePartGuard { fn drop(&mut self) { + if self.part.is_none() { + return; + } self.mize.give_back_part(self.part.take().unwrap()); } } @@ -311,6 +317,11 @@ impl Mize { self.parts.lock().unwrap().insert(part.name(), Some(part)); Ok(()) } + pub fn register_part(&mut self, part: Box) -> MizeResult<()> { + self.part_names.lock().unwrap().push(part.name()); + self.parts.lock().unwrap().insert(part.name(), Some(part)); + Ok(()) + } fn part_names(&mut self) -> Vec<&'static str> { self.part_names.lock().unwrap().clone() } @@ -854,3 +865,9 @@ impl fmt::Debug for Mize { write!(f, "Mize Instance with subs: {:?}", self.subs,) } } + +impl Default for Mize { + fn default() -> Self { + Self::empty().unwrap() + } +} diff --git a/crates/parts/Cargo.toml b/crates/parts/Cargo.toml deleted file mode 100644 index d19b2b1..0000000 --- a/crates/parts/Cargo.toml +++ /dev/null @@ -1,5 +0,0 @@ -[package] -name = "mize_parts" -version = "0.1.0" -edition = "2021" - diff --git a/crates/parts/src/lib.rs b/crates/parts/src/lib.rs deleted file mode 100644 index 9436895..0000000 --- a/crates/parts/src/lib.rs +++ /dev/null @@ -1,3 +0,0 @@ - -mod cli; -mod js; diff --git a/crates/ppc/Cargo.toml b/crates/ppc/Cargo.toml index 61d86f2..f0056c9 100644 --- a/crates/ppc/Cargo.toml +++ b/crates/ppc/Cargo.toml @@ -4,5 +4,14 @@ version = "0.1.0" edition = "2024" [dependencies] -mize = { path = "../../parts/mize" } -js_part = { path = "../../parts/js" } +mize = { path = "../mize" } +marts = { path = "../marts/" } +clap = "4.5.59" + +[[bin]] +name = "ppc" +path = "src/platform/os/main.rs" + +[features] +default = ["target-os"] +target-os = [] diff --git a/crates/ppc/src/main.rs b/crates/ppc/src/main.rs deleted file mode 100644 index 3b3ec9c..0000000 --- a/crates/ppc/src/main.rs +++ /dev/null @@ -1,31 +0,0 @@ -use std::collections::HashMap; - -use clap::crate_version; -use cli_part::Cli; -use config::Config; -use deno_part::JsPart; -use mize::{ - DynMizePartGuard, Mize, MizeError, MizePart, MizePartGuard, MizeResult, add_parts, mize_err, -}; - -fn main() { - let mut mize = Mize::new(); - - add_parts!(&mut mize, Cli); - - let cli = mize.get_part_native::("cli"); - - cli.with_cmd(|cmd| { - cmd.version(crate_version!()) - .name("ppc") - .author("ppc") - .about("the ppc desktop program") - }); - - cli.subcommand(Command::new("test"), |sub_matches| { - println!("test ppc..."); - Ok(()) - }); - - mize.run(); -} diff --git a/crates/ppc/src/platform/os/main.rs b/crates/ppc/src/platform/os/main.rs new file mode 100644 index 0000000..712a9a8 --- /dev/null +++ b/crates/ppc/src/platform/os/main.rs @@ -0,0 +1,35 @@ +use std::collections::HashMap; + +use clap::Command; +use clap::crate_version; +use mize::{Mize, MizeResult}; + +fn main() { + let mut mize = Mize::new().expect("failed to create mize instance"); + + #[cfg(feature = "target-os")] + os_main(&mut mize); + + mize.run(); +} + +#[cfg(feature = "target-os")] +fn os_main(mize: &mut Mize) -> MizeResult<()> { + marts::cli(mize)?; + + let mut cli = mize.get_part_native::("cli")?; + + cli.with_cmd(|_, cmd| { + Ok(cmd + .version(crate_version!()) + .name("ppc") + .author("ppc") + .about("the ppc desktop program")) + })?; + + cli.subcommand(Command::new("test"), |_| { + println!("test ppc..."); + Ok(()) + }); + Ok(()) +} diff --git a/crates/vic/Cargo.toml b/crates/vic/Cargo.toml index aec7d93..3e7a97d 100644 --- a/crates/vic/Cargo.toml +++ b/crates/vic/Cargo.toml @@ -23,18 +23,18 @@ serde_json = "1.0.117" tar = "0.4.44" umask = "2.1.0" #mize = { git = "https://github.com/c2vi/mize", default-features = false } -mize = { path = "/home/me/work/mize", default-features = false, features = ["os-target"] } +mize = { path = "../mize", default-features = false, features = ["os-target"] } # snix testing #snix-cli = { git = "https://git.snix.dev/snix/snix" } -snix-tracing = { path = "./gitignore/snix/snix/tracing" } -snix-cli = { path = "./gitignore/snix/snix/cli" } -snix-store = { path = "./gitignore/snix/snix/store", features = [ "xp-composition-cli" ] } -snix-castore = { path = "./gitignore/snix/snix/castore", features = ["xp-composition-cli", "xp-composition-url-refs" ] } -snix-eval = { path = "./gitignore/snix/snix/eval" } -snix-glue = { path = "./gitignore/snix/snix/glue" } -snix-build = { path = "./gitignore/snix/snix/build" } -nix-compat = { path = "./gitignore/snix/snix/nix-compat" } +#snix-tracing = { path = "./gitignore/snix/snix/tracing" } +#snix-cli = { path = "./gitignore/snix/snix/cli" } +#snix-store = { path = "./gitignore/snix/snix/store", features = [ "xp-composition-cli" ] } +#snix-castore = { path = "./gitignore/snix/snix/castore", features = ["xp-composition-cli", "xp-composition-url-refs" ] } +#snix-eval = { path = "./gitignore/snix/snix/eval" } +#snix-glue = { path = "./gitignore/snix/snix/glue" } +#snix-build = { path = "./gitignore/snix/snix/build" } +#nix-compat = { path = "./gitignore/snix/snix/nix-compat" } tokio = "1.45.0" tracing = "0.1.41" tracing-indicatif = "0.3.9"