ppc cli runs

This commit is contained in:
Sebastian Moser
2026-02-18 16:08:39 +01:00
parent 0b7e54dc1d
commit 56f658da1e
15 changed files with 292 additions and 292 deletions

279
Cargo.lock generated
View File

@@ -120,6 +120,28 @@ version = "1.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8" 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]] [[package]]
name = "axum" name = "axum"
version = "0.6.20" version = "0.6.20"
@@ -406,6 +428,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "47b26a0954ae34af09b50f0de26458fa95369a0d478d8236d3f93082b219bd29" checksum = "47b26a0954ae34af09b50f0de26458fa95369a0d478d8236d3f93082b219bd29"
dependencies = [ dependencies = [
"find-msvc-tools", "find-msvc-tools",
"jobserver",
"libc",
"shlex", "shlex",
] ]
@@ -487,9 +511,9 @@ dependencies = [
[[package]] [[package]]
name = "clap" name = "clap"
version = "4.5.57" version = "4.5.59"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6899ea499e3fb9305a65d5ebf6e3d2248c5fab291f300ad0a704fbe142eae31a" checksum = "c5caf74d17c3aec5495110c34cc3f78644bfa89af6c8993ed4de2790e49b6499"
dependencies = [ dependencies = [
"clap_builder", "clap_builder",
"clap_derive", "clap_derive",
@@ -497,9 +521,9 @@ dependencies = [
[[package]] [[package]]
name = "clap_builder" name = "clap_builder"
version = "4.5.57" version = "4.5.59"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7b12c8b680195a62a8364d16b8447b01b6c2c8f9aaf68bee653be34d4245e238" checksum = "370daa45065b80218950227371916a1633217ae42b2715b2287b606dcd618e24"
dependencies = [ dependencies = [
"anstream", "anstream",
"anstyle", "anstyle",
@@ -521,16 +545,17 @@ dependencies = [
[[package]] [[package]]
name = "clap_lex" name = "clap_lex"
version = "0.7.7" version = "1.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c3e64b0cc0439b12df2fa678eae89a1c56a529fd067a9115f7827f1fffd22b32" checksum = "3a822ea5bc7590f9d40f1ba12c0dc3c2760f3482c6984db1573ad11031420831"
[[package]] [[package]]
name = "cli" name = "cmake"
version = "0.1.0" version = "0.1.57"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "75443c44cd6b379beb8c5b45d85d0773baf31cce901fe7bb252f4eff3008ef7d"
dependencies = [ dependencies = [
"clap", "cc",
"mize",
] ]
[[package]] [[package]]
@@ -565,16 +590,6 @@ version = "5.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "147be55d677052dabc6b22252d5dd0fd4c29c8c27aa4f2fbef0f94aa003b406f" 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]] [[package]]
name = "core-foundation-sys" name = "core-foundation-sys"
version = "0.8.7" version = "0.8.7"
@@ -676,9 +691,9 @@ dependencies = [
[[package]] [[package]]
name = "deno_core" name = "deno_core"
version = "0.383.0" version = "0.385.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ee60c193b9e93726558e20dca14b36db7fccfebdf4479271e834e52709d101ca" checksum = "e348ea58ad12f6bee5407768b571a8af09756246a45c83dfd27a5aeeb338c5eb"
dependencies = [ dependencies = [
"anyhow", "anyhow",
"az", "az",
@@ -746,9 +761,9 @@ dependencies = [
[[package]] [[package]]
name = "deno_ops" name = "deno_ops"
version = "0.259.0" version = "0.261.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4e102069f83f92da6cba0867ffc9bfe3a5a98fa8b01e49687da764d64e91810d" checksum = "86077bea01b43941082edef61e150fa661bab25a839f17592bb763faaae0c14b"
dependencies = [ dependencies = [
"indexmap 2.13.0", "indexmap 2.13.0",
"proc-macro2", "proc-macro2",
@@ -847,6 +862,12 @@ dependencies = [
"syn", "syn",
] ]
[[package]]
name = "dunce"
version = "1.0.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "92773504d58c093f6de2459af4af33faa518c13451eb8f2b5698ed3d36e7c813"
[[package]] [[package]]
name = "dyn-clone" name = "dyn-clone"
version = "1.0.20" version = "1.0.20"
@@ -961,21 +982,6 @@ version = "0.1.5"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2" 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]] [[package]]
name = "form_urlencoded" name = "form_urlencoded"
version = "1.2.2" version = "1.2.2"
@@ -985,6 +991,12 @@ dependencies = [
"percent-encoding", "percent-encoding",
] ]
[[package]]
name = "fs_extra"
version = "1.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "42703706b716c37f96a77aea830392ad231f44c9e9a67872fa5548707e11b11c"
[[package]] [[package]]
name = "fslock" name = "fslock"
version = "0.2.1" version = "0.2.1"
@@ -1045,9 +1057,9 @@ dependencies = [
[[package]] [[package]]
name = "futures-io" name = "futures-io"
version = "0.3.31" version = "0.3.32"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9e5c1b78ca4aae1ac06c48a526a655760685149f0d465d21f37abfe57ce075c6" checksum = "cecba35d7ad927e23624b22ad55235f2239cfa44fd10428eecbeba6d6a717718"
[[package]] [[package]]
name = "futures-macro" name = "futures-macro"
@@ -1276,10 +1288,15 @@ checksum = "add0ab9360ddbd88cfeb3bd9574a1d85cfdfa14db10b3e21d3700dbc4328758f"
[[package]] [[package]]
name = "http_req" name = "http_req"
version = "0.12.0" 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 = [ dependencies = [
"native-tls", "rustls",
"rustls-pemfile",
"rustls-pki-types",
"unicase", "unicase",
"webpki",
"webpki-roots 0.26.11",
] ]
[[package]] [[package]]
@@ -1582,6 +1599,16 @@ dependencies = [
"syn", "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]] [[package]]
name = "js-sys" name = "js-sys"
version = "0.3.85" version = "0.3.85"
@@ -1592,15 +1619,6 @@ dependencies = [
"wasm-bindgen", "wasm-bindgen",
] ]
[[package]]
name = "js_part"
version = "0.1.0"
dependencies = [
"deno_core",
"mize",
"tokio",
]
[[package]] [[package]]
name = "lazy_static" name = "lazy_static"
version = "1.5.0" version = "1.5.0"
@@ -1685,6 +1703,15 @@ version = "0.4.29"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5e5032e24019045c762d3c0f28f5b6b8bbf38563a65908389bf7978758920897" checksum = "5e5032e24019045c762d3c0f28f5b6b8bbf38563a65908389bf7978758920897"
[[package]]
name = "marts"
version = "0.1.0"
dependencies = [
"clap",
"deno_core",
"mize",
]
[[package]] [[package]]
name = "matchers" name = "matchers"
version = "0.2.0" version = "0.2.0"
@@ -1843,23 +1870,6 @@ dependencies = [
"getrandom 0.2.17", "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]] [[package]]
name = "nix" name = "nix"
version = "0.27.1" version = "0.27.1"
@@ -1972,50 +1982,6 @@ version = "11.1.5"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d6790f58c7ff633d8771f42965289203411a5e5c68388703c06e14f24770b41e" 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]] [[package]]
name = "outref" name = "outref"
version = "0.5.2" version = "0.5.2"
@@ -2089,12 +2055,6 @@ version = "0.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184"
[[package]]
name = "pkg-config"
version = "0.3.32"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7edddbd0b52d732b21ad9a5fab5c704c14cd949e5e9a1ec5929a24fded1b904c"
[[package]] [[package]]
name = "portable-atomic" name = "portable-atomic"
version = "1.13.1" version = "1.13.1"
@@ -2131,7 +2091,8 @@ checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391"
name = "ppc" name = "ppc"
version = "0.1.0" version = "0.1.0"
dependencies = [ dependencies = [
"js_part", "clap",
"marts",
"mize", "mize",
] ]
@@ -2377,6 +2338,7 @@ version = "0.23.36"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c665f33d38cea657d9614f766881e4d510e0eda4239891eea56b4cadcf01801b" checksum = "c665f33d38cea657d9614f766881e4d510e0eda4239891eea56b4cadcf01801b"
dependencies = [ dependencies = [
"aws-lc-rs",
"log", "log",
"once_cell", "once_cell",
"ring", "ring",
@@ -2386,6 +2348,15 @@ dependencies = [
"zeroize", "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]] [[package]]
name = "rustls-pki-types" name = "rustls-pki-types"
version = "1.14.0" version = "1.14.0"
@@ -2401,6 +2372,7 @@ version = "0.103.9"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d7df23109aa6c1567d1c575b9952556388da57401e4ace1d15f79eedad0d8f53" checksum = "d7df23109aa6c1567d1c575b9952556388da57401e4ace1d15f79eedad0d8f53"
dependencies = [ dependencies = [
"aws-lc-rs",
"ring", "ring",
"rustls-pki-types", "rustls-pki-types",
"untrusted", "untrusted",
@@ -2433,44 +2405,12 @@ dependencies = [
"winapi-util", "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]] [[package]]
name = "scopeguard" name = "scopeguard"
version = "1.2.0" version = "1.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" 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]] [[package]]
name = "semver" name = "semver"
version = "1.0.27" version = "1.0.27"
@@ -2566,9 +2506,9 @@ dependencies = [
[[package]] [[package]]
name = "serde_v8" name = "serde_v8"
version = "0.292.0" version = "0.294.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f0d7af6a35bbed7c8d91b951608bf2e820a077992bf3dde06ef016af6e7b503f" checksum = "8386a10eddc03e63b28ad6963dbd0552470b430419d81fd6409e19e28146a3c8"
dependencies = [ dependencies = [
"deno_error", "deno_error",
"num-bigint", "num-bigint",
@@ -2797,9 +2737,9 @@ dependencies = [
[[package]] [[package]]
name = "sys_traits" name = "sys_traits"
version = "0.1.22" version = "0.1.24"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4121e69c72108134f9daf82cf6580269f018f5d8fb8cd3063df17699fbb84cb1" checksum = "5410f31d223892c1ce7a098da845c99d023b4c7f18632bc8f09e60dfae3cbb75"
dependencies = [ dependencies = [
"sys_traits_macros", "sys_traits_macros",
] ]
@@ -3294,7 +3234,7 @@ dependencies = [
"rustls-pki-types", "rustls-pki-types",
"ureq-proto", "ureq-proto",
"utf-8", "utf-8",
"webpki-roots", "webpki-roots 1.0.5",
] ]
[[package]] [[package]]
@@ -3373,12 +3313,6 @@ version = "0.1.1"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ba73ea9cf16a25df0c8caa16c51acb937d5712a8429db78a3ee29d5dcacd3a65" checksum = "ba73ea9cf16a25df0c8caa16c51acb937d5712a8429db78a3ee29d5dcacd3a65"
[[package]]
name = "vcpkg"
version = "0.2.15"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426"
[[package]] [[package]]
name = "version_check" name = "version_check"
version = "0.9.5" version = "0.9.5"
@@ -3635,6 +3569,25 @@ dependencies = [
"wasm-bindgen", "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]] [[package]]
name = "webpki-roots" name = "webpki-roots"
version = "1.0.5" version = "1.0.5"

View File

@@ -2,6 +2,9 @@
resolver = "2" resolver = "2"
members = [ members = [
"crates/mize", "crates/mize",
"crates/vic", #"crates/vic",
"crates/ppc" "crates/ppc",
, "crates/parts", "crates/macro_mize", "crates/mme"] "crates/marts",
"crates/macro_mize",
#"crates/mme",
]

View File

@@ -35,6 +35,7 @@ pub fn mize_part(attr: TokenStream, item: TokenStream) -> TokenStream {
let expanded = quote! { let expanded = quote! {
#input #input
use std::any::Any;
// impl the default new impl // impl the default new impl
impl mize::MizePartGenerated for #struct_name { impl mize::MizePartGenerated for #struct_name {
@@ -45,20 +46,21 @@ pub fn mize_part(attr: TokenStream, item: TokenStream) -> TokenStream {
&mut self.mize &mut self.mize
} }
fn as_any_generated(&self) -> &dyn Any { fn as_any_generated(&self) -> &dyn Any {
&self self
} }
fn as_any_mut_generated(&mut self) -> &dyn Any { fn as_any_mut_generated(&mut self) -> &mut dyn Any {
&mut self self
} }
fn into_any_generated(self: Box<Self>) -> Box<dyn Any> { fn into_any_generated(self: Box<Self>) -> Box<dyn Any> {
self self
} }
} }
impl mize::MizePartCreateGenerated for #struct_name { impl mize::MizePartCreateGenerated for #struct_name {
fn create_generated(mize: Mize) -> Self { fn create_generated(mize: Mize) -> Self {
Self { Self {
mize, mize,
... Default::default(), .. Default::default()
} }
} }
} }

10
crates/marts/Cargo.toml Normal file
View File

@@ -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/" }

View File

@@ -1,16 +1,26 @@
use clap::{ArgMatches, Command}; use clap::{ArgMatches, Command};
use std::any::Any;
use std::collections::HashMap; use std::collections::HashMap;
use mize::{Mize, MizePart, MizeResult, instance::MizePartGuard}; use mize::{mize_part, Mize, MizePart, MizeResult};
#[mize_part("cli")] #[mize_part("cli")]
struct CliPart { #[derive(Default)]
pub struct CliPart {
mize: Mize, mize: Mize,
cmd: Option<Command>, cmd: Option<Command>,
actions: HashMap<String, fn(&ArgMatches) -> MizeResult<()>>, actions: HashMap<String, fn(&ArgMatches) -> 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 { impl MizePart for CliPart {
fn init(&mut self, _mize: &mut Mize) -> MizeResult<()> { fn init(&mut self, _mize: &mut Mize) -> MizeResult<()> {
Ok(()) Ok(())
@@ -19,7 +29,7 @@ impl MizePart for CliPart {
let matches = self.cmd.take().unwrap().get_matches(); let matches = self.cmd.take().unwrap().get_matches();
let sub_cmd = matches.subcommand_name().unwrap(); let sub_cmd = matches.subcommand_name().unwrap();
let action = self.actions.get(sub_cmd).unwrap(); let action = self.actions.get(sub_cmd).unwrap();
action(matches.subcommand_matches(sub_cmd).unwrap()); action(matches.subcommand_matches(sub_cmd).unwrap())?;
Ok(()) Ok(())
} }
fn opts(&self, mize: &mut Mize) { fn opts(&self, mize: &mut Mize) {
@@ -30,12 +40,21 @@ impl MizePart for CliPart {
impl CliPart { impl CliPart {
pub fn subcommand( pub fn subcommand(
&mut self, &mut self,
cmd: Command, subcmd: Command,
action: fn(sub_matches: &ArgMatches) -> MizeResult<()>, action: fn(sub_matches: &ArgMatches) -> MizeResult<()>,
) -> &mut Command { ) -> &mut Command {
let cmd = self.cmd.take().unwrap().subcommand(cmd); let name = subcmd.get_name().to_string();
self.actions.insert(cmd.get_name().to_string(), action); let cmd = self.cmd.take().unwrap().subcommand(subcmd);
self.actions.insert(name, action);
self.cmd = Some(cmd); self.cmd = Some(cmd);
self.cmd.as_mut().unwrap() self.cmd.as_mut().unwrap()
} }
pub fn with_cmd(
&mut self,
func: fn(mize: Mize, cmd: Command) -> MizeResult<Command>,
) -> MizeResult<()> {
let cmd = func(self.mize.clone(), self.cmd.take().unwrap())?;
self.cmd = Some(cmd);
Ok(())
}
} }

View File

@@ -1,9 +1,9 @@
use deno_core::FsModuleLoader;
use deno_core::error::AnyError; 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::async_trait;
use mize::instance::MizePartCreate; use mize::instance::MizePartCreate;
use mize::{Mize, MizePart, MizeResult, mize_part}; use mize::{mize_part, Mize, MizePart, MizeResult};
use std::path::Path; use std::path::Path;
use std::rc::Rc; use std::rc::Rc;
@@ -13,14 +13,29 @@ pub struct JsPart {
js_runtime: JsRuntime, 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 { impl MizePart for JsPart {
fn init(&mut self, mize: &mut Mize) -> MizeResult<()> { fn init(&mut self, mize: &mut Mize) -> MizeResult<()> {
println!("js part init"); println!("js part init");
Ok(()) Ok(())
} }
} }
impl MizePartCreate for JsPart {
fn create(mize: &mut Mize) -> Box<dyn MizePart> { fn js(mize: &mut Mize) -> Box<dyn MizePart> {
let mut js_runtime = JsRuntime::new(RuntimeOptions { let mut js_runtime = JsRuntime::new(RuntimeOptions {
module_loader: Some(Rc::new(FsModuleLoader)), module_loader: Some(Rc::new(FsModuleLoader)),
extensions: vec![mize_ext::init_ops()], extensions: vec![mize_ext::init_ops()],
@@ -37,14 +52,13 @@ impl MizePartCreate for JsPart {
js_runtime.execute_script("[bootstrap]", bootstrap_code)?; js_runtime.execute_script("[bootstrap]", bootstrap_code)?;
JsPart { mize, js_runtime } JsPart { mize, js_runtime }
}
} }
impl JsPart { impl JsPart {
pub fn part_from_js_file( pub fn part_from_js_file(
&mut self, &mut self,
name: &'static str, name: &'static str,
path: &str, path: &'static str,
) -> Box<dyn MizePart + Send + Sync> { ) -> Box<dyn MizePart + Send + Sync> {
Box::new(PartFromJsFileAdapter { Box::new(PartFromJsFileAdapter {
mize: self.mize.clone(), mize: self.mize.clone(),
@@ -52,6 +66,9 @@ impl JsPart {
js_file: path, js_file: path,
}) })
} }
pub fn runtime(&mut self) -> &mut JsRuntime {
&mut self.js_runtime
}
} }
#[mize_part] #[mize_part]
@@ -70,7 +87,7 @@ impl MizePart for PartFromJsFileAdapter {
self.name self.name
} }
async fn async_init(&mut self, mize: &mut Mize) -> MizeResult<()> { async fn async_init(&mut self, mize: &mut Mize) -> MizeResult<()> {
let js: JsPart = mize.get_part_native("js"); let js = mize.get_part_native::<JsPart>("js")?;
let path = self.js_file; let path = self.js_file;
let js_code = format!( let js_code = format!(
r#" r#"
@@ -96,13 +113,13 @@ impl MizePart for PartFromJsFileAdapter {
); );
// Execute the script // 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 // 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 // Run the event loop to completion
js.runtime js.runtime()
.run_event_loop(PollEventLoopOptions::default()) .run_event_loop(PollEventLoopOptions::default())
.await?; .await?;
@@ -110,7 +127,7 @@ impl MizePart for PartFromJsFileAdapter {
Ok(()) Ok(())
} }
async fn async_run(&mut self, mize: &mut Mize) -> MizeResult<()> { async fn async_run(&mut self, mize: &mut Mize) -> MizeResult<()> {
let js: JsPart = mize.get_part_native("js"); let js = mize.get_part_native::<JsPart>("js")?;
let path = self.js_file; let path = self.js_file;
let js_code = format!( let js_code = format!(
r#" r#"
@@ -122,13 +139,13 @@ impl MizePart for PartFromJsFileAdapter {
"# "#
); );
// Execute the script // 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 // 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 // Run the event loop to completion
js.runtime js.runtime()
.run_event_loop(PollEventLoopOptions::default()) .run_event_loop(PollEventLoopOptions::default())
.await?; .await?;
@@ -136,33 +153,3 @@ impl MizePart for PartFromJsFileAdapter {
Ok(()) 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]);

4
crates/marts/src/lib.rs Normal file
View File

@@ -0,0 +1,4 @@
mod cli;
pub use cli::*;
//mod js;

View File

@@ -66,8 +66,8 @@ ciborium-io = { version = "0.2.2", optional = true }
tracing-core = { version = "0.1.32", optional = true } tracing-core = { version = "0.1.32", optional = true }
tar = { version = "0.4.42", optional = true } tar = { version = "0.4.42", optional = true }
flate2 = { version = "1.0.33", optional = true } flate2 = { version = "1.0.33", optional = true }
#http_req = { version = "0.12.0", default-features = false, features = [ "rustls" ], optional = true } 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" ] } #http_req = { git = "https://github.com/c2vi/http_req", optional = true, default-features = false, features = [ "native-tls" ] }
# bare dependencies # bare dependencies

View File

@@ -104,22 +104,25 @@ pub struct MizePartGuard<T: MizePart + Send + Sync + 'static> {
pub part: Option<T>, pub part: Option<T>,
} }
impl<T: MizePart + Send + Sync + Deref<Target = T>> Deref for MizePartGuard<T> { impl<T: MizePart + Send + Sync> Deref for MizePartGuard<T> {
type Target = T; type Target = T;
fn deref(&self) -> &Self::Target { fn deref(&self) -> &Self::Target {
&*self.part.as_deref().unwrap() &*self.part.as_ref().unwrap()
} }
} }
impl<T: MizePart + Send + Sync + DerefMut<Target = T>> DerefMut for MizePartGuard<T> { impl<T: MizePart + Send + Sync> DerefMut for MizePartGuard<T> {
fn deref_mut(&mut self) -> &mut Self::Target { fn deref_mut(&mut self) -> &mut Self::Target {
&mut *self.part.as_deref_mut().unwrap() &mut *self.part.as_mut().unwrap()
} }
} }
impl<T: MizePart + Send + Sync> Drop for MizePartGuard<T> { impl<T: MizePart + Send + Sync> Drop for MizePartGuard<T> {
fn drop(&mut self) { fn drop(&mut self) {
if self.part.is_none() {
return;
}
let part = self.part.take().unwrap(); let part = self.part.take().unwrap();
self.mize.give_back_part(Box::new(part)); self.mize.give_back_part(Box::new(part));
} }
@@ -141,6 +144,9 @@ impl DerefMut for DynMizePartGuard {
impl Drop for DynMizePartGuard { impl Drop for DynMizePartGuard {
fn drop(&mut self) { fn drop(&mut self) {
if self.part.is_none() {
return;
}
self.mize.give_back_part(self.part.take().unwrap()); self.mize.give_back_part(self.part.take().unwrap());
} }
} }
@@ -311,6 +317,11 @@ impl Mize {
self.parts.lock().unwrap().insert(part.name(), Some(part)); self.parts.lock().unwrap().insert(part.name(), Some(part));
Ok(()) Ok(())
} }
pub fn register_part(&mut self, part: Box<dyn MizePart + Send + Sync>) -> 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> { fn part_names(&mut self) -> Vec<&'static str> {
self.part_names.lock().unwrap().clone() self.part_names.lock().unwrap().clone()
} }
@@ -854,3 +865,9 @@ impl fmt::Debug for Mize {
write!(f, "Mize Instance with subs: {:?}", self.subs,) write!(f, "Mize Instance with subs: {:?}", self.subs,)
} }
} }
impl Default for Mize {
fn default() -> Self {
Self::empty().unwrap()
}
}

View File

@@ -1,5 +0,0 @@
[package]
name = "mize_parts"
version = "0.1.0"
edition = "2021"

View File

@@ -1,3 +0,0 @@
mod cli;
mod js;

View File

@@ -4,5 +4,14 @@ version = "0.1.0"
edition = "2024" edition = "2024"
[dependencies] [dependencies]
mize = { path = "../../parts/mize" } mize = { path = "../mize" }
js_part = { path = "../../parts/js" } marts = { path = "../marts/" }
clap = "4.5.59"
[[bin]]
name = "ppc"
path = "src/platform/os/main.rs"
[features]
default = ["target-os"]
target-os = []

View File

@@ -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");
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();
}

View File

@@ -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::<marts::CliPart>("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(())
}

View File

@@ -23,18 +23,18 @@ serde_json = "1.0.117"
tar = "0.4.44" tar = "0.4.44"
umask = "2.1.0" umask = "2.1.0"
#mize = { git = "https://github.com/c2vi/mize", default-features = false } #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 testing
#snix-cli = { git = "https://git.snix.dev/snix/snix" } #snix-cli = { git = "https://git.snix.dev/snix/snix" }
snix-tracing = { path = "./gitignore/snix/snix/tracing" } #snix-tracing = { path = "./gitignore/snix/snix/tracing" }
snix-cli = { path = "./gitignore/snix/snix/cli" } #snix-cli = { path = "./gitignore/snix/snix/cli" }
snix-store = { path = "./gitignore/snix/snix/store", features = [ "xp-composition-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-castore = { path = "./gitignore/snix/snix/castore", features = ["xp-composition-cli", "xp-composition-url-refs" ] }
snix-eval = { path = "./gitignore/snix/snix/eval" } #snix-eval = { path = "./gitignore/snix/snix/eval" }
snix-glue = { path = "./gitignore/snix/snix/glue" } #snix-glue = { path = "./gitignore/snix/snix/glue" }
snix-build = { path = "./gitignore/snix/snix/build" } #snix-build = { path = "./gitignore/snix/snix/build" }
nix-compat = { path = "./gitignore/snix/snix/nix-compat" } #nix-compat = { path = "./gitignore/snix/snix/nix-compat" }
tokio = "1.45.0" tokio = "1.45.0"
tracing = "0.1.41" tracing = "0.1.41"
tracing-indicatif = "0.3.9" tracing-indicatif = "0.3.9"