From d4ca3526dd410664ecb1516e6b84e64a94912275 Mon Sep 17 00:00:00 2001 From: Ryan Levick Date: Tue, 17 Sep 2024 16:17:14 +0200 Subject: [PATCH] Move some code around Signed-off-by: Ryan Levick --- .github/workflows/build.yaml | 4 +- Cargo.lock | 92 +++++++++++++++++++++-------------- Cargo.toml | 18 ++++--- src/lib.rs | 93 +++++++++++++++++++----------------- 4 files changed, 114 insertions(+), 93 deletions(-) diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml index 0e2b402..5399cca 100644 --- a/.github/workflows/build.yaml +++ b/.github/workflows/build.yaml @@ -26,7 +26,7 @@ jobs: - name: Install Rust uses: dtolnay/rust-toolchain@stable with: - toolchain: 1.76 + toolchain: 1.79 - name: Install dependencies run: | @@ -63,7 +63,7 @@ jobs: - name: Install Rust uses: dtolnay/rust-toolchain@stable with: - toolchain: 1.76 + toolchain: 1.79 targets: ${{ matrix.config.target }} - name: Install Spin uses: rajatjindal/setup-actions/spin@main diff --git a/Cargo.lock b/Cargo.lock index 9016244..5a037be 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1905,6 +1905,7 @@ checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99" dependencies = [ "autocfg", "hashbrown 0.12.3", + "serde", ] [[package]] @@ -3784,7 +3785,7 @@ dependencies = [ [[package]] name = "spin-app" version = "2.8.0-pre0" -source = "git+https://github.com/fermyon/spin?rev=b2692def9f322f33b24c56aa3f9b6cc969ba29e8#b2692def9f322f33b24c56aa3f9b6cc969ba29e8" +source = "git+https://github.com/fermyon/spin?rev=485b04090644ecfda4d0034891a5feca9a90332c#485b04090644ecfda4d0034891a5feca9a90332c" dependencies = [ "anyhow", "async-trait", @@ -3797,7 +3798,7 @@ dependencies = [ [[package]] name = "spin-common" version = "2.8.0-pre0" -source = "git+https://github.com/fermyon/spin?rev=b2692def9f322f33b24c56aa3f9b6cc969ba29e8#b2692def9f322f33b24c56aa3f9b6cc969ba29e8" +source = "git+https://github.com/fermyon/spin?rev=485b04090644ecfda4d0034891a5feca9a90332c#485b04090644ecfda4d0034891a5feca9a90332c" dependencies = [ "anyhow", "dirs 5.0.1", @@ -3810,7 +3811,7 @@ dependencies = [ [[package]] name = "spin-componentize" version = "2.8.0-pre0" -source = "git+https://github.com/fermyon/spin?rev=b2692def9f322f33b24c56aa3f9b6cc969ba29e8#b2692def9f322f33b24c56aa3f9b6cc969ba29e8" +source = "git+https://github.com/fermyon/spin?rev=485b04090644ecfda4d0034891a5feca9a90332c#485b04090644ecfda4d0034891a5feca9a90332c" dependencies = [ "anyhow", "tracing", @@ -3824,7 +3825,7 @@ dependencies = [ [[package]] name = "spin-compose" version = "2.8.0-pre0" -source = "git+https://github.com/fermyon/spin?rev=b2692def9f322f33b24c56aa3f9b6cc969ba29e8#b2692def9f322f33b24c56aa3f9b6cc969ba29e8" +source = "git+https://github.com/fermyon/spin?rev=485b04090644ecfda4d0034891a5feca9a90332c#485b04090644ecfda4d0034891a5feca9a90332c" dependencies = [ "anyhow", "async-trait", @@ -3841,7 +3842,7 @@ dependencies = [ [[package]] name = "spin-core" version = "2.8.0-pre0" -source = "git+https://github.com/fermyon/spin?rev=b2692def9f322f33b24c56aa3f9b6cc969ba29e8#b2692def9f322f33b24c56aa3f9b6cc969ba29e8" +source = "git+https://github.com/fermyon/spin?rev=485b04090644ecfda4d0034891a5feca9a90332c#485b04090644ecfda4d0034891a5feca9a90332c" dependencies = [ "anyhow", "async-trait", @@ -3863,7 +3864,7 @@ dependencies = [ [[package]] name = "spin-expressions" version = "2.8.0-pre0" -source = "git+https://github.com/fermyon/spin?rev=b2692def9f322f33b24c56aa3f9b6cc969ba29e8#b2692def9f322f33b24c56aa3f9b6cc969ba29e8" +source = "git+https://github.com/fermyon/spin?rev=485b04090644ecfda4d0034891a5feca9a90332c#485b04090644ecfda4d0034891a5feca9a90332c" dependencies = [ "anyhow", "async-trait", @@ -3877,7 +3878,7 @@ dependencies = [ [[package]] name = "spin-factor-key-value" version = "2.8.0-pre0" -source = "git+https://github.com/fermyon/spin?rev=b2692def9f322f33b24c56aa3f9b6cc969ba29e8#b2692def9f322f33b24c56aa3f9b6cc969ba29e8" +source = "git+https://github.com/fermyon/spin?rev=485b04090644ecfda4d0034891a5feca9a90332c#485b04090644ecfda4d0034891a5feca9a90332c" dependencies = [ "anyhow", "lru 0.9.0", @@ -3895,7 +3896,7 @@ dependencies = [ [[package]] name = "spin-factor-llm" version = "2.8.0-pre0" -source = "git+https://github.com/fermyon/spin?rev=b2692def9f322f33b24c56aa3f9b6cc969ba29e8#b2692def9f322f33b24c56aa3f9b6cc969ba29e8" +source = "git+https://github.com/fermyon/spin?rev=485b04090644ecfda4d0034891a5feca9a90332c#485b04090644ecfda4d0034891a5feca9a90332c" dependencies = [ "anyhow", "async-trait", @@ -3913,7 +3914,7 @@ dependencies = [ [[package]] name = "spin-factor-outbound-http" version = "2.8.0-pre0" -source = "git+https://github.com/fermyon/spin?rev=b2692def9f322f33b24c56aa3f9b6cc969ba29e8#b2692def9f322f33b24c56aa3f9b6cc969ba29e8" +source = "git+https://github.com/fermyon/spin?rev=485b04090644ecfda4d0034891a5feca9a90332c#485b04090644ecfda4d0034891a5feca9a90332c" dependencies = [ "anyhow", "http 1.1.0", @@ -3938,7 +3939,7 @@ dependencies = [ [[package]] name = "spin-factor-outbound-mqtt" version = "2.8.0-pre0" -source = "git+https://github.com/fermyon/spin?rev=b2692def9f322f33b24c56aa3f9b6cc969ba29e8#b2692def9f322f33b24c56aa3f9b6cc969ba29e8" +source = "git+https://github.com/fermyon/spin?rev=485b04090644ecfda4d0034891a5feca9a90332c#485b04090644ecfda4d0034891a5feca9a90332c" dependencies = [ "anyhow", "rumqttc", @@ -3954,7 +3955,7 @@ dependencies = [ [[package]] name = "spin-factor-outbound-mysql" version = "2.8.0-pre0" -source = "git+https://github.com/fermyon/spin?rev=b2692def9f322f33b24c56aa3f9b6cc969ba29e8#b2692def9f322f33b24c56aa3f9b6cc969ba29e8" +source = "git+https://github.com/fermyon/spin?rev=485b04090644ecfda4d0034891a5feca9a90332c#485b04090644ecfda4d0034891a5feca9a90332c" dependencies = [ "anyhow", "flate2", @@ -3975,7 +3976,7 @@ dependencies = [ [[package]] name = "spin-factor-outbound-networking" version = "2.8.0-pre0" -source = "git+https://github.com/fermyon/spin?rev=b2692def9f322f33b24c56aa3f9b6cc969ba29e8#b2692def9f322f33b24c56aa3f9b6cc969ba29e8" +source = "git+https://github.com/fermyon/spin?rev=485b04090644ecfda4d0034891a5feca9a90332c#485b04090644ecfda4d0034891a5feca9a90332c" dependencies = [ "anyhow", "futures-util", @@ -3990,6 +3991,7 @@ dependencies = [ "spin-factor-wasi", "spin-factors", "spin-locked-app", + "spin-manifest", "spin-serde", "terminal", "tracing", @@ -4001,7 +4003,7 @@ dependencies = [ [[package]] name = "spin-factor-outbound-pg" version = "2.8.0-pre0" -source = "git+https://github.com/fermyon/spin?rev=b2692def9f322f33b24c56aa3f9b6cc969ba29e8#b2692def9f322f33b24c56aa3f9b6cc969ba29e8" +source = "git+https://github.com/fermyon/spin?rev=485b04090644ecfda4d0034891a5feca9a90332c#485b04090644ecfda4d0034891a5feca9a90332c" dependencies = [ "anyhow", "native-tls", @@ -4019,7 +4021,7 @@ dependencies = [ [[package]] name = "spin-factor-outbound-redis" version = "2.8.0-pre0" -source = "git+https://github.com/fermyon/spin?rev=b2692def9f322f33b24c56aa3f9b6cc969ba29e8#b2692def9f322f33b24c56aa3f9b6cc969ba29e8" +source = "git+https://github.com/fermyon/spin?rev=485b04090644ecfda4d0034891a5feca9a90332c#485b04090644ecfda4d0034891a5feca9a90332c" dependencies = [ "anyhow", "redis", @@ -4034,7 +4036,7 @@ dependencies = [ [[package]] name = "spin-factor-sqlite" version = "2.8.0-pre0" -source = "git+https://github.com/fermyon/spin?rev=b2692def9f322f33b24c56aa3f9b6cc969ba29e8#b2692def9f322f33b24c56aa3f9b6cc969ba29e8" +source = "git+https://github.com/fermyon/spin?rev=485b04090644ecfda4d0034891a5feca9a90332c#485b04090644ecfda4d0034891a5feca9a90332c" dependencies = [ "async-trait", "serde", @@ -4050,7 +4052,7 @@ dependencies = [ [[package]] name = "spin-factor-variables" version = "2.8.0-pre0" -source = "git+https://github.com/fermyon/spin?rev=b2692def9f322f33b24c56aa3f9b6cc969ba29e8#b2692def9f322f33b24c56aa3f9b6cc969ba29e8" +source = "git+https://github.com/fermyon/spin?rev=485b04090644ecfda4d0034891a5feca9a90332c#485b04090644ecfda4d0034891a5feca9a90332c" dependencies = [ "azure_core", "azure_identity", @@ -4069,7 +4071,7 @@ dependencies = [ [[package]] name = "spin-factor-wasi" version = "2.8.0-pre0" -source = "git+https://github.com/fermyon/spin?rev=b2692def9f322f33b24c56aa3f9b6cc969ba29e8#b2692def9f322f33b24c56aa3f9b6cc969ba29e8" +source = "git+https://github.com/fermyon/spin?rev=485b04090644ecfda4d0034891a5feca9a90332c#485b04090644ecfda4d0034891a5feca9a90332c" dependencies = [ "async-trait", "bytes", @@ -4084,7 +4086,7 @@ dependencies = [ [[package]] name = "spin-factors" version = "2.8.0-pre0" -source = "git+https://github.com/fermyon/spin?rev=b2692def9f322f33b24c56aa3f9b6cc969ba29e8#b2692def9f322f33b24c56aa3f9b6cc969ba29e8" +source = "git+https://github.com/fermyon/spin?rev=485b04090644ecfda4d0034891a5feca9a90332c#485b04090644ecfda4d0034891a5feca9a90332c" dependencies = [ "anyhow", "serde", @@ -4099,7 +4101,7 @@ dependencies = [ [[package]] name = "spin-factors-derive" version = "2.8.0-pre0" -source = "git+https://github.com/fermyon/spin?rev=b2692def9f322f33b24c56aa3f9b6cc969ba29e8#b2692def9f322f33b24c56aa3f9b6cc969ba29e8" +source = "git+https://github.com/fermyon/spin?rev=485b04090644ecfda4d0034891a5feca9a90332c#485b04090644ecfda4d0034891a5feca9a90332c" dependencies = [ "proc-macro2", "quote", @@ -4109,7 +4111,7 @@ dependencies = [ [[package]] name = "spin-factors-executor" version = "2.8.0-pre0" -source = "git+https://github.com/fermyon/spin?rev=b2692def9f322f33b24c56aa3f9b6cc969ba29e8#b2692def9f322f33b24c56aa3f9b6cc969ba29e8" +source = "git+https://github.com/fermyon/spin?rev=485b04090644ecfda4d0034891a5feca9a90332c#485b04090644ecfda4d0034891a5feca9a90332c" dependencies = [ "anyhow", "spin-app", @@ -4120,7 +4122,7 @@ dependencies = [ [[package]] name = "spin-key-value-azure" version = "2.8.0-pre0" -source = "git+https://github.com/fermyon/spin?rev=b2692def9f322f33b24c56aa3f9b6cc969ba29e8#b2692def9f322f33b24c56aa3f9b6cc969ba29e8" +source = "git+https://github.com/fermyon/spin?rev=485b04090644ecfda4d0034891a5feca9a90332c#485b04090644ecfda4d0034891a5feca9a90332c" dependencies = [ "anyhow", "azure_data_cosmos", @@ -4136,7 +4138,7 @@ dependencies = [ [[package]] name = "spin-key-value-redis" version = "2.8.0-pre0" -source = "git+https://github.com/fermyon/spin?rev=b2692def9f322f33b24c56aa3f9b6cc969ba29e8#b2692def9f322f33b24c56aa3f9b6cc969ba29e8" +source = "git+https://github.com/fermyon/spin?rev=485b04090644ecfda4d0034891a5feca9a90332c#485b04090644ecfda4d0034891a5feca9a90332c" dependencies = [ "anyhow", "redis", @@ -4151,7 +4153,7 @@ dependencies = [ [[package]] name = "spin-key-value-spin" version = "2.8.0-pre0" -source = "git+https://github.com/fermyon/spin?rev=b2692def9f322f33b24c56aa3f9b6cc969ba29e8#b2692def9f322f33b24c56aa3f9b6cc969ba29e8" +source = "git+https://github.com/fermyon/spin?rev=485b04090644ecfda4d0034891a5feca9a90332c#485b04090644ecfda4d0034891a5feca9a90332c" dependencies = [ "anyhow", "once_cell", @@ -4166,7 +4168,7 @@ dependencies = [ [[package]] name = "spin-llm-remote-http" version = "2.8.0-pre0" -source = "git+https://github.com/fermyon/spin?rev=b2692def9f322f33b24c56aa3f9b6cc969ba29e8#b2692def9f322f33b24c56aa3f9b6cc969ba29e8" +source = "git+https://github.com/fermyon/spin?rev=485b04090644ecfda4d0034891a5feca9a90332c#485b04090644ecfda4d0034891a5feca9a90332c" dependencies = [ "anyhow", "http 0.2.12", @@ -4181,7 +4183,7 @@ dependencies = [ [[package]] name = "spin-locked-app" version = "2.8.0-pre0" -source = "git+https://github.com/fermyon/spin?rev=b2692def9f322f33b24c56aa3f9b6cc969ba29e8#b2692def9f322f33b24c56aa3f9b6cc969ba29e8" +source = "git+https://github.com/fermyon/spin?rev=485b04090644ecfda4d0034891a5feca9a90332c#485b04090644ecfda4d0034891a5feca9a90332c" dependencies = [ "anyhow", "async-trait", @@ -4191,6 +4193,23 @@ dependencies = [ "thiserror", ] +[[package]] +name = "spin-manifest" +version = "2.8.0-pre0" +source = "git+https://github.com/fermyon/spin?rev=485b04090644ecfda4d0034891a5feca9a90332c#485b04090644ecfda4d0034891a5feca9a90332c" +dependencies = [ + "anyhow", + "indexmap 1.9.3", + "semver", + "serde", + "spin-serde", + "terminal", + "thiserror", + "toml", + "url", + "wasm-pkg-common", +] + [[package]] name = "spin-mqtt-macro" version = "0.2.0" @@ -4213,7 +4232,7 @@ dependencies = [ [[package]] name = "spin-runtime-config" version = "2.8.0-pre0" -source = "git+https://github.com/fermyon/spin?rev=b2692def9f322f33b24c56aa3f9b6cc969ba29e8#b2692def9f322f33b24c56aa3f9b6cc969ba29e8" +source = "git+https://github.com/fermyon/spin?rev=485b04090644ecfda4d0034891a5feca9a90332c#485b04090644ecfda4d0034891a5feca9a90332c" dependencies = [ "anyhow", "spin-common", @@ -4240,7 +4259,7 @@ dependencies = [ [[package]] name = "spin-runtime-factors" version = "2.8.0-pre0" -source = "git+https://github.com/fermyon/spin?rev=b2692def9f322f33b24c56aa3f9b6cc969ba29e8#b2692def9f322f33b24c56aa3f9b6cc969ba29e8" +source = "git+https://github.com/fermyon/spin?rev=485b04090644ecfda4d0034891a5feca9a90332c#485b04090644ecfda4d0034891a5feca9a90332c" dependencies = [ "anyhow", "clap", @@ -4268,7 +4287,7 @@ dependencies = [ [[package]] name = "spin-serde" version = "2.8.0-pre0" -source = "git+https://github.com/fermyon/spin?rev=b2692def9f322f33b24c56aa3f9b6cc969ba29e8#b2692def9f322f33b24c56aa3f9b6cc969ba29e8" +source = "git+https://github.com/fermyon/spin?rev=485b04090644ecfda4d0034891a5feca9a90332c#485b04090644ecfda4d0034891a5feca9a90332c" dependencies = [ "anyhow", "base64 0.22.1", @@ -4280,7 +4299,7 @@ dependencies = [ [[package]] name = "spin-sqlite" version = "2.8.0-pre0" -source = "git+https://github.com/fermyon/spin?rev=b2692def9f322f33b24c56aa3f9b6cc969ba29e8#b2692def9f322f33b24c56aa3f9b6cc969ba29e8" +source = "git+https://github.com/fermyon/spin?rev=485b04090644ecfda4d0034891a5feca9a90332c#485b04090644ecfda4d0034891a5feca9a90332c" dependencies = [ "async-trait", "serde", @@ -4298,7 +4317,7 @@ dependencies = [ [[package]] name = "spin-sqlite-inproc" version = "2.8.0-pre0" -source = "git+https://github.com/fermyon/spin?rev=b2692def9f322f33b24c56aa3f9b6cc969ba29e8#b2692def9f322f33b24c56aa3f9b6cc969ba29e8" +source = "git+https://github.com/fermyon/spin?rev=485b04090644ecfda4d0034891a5feca9a90332c#485b04090644ecfda4d0034891a5feca9a90332c" dependencies = [ "anyhow", "async-trait", @@ -4313,7 +4332,7 @@ dependencies = [ [[package]] name = "spin-sqlite-libsql" version = "2.8.0-pre0" -source = "git+https://github.com/fermyon/spin?rev=b2692def9f322f33b24c56aa3f9b6cc969ba29e8#b2692def9f322f33b24c56aa3f9b6cc969ba29e8" +source = "git+https://github.com/fermyon/spin?rev=485b04090644ecfda4d0034891a5feca9a90332c#485b04090644ecfda4d0034891a5feca9a90332c" dependencies = [ "anyhow", "async-trait", @@ -4328,7 +4347,7 @@ dependencies = [ [[package]] name = "spin-telemetry" version = "2.8.0-pre0" -source = "git+https://github.com/fermyon/spin?rev=b2692def9f322f33b24c56aa3f9b6cc969ba29e8#b2692def9f322f33b24c56aa3f9b6cc969ba29e8" +source = "git+https://github.com/fermyon/spin?rev=485b04090644ecfda4d0034891a5feca9a90332c#485b04090644ecfda4d0034891a5feca9a90332c" dependencies = [ "anyhow", "http 0.2.12", @@ -4348,7 +4367,7 @@ dependencies = [ [[package]] name = "spin-trigger" version = "2.8.0-pre0" -source = "git+https://github.com/fermyon/spin?rev=b2692def9f322f33b24c56aa3f9b6cc969ba29e8#b2692def9f322f33b24c56aa3f9b6cc969ba29e8" +source = "git+https://github.com/fermyon/spin?rev=485b04090644ecfda4d0034891a5feca9a90332c#485b04090644ecfda4d0034891a5feca9a90332c" dependencies = [ "anyhow", "clap", @@ -4376,7 +4395,7 @@ dependencies = [ [[package]] name = "spin-world" version = "2.8.0-pre0" -source = "git+https://github.com/fermyon/spin?rev=b2692def9f322f33b24c56aa3f9b6cc969ba29e8#b2692def9f322f33b24c56aa3f9b6cc969ba29e8" +source = "git+https://github.com/fermyon/spin?rev=485b04090644ecfda4d0034891a5feca9a90332c#485b04090644ecfda4d0034891a5feca9a90332c" dependencies = [ "async-trait", "wasmtime", @@ -4552,7 +4571,7 @@ dependencies = [ [[package]] name = "table" version = "2.8.0-pre0" -source = "git+https://github.com/fermyon/spin?rev=b2692def9f322f33b24c56aa3f9b6cc969ba29e8#b2692def9f322f33b24c56aa3f9b6cc969ba29e8" +source = "git+https://github.com/fermyon/spin?rev=485b04090644ecfda4d0034891a5feca9a90332c#485b04090644ecfda4d0034891a5feca9a90332c" [[package]] name = "target-lexicon" @@ -4585,7 +4604,7 @@ dependencies = [ [[package]] name = "terminal" version = "2.8.0-pre0" -source = "git+https://github.com/fermyon/spin?rev=b2692def9f322f33b24c56aa3f9b6cc969ba29e8#b2692def9f322f33b24c56aa3f9b6cc969ba29e8" +source = "git+https://github.com/fermyon/spin?rev=485b04090644ecfda4d0034891a5feca9a90332c#485b04090644ecfda4d0034891a5feca9a90332c" dependencies = [ "atty", "once_cell", @@ -4814,6 +4833,7 @@ version = "0.8.19" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a1ed1f98e3fdc28d6d910e6737ae6ab1a93bf1985935a1193e68f93eeb68d24e" dependencies = [ + "indexmap 2.4.0", "serde", "serde_spanned", "toml_datetime", diff --git a/Cargo.toml b/Cargo.toml index adb460e..55bfc97 100755 --- a/Cargo.toml +++ b/Cargo.toml @@ -3,21 +3,19 @@ name = "trigger-mqtt" version = "0.2.0" edition = "2021" -# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html - [dependencies] anyhow = "1.0.68" clap = { version = "3.1.15", features = ["derive", "env"] } futures = "0.3.25" serde = "1.0.188" -spin-app = { git = "https://github.com/fermyon/spin", rev = "b2692def9f322f33b24c56aa3f9b6cc969ba29e8" } -spin-core = { git = "https://github.com/fermyon/spin", rev = "b2692def9f322f33b24c56aa3f9b6cc969ba29e8" } -spin-expressions = { git = "https://github.com/fermyon/spin", rev = "b2692def9f322f33b24c56aa3f9b6cc969ba29e8" } -spin-factors = { git = "https://github.com/fermyon/spin", rev = "b2692def9f322f33b24c56aa3f9b6cc969ba29e8" } -spin-runtime-factors = { git = "https://github.com/fermyon/spin", rev = "b2692def9f322f33b24c56aa3f9b6cc969ba29e8" } -spin-trigger = { git = "https://github.com/fermyon/spin", rev = "b2692def9f322f33b24c56aa3f9b6cc969ba29e8" } -spin-telemetry = { git = "https://github.com/fermyon/spin", rev = "b2692def9f322f33b24c56aa3f9b6cc969ba29e8" } -spin-factor-variables = { git = "https://github.com/fermyon/spin", rev = "b2692def9f322f33b24c56aa3f9b6cc969ba29e8" } +spin-app = { git = "https://github.com/fermyon/spin", rev = "485b04090644ecfda4d0034891a5feca9a90332c" } +spin-core = { git = "https://github.com/fermyon/spin", rev = "485b04090644ecfda4d0034891a5feca9a90332c" } +spin-expressions = { git = "https://github.com/fermyon/spin", rev = "485b04090644ecfda4d0034891a5feca9a90332c" } +spin-factors = { git = "https://github.com/fermyon/spin", rev = "485b04090644ecfda4d0034891a5feca9a90332c" } +spin-runtime-factors = { git = "https://github.com/fermyon/spin", rev = "485b04090644ecfda4d0034891a5feca9a90332c" } +spin-trigger = { git = "https://github.com/fermyon/spin", rev = "485b04090644ecfda4d0034891a5feca9a90332c" } +spin-telemetry = { git = "https://github.com/fermyon/spin", rev = "485b04090644ecfda4d0034891a5feca9a90332c" } +spin-factor-variables = { git = "https://github.com/fermyon/spin", rev = "485b04090644ecfda4d0034891a5feca9a90332c" } tokio = { version = "1.37", features = ["full"] } tracing = { version = "0.1", features = ["log"] } paho-mqtt = { version = "0.12.3", features = ["vendored-ssl"] } diff --git a/src/lib.rs b/src/lib.rs index 451f647..5794e14 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -17,13 +17,6 @@ wasmtime::component::bindgen!({ use spin::mqtt_trigger::spin_mqtt_types as mqtt_types; -#[derive(Args)] -pub struct CliArgs { - /// If true, run each component once and exit - #[clap(long)] - pub test: bool, -} - // The trigger structure with all values processed and ready #[derive(Clone)] pub struct MqttTrigger { @@ -35,44 +28,6 @@ pub struct MqttTrigger { test: bool, } -// Trigger settings (raw serialization format) -#[derive(Clone, Debug, Default, Deserialize, Serialize)] -#[serde(deny_unknown_fields)] -struct TriggerMetadata { - address: String, - username: String, - password: String, - keep_alive_interval: u64, -} - -impl TriggerMetadata { - /// Resolve any variables inside the trigger metadata. - async fn resolve_variables( - &mut self, - trigger_app: &TriggerApp, - ) -> anyhow::Result<()> { - let address = resolve_variables(trigger_app, self.address.clone()).await?; - let username = resolve_variables(trigger_app, self.username.clone()).await?; - let password = resolve_variables(trigger_app, self.password.clone()).await?; - self.address = address; - self.username = username; - self.password = password; - Ok(()) - } -} - -// Per-component settings (raw serialization format) -#[derive(Clone, Debug, Default, Deserialize, Serialize)] -#[serde(deny_unknown_fields)] -pub struct ComponentConfig { - /// The component id - component: String, - /// The topic - topic: String, - /// The QoS level - qos: i32, -} - impl Trigger for MqttTrigger { const TYPE: &'static str = "mqtt"; type InstanceState = (); @@ -143,6 +98,7 @@ impl Trigger for MqttTrigger { } impl MqttTrigger { + /// Handle a specific MQTT event async fn handle_mqtt_event( &self, trigger_app: &TriggerApp, @@ -162,6 +118,7 @@ impl MqttTrigger { .map_err(|err| anyhow!("failed to execute guest: {err}")) } + /// Run the listener for a specific component async fn run_listener( &self, trigger_app: &TriggerApp, @@ -219,6 +176,52 @@ impl MqttTrigger { } } +/// Command line arguments +#[derive(Args)] +pub struct CliArgs { + /// If true, run each component once and exit + #[clap(long)] + pub test: bool, +} + +// Trigger settings (raw serialization format) +#[derive(Clone, Debug, Default, Deserialize, Serialize)] +#[serde(deny_unknown_fields)] +struct TriggerMetadata { + address: String, + username: String, + password: String, + keep_alive_interval: u64, +} + +impl TriggerMetadata { + /// Resolve any variables inside the trigger metadata. + async fn resolve_variables( + &mut self, + trigger_app: &TriggerApp, + ) -> anyhow::Result<()> { + let address = resolve_variables(trigger_app, self.address.clone()).await?; + let username = resolve_variables(trigger_app, self.username.clone()).await?; + let password = resolve_variables(trigger_app, self.password.clone()).await?; + self.address = address; + self.username = username; + self.password = password; + Ok(()) + } +} + +// Per-component settings (raw serialization format) +#[derive(Clone, Debug, Default, Deserialize, Serialize)] +#[serde(deny_unknown_fields)] +pub struct ComponentConfig { + /// The component id + component: String, + /// The topic + topic: String, + /// The QoS level + qos: i32, +} + /// Resolve variables in an expression against the variables in the provided trigger app. async fn resolve_variables( trigger_app: &TriggerApp,