commit
56332ca0f3
5 changed files with 837 additions and 0 deletions
@ -0,0 +1,605 @@
|
||||
# This file is automatically @generated by Cargo. |
||||
# It is not intended for manual editing. |
||||
[[package]] |
||||
name = "async-channel" |
||||
version = "1.5.1" |
||||
source = "registry+https://github.com/rust-lang/crates.io-index" |
||||
checksum = "59740d83946db6a5af71ae25ddf9562c2b176b2ca42cf99a455f09f4a220d6b9" |
||||
dependencies = [ |
||||
"concurrent-queue", |
||||
"event-listener", |
||||
"futures-core", |
||||
] |
||||
|
||||
[[package]] |
||||
name = "autocfg" |
||||
version = "1.0.1" |
||||
source = "registry+https://github.com/rust-lang/crates.io-index" |
||||
checksum = "cdb031dd78e28731d87d56cc8ffef4a8f36ca26c38fe2de700543e627f8a464a" |
||||
|
||||
[[package]] |
||||
name = "base64" |
||||
version = "0.13.0" |
||||
source = "registry+https://github.com/rust-lang/crates.io-index" |
||||
checksum = "904dfeac50f3cdaba28fc6f57fdcddb75f49ed61346676a78c4ffe55877802fd" |
||||
|
||||
[[package]] |
||||
name = "bumpalo" |
||||
version = "3.5.0" |
||||
source = "registry+https://github.com/rust-lang/crates.io-index" |
||||
checksum = "f07aa6688c702439a1be0307b6a94dffe1168569e45b9500c1372bc580740d59" |
||||
|
||||
[[package]] |
||||
name = "bytes" |
||||
version = "1.0.1" |
||||
source = "registry+https://github.com/rust-lang/crates.io-index" |
||||
checksum = "b700ce4376041dcd0a327fd0097c41095743c4c8af8887265942faf1100bd040" |
||||
|
||||
[[package]] |
||||
name = "cache-padded" |
||||
version = "1.1.1" |
||||
source = "registry+https://github.com/rust-lang/crates.io-index" |
||||
checksum = "631ae5198c9be5e753e5cc215e1bd73c2b466a3565173db433f52bb9d3e66dba" |
||||
|
||||
[[package]] |
||||
name = "cc" |
||||
version = "1.0.66" |
||||
source = "registry+https://github.com/rust-lang/crates.io-index" |
||||
checksum = "4c0496836a84f8d0495758516b8621a622beb77c0fed418570e50764093ced48" |
||||
|
||||
[[package]] |
||||
name = "cfg-if" |
||||
version = "0.1.10" |
||||
source = "registry+https://github.com/rust-lang/crates.io-index" |
||||
checksum = "4785bdd1c96b2a846b2bd7cc02e86b6b3dbf14e7e53446c4f54c92a361040822" |
||||
|
||||
[[package]] |
||||
name = "cfg-if" |
||||
version = "1.0.0" |
||||
source = "registry+https://github.com/rust-lang/crates.io-index" |
||||
checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" |
||||
|
||||
[[package]] |
||||
name = "concurrent-queue" |
||||
version = "1.2.2" |
||||
source = "registry+https://github.com/rust-lang/crates.io-index" |
||||
checksum = "30ed07550be01594c6026cff2a1d7fe9c8f683caa798e12b68694ac9e88286a3" |
||||
dependencies = [ |
||||
"cache-padded", |
||||
] |
||||
|
||||
[[package]] |
||||
name = "event-listener" |
||||
version = "2.5.1" |
||||
source = "registry+https://github.com/rust-lang/crates.io-index" |
||||
checksum = "f7531096570974c3a9dcf9e4b8e1cede1ec26cf5046219fb3b9d897503b9be59" |
||||
|
||||
[[package]] |
||||
name = "fnv" |
||||
version = "1.0.7" |
||||
source = "registry+https://github.com/rust-lang/crates.io-index" |
||||
checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" |
||||
|
||||
[[package]] |
||||
name = "futures-core" |
||||
version = "0.3.12" |
||||
source = "registry+https://github.com/rust-lang/crates.io-index" |
||||
checksum = "79e5145dde8da7d1b3892dad07a9c98fc04bc39892b1ecc9692cf53e2b780a65" |
||||
|
||||
[[package]] |
||||
name = "hermit-abi" |
||||
version = "0.1.18" |
||||
source = "registry+https://github.com/rust-lang/crates.io-index" |
||||
checksum = "322f4de77956e22ed0e5032c359a0f1273f1f7f0d79bfa3b8ffbc730d7fbcc5c" |
||||
dependencies = [ |
||||
"libc", |
||||
] |
||||
|
||||
[[package]] |
||||
name = "http" |
||||
version = "0.2.3" |
||||
source = "registry+https://github.com/rust-lang/crates.io-index" |
||||
checksum = "7245cd7449cc792608c3c8a9eaf69bd4eabbabf802713748fd739c98b82f0747" |
||||
dependencies = [ |
||||
"bytes", |
||||
"fnv", |
||||
"itoa", |
||||
] |
||||
|
||||
[[package]] |
||||
name = "instant" |
||||
version = "0.1.9" |
||||
source = "registry+https://github.com/rust-lang/crates.io-index" |
||||
checksum = "61124eeebbd69b8190558df225adf7e4caafce0d743919e5d6b19652314ec5ec" |
||||
dependencies = [ |
||||
"cfg-if 1.0.0", |
||||
] |
||||
|
||||
[[package]] |
||||
name = "itoa" |
||||
version = "0.4.7" |
||||
source = "registry+https://github.com/rust-lang/crates.io-index" |
||||
checksum = "dd25036021b0de88a0aff6b850051563c6516d0bf53f8638938edbb9de732736" |
||||
|
||||
[[package]] |
||||
name = "js-sys" |
||||
version = "0.3.47" |
||||
source = "registry+https://github.com/rust-lang/crates.io-index" |
||||
checksum = "5cfb73131c35423a367daf8cbd24100af0d077668c8c2943f0e7dd775fef0f65" |
||||
dependencies = [ |
||||
"wasm-bindgen", |
||||
] |
||||
|
||||
[[package]] |
||||
name = "lazy_static" |
||||
version = "1.4.0" |
||||
source = "registry+https://github.com/rust-lang/crates.io-index" |
||||
checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" |
||||
|
||||
[[package]] |
||||
name = "libc" |
||||
version = "0.2.82" |
||||
source = "registry+https://github.com/rust-lang/crates.io-index" |
||||
checksum = "89203f3fba0a3795506acaad8ebce3c80c0af93f994d5a1d7a0b1eeb23271929" |
||||
|
||||
[[package]] |
||||
name = "lock_api" |
||||
version = "0.4.2" |
||||
source = "registry+https://github.com/rust-lang/crates.io-index" |
||||
checksum = "dd96ffd135b2fd7b973ac026d28085defbe8983df057ced3eb4f2130b0831312" |
||||
dependencies = [ |
||||
"scopeguard", |
||||
] |
||||
|
||||
[[package]] |
||||
name = "log" |
||||
version = "0.4.13" |
||||
source = "registry+https://github.com/rust-lang/crates.io-index" |
||||
checksum = "fcf3805d4480bb5b86070dcfeb9e2cb2ebc148adb753c5cca5f884d1d65a42b2" |
||||
dependencies = [ |
||||
"cfg-if 0.1.10", |
||||
] |
||||
|
||||
[[package]] |
||||
name = "memchr" |
||||
version = "2.3.4" |
||||
source = "registry+https://github.com/rust-lang/crates.io-index" |
||||
checksum = "0ee1c47aaa256ecabcaea351eae4a9b01ef39ed810004e298d2511ed284b1525" |
||||
|
||||
[[package]] |
||||
name = "mio" |
||||
version = "0.7.7" |
||||
source = "registry+https://github.com/rust-lang/crates.io-index" |
||||
checksum = "e50ae3f04d169fcc9bde0b547d1c205219b7157e07ded9c5aff03e0637cb3ed7" |
||||
dependencies = [ |
||||
"libc", |
||||
"log", |
||||
"miow", |
||||
"ntapi", |
||||
"winapi", |
||||
] |
||||
|
||||
[[package]] |
||||
name = "miow" |
||||
version = "0.3.6" |
||||
source = "registry+https://github.com/rust-lang/crates.io-index" |
||||
checksum = "5a33c1b55807fbed163481b5ba66db4b2fa6cde694a5027be10fb724206c5897" |
||||
dependencies = [ |
||||
"socket2", |
||||
"winapi", |
||||
] |
||||
|
||||
[[package]] |
||||
name = "mqttbytes" |
||||
version = "0.2.1" |
||||
source = "git+https://github.com/bytebeamio/rumqtt#c24d6dd1cabd005aa56b111bf24daa18bfb43a9e" |
||||
dependencies = [ |
||||
"bytes", |
||||
] |
||||
|
||||
[[package]] |
||||
name = "ntapi" |
||||
version = "0.3.6" |
||||
source = "registry+https://github.com/rust-lang/crates.io-index" |
||||
checksum = "3f6bb902e437b6d86e03cce10a7e2af662292c5dfef23b65899ea3ac9354ad44" |
||||
dependencies = [ |
||||
"winapi", |
||||
] |
||||
|
||||
[[package]] |
||||
name = "num_cpus" |
||||
version = "1.13.0" |
||||
source = "registry+https://github.com/rust-lang/crates.io-index" |
||||
checksum = "05499f3756671c15885fee9034446956fff3f243d6077b91e5767df161f766b3" |
||||
dependencies = [ |
||||
"hermit-abi", |
||||
"libc", |
||||
] |
||||
|
||||
[[package]] |
||||
name = "once_cell" |
||||
version = "1.5.2" |
||||
source = "registry+https://github.com/rust-lang/crates.io-index" |
||||
checksum = "13bd41f508810a131401606d54ac32a467c97172d74ba7662562ebba5ad07fa0" |
||||
|
||||
[[package]] |
||||
name = "parking_lot" |
||||
version = "0.11.1" |
||||
source = "registry+https://github.com/rust-lang/crates.io-index" |
||||
checksum = "6d7744ac029df22dca6284efe4e898991d28e3085c706c972bcd7da4a27a15eb" |
||||
dependencies = [ |
||||
"instant", |
||||
"lock_api", |
||||
"parking_lot_core", |
||||
] |
||||
|
||||
[[package]] |
||||
name = "parking_lot_core" |
||||
version = "0.8.2" |
||||
source = "registry+https://github.com/rust-lang/crates.io-index" |
||||
checksum = "9ccb628cad4f84851442432c60ad8e1f607e29752d0bf072cbd0baf28aa34272" |
||||
dependencies = [ |
||||
"cfg-if 1.0.0", |
||||
"instant", |
||||
"libc", |
||||
"redox_syscall", |
||||
"smallvec", |
||||
"winapi", |
||||
] |
||||
|
||||
[[package]] |
||||
name = "pin-project-lite" |
||||
version = "0.2.4" |
||||
source = "registry+https://github.com/rust-lang/crates.io-index" |
||||
checksum = "439697af366c49a6d0a010c56a0d97685bc140ce0d377b13a2ea2aa42d64a827" |
||||
|
||||
[[package]] |
||||
name = "pollster" |
||||
version = "0.2.1" |
||||
source = "registry+https://github.com/rust-lang/crates.io-index" |
||||
checksum = "1a0c427c464eaca5923b642b3b346792b9c98edd91026aa6a753435e42d2a07b" |
||||
|
||||
[[package]] |
||||
name = "proc-macro2" |
||||
version = "1.0.24" |
||||
source = "registry+https://github.com/rust-lang/crates.io-index" |
||||
checksum = "1e0704ee1a7e00d7bb417d0770ea303c1bccbabf0ef1667dae92b5967f5f8a71" |
||||
dependencies = [ |
||||
"unicode-xid", |
||||
] |
||||
|
||||
[[package]] |
||||
name = "quote" |
||||
version = "1.0.8" |
||||
source = "registry+https://github.com/rust-lang/crates.io-index" |
||||
checksum = "991431c3519a3f36861882da93630ce66b52918dcf1b8e2fd66b397fc96f28df" |
||||
dependencies = [ |
||||
"proc-macro2", |
||||
] |
||||
|
||||
[[package]] |
||||
name = "redox_syscall" |
||||
version = "0.1.57" |
||||
source = "registry+https://github.com/rust-lang/crates.io-index" |
||||
checksum = "41cc0f7e4d5d4544e8861606a285bb08d3e70712ccc7d2b84d7c0ccfaf4b05ce" |
||||
|
||||
[[package]] |
||||
name = "rhasspy-skill-server" |
||||
version = "0.1.0" |
||||
dependencies = [ |
||||
"rumqttc", |
||||
"serde", |
||||
"serde_json", |
||||
"tokio", |
||||
] |
||||
|
||||
[[package]] |
||||
name = "ring" |
||||
version = "0.16.19" |
||||
source = "registry+https://github.com/rust-lang/crates.io-index" |
||||
checksum = "024a1e66fea74c66c66624ee5622a7ff0e4b73a13b4f5c326ddb50c708944226" |
||||
dependencies = [ |
||||
"cc", |
||||
"libc", |
||||
"once_cell", |
||||
"spin", |
||||
"untrusted", |
||||
"web-sys", |
||||
"winapi", |
||||
] |
||||
|
||||
[[package]] |
||||
name = "rumqttc" |
||||
version = "0.5.0" |
||||
source = "git+https://github.com/bytebeamio/rumqtt#c24d6dd1cabd005aa56b111bf24daa18bfb43a9e" |
||||
dependencies = [ |
||||
"async-channel", |
||||
"bytes", |
||||
"http", |
||||
"log", |
||||
"mqttbytes", |
||||
"pollster", |
||||
"thiserror", |
||||
"tokio", |
||||
"tokio-rustls", |
||||
"webpki", |
||||
] |
||||
|
||||
[[package]] |
||||
name = "rustls" |
||||
version = "0.19.0" |
||||
source = "registry+https://github.com/rust-lang/crates.io-index" |
||||
checksum = "064fd21ff87c6e87ed4506e68beb42459caa4a0e2eb144932e6776768556980b" |
||||
dependencies = [ |
||||
"base64", |
||||
"log", |
||||
"ring", |
||||
"sct", |
||||
"webpki", |
||||
] |
||||
|
||||
[[package]] |
||||
name = "ryu" |
||||
version = "1.0.5" |
||||
source = "registry+https://github.com/rust-lang/crates.io-index" |
||||
checksum = "71d301d4193d031abdd79ff7e3dd721168a9572ef3fe51a1517aba235bd8f86e" |
||||
|
||||
[[package]] |
||||
name = "scopeguard" |
||||
version = "1.1.0" |
||||
source = "registry+https://github.com/rust-lang/crates.io-index" |
||||
checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd" |
||||
|
||||
[[package]] |
||||
name = "sct" |
||||
version = "0.6.0" |
||||
source = "registry+https://github.com/rust-lang/crates.io-index" |
||||
checksum = "e3042af939fca8c3453b7af0f1c66e533a15a86169e39de2657310ade8f98d3c" |
||||
dependencies = [ |
||||
"ring", |
||||
"untrusted", |
||||
] |
||||
|
||||
[[package]] |
||||
name = "serde" |
||||
version = "1.0.123" |
||||
source = "registry+https://github.com/rust-lang/crates.io-index" |
||||
checksum = "92d5161132722baa40d802cc70b15262b98258453e85e5d1d365c757c73869ae" |
||||
dependencies = [ |
||||
"serde_derive", |
||||
] |
||||
|
||||
[[package]] |
||||
name = "serde_derive" |
||||
version = "1.0.123" |
||||
source = "registry+https://github.com/rust-lang/crates.io-index" |
||||
checksum = "9391c295d64fc0abb2c556bad848f33cb8296276b1ad2677d1ae1ace4f258f31" |
||||
dependencies = [ |
||||
"proc-macro2", |
||||
"quote", |
||||
"syn", |
||||
] |
||||
|
||||
[[package]] |
||||
name = "serde_json" |
||||
version = "1.0.61" |
||||
source = "registry+https://github.com/rust-lang/crates.io-index" |
||||
checksum = "4fceb2595057b6891a4ee808f70054bd2d12f0e97f1cbb78689b59f676df325a" |
||||
dependencies = [ |
||||
"itoa", |
||||
"ryu", |
||||
"serde", |
||||
] |
||||
|
||||
[[package]] |
||||
name = "signal-hook-registry" |
||||
version = "1.3.0" |
||||
source = "registry+https://github.com/rust-lang/crates.io-index" |
||||
checksum = "16f1d0fef1604ba8f7a073c7e701f213e056707210e9020af4528e0101ce11a6" |
||||
dependencies = [ |
||||
"libc", |
||||
] |
||||
|
||||
[[package]] |
||||
name = "smallvec" |
||||
version = "1.6.1" |
||||
source = "registry+https://github.com/rust-lang/crates.io-index" |
||||
checksum = "fe0f37c9e8f3c5a4a66ad655a93c74daac4ad00c441533bf5c6e7990bb42604e" |
||||
|
||||
[[package]] |
||||
name = "socket2" |
||||
version = "0.3.19" |
||||
source = "registry+https://github.com/rust-lang/crates.io-index" |
||||
checksum = "122e570113d28d773067fab24266b66753f6ea915758651696b6e35e49f88d6e" |
||||
dependencies = [ |
||||
"cfg-if 1.0.0", |
||||
"libc", |
||||
"winapi", |
||||
] |
||||
|
||||
[[package]] |
||||
name = "spin" |
||||
version = "0.5.2" |
||||
source = "registry+https://github.com/rust-lang/crates.io-index" |
||||
checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d" |
||||
|
||||
[[package]] |
||||
name = "syn" |
||||
version = "1.0.60" |
||||
source = "registry+https://github.com/rust-lang/crates.io-index" |
||||
checksum = "c700597eca8a5a762beb35753ef6b94df201c81cca676604f547495a0d7f0081" |
||||
dependencies = [ |
||||
"proc-macro2", |
||||
"quote", |
||||
"unicode-xid", |
||||
] |
||||
|
||||
[[package]] |
||||
name = "thiserror" |
||||
version = "1.0.23" |
||||
source = "registry+https://github.com/rust-lang/crates.io-index" |
||||
checksum = "76cc616c6abf8c8928e2fdcc0dbfab37175edd8fb49a4641066ad1364fdab146" |
||||
dependencies = [ |
||||
"thiserror-impl", |
||||
] |
||||
|
||||
[[package]] |
||||
name = "thiserror-impl" |
||||
version = "1.0.23" |
||||
source = "registry+https://github.com/rust-lang/crates.io-index" |
||||
checksum = "9be73a2caec27583d0046ef3796c3794f868a5bc813db689eed00c7631275cd1" |
||||
dependencies = [ |
||||
"proc-macro2", |
||||
"quote", |
||||
"syn", |
||||
] |
||||
|
||||
[[package]] |
||||
name = "tokio" |
||||
version = "1.1.0" |
||||
source = "registry+https://github.com/rust-lang/crates.io-index" |
||||
checksum = "8efab2086f17abcddb8f756117665c958feee6b2e39974c2f1600592ab3a4195" |
||||
dependencies = [ |
||||
"autocfg", |
||||
"bytes", |
||||
"libc", |
||||
"memchr", |
||||
"mio", |
||||
"num_cpus", |
||||
"once_cell", |
||||
"parking_lot", |
||||
"pin-project-lite", |
||||
"signal-hook-registry", |
||||
"tokio-macros", |
||||
"winapi", |
||||
] |
||||
|
||||
[[package]] |
||||
name = "tokio-macros" |
||||
version = "1.0.0" |
||||
source = "registry+https://github.com/rust-lang/crates.io-index" |
||||
checksum = "42517d2975ca3114b22a16192634e8241dc5cc1f130be194645970cc1c371494" |
||||
dependencies = [ |
||||
"proc-macro2", |
||||
"quote", |
||||
"syn", |
||||
] |
||||
|
||||
[[package]] |
||||
name = "tokio-rustls" |
||||
version = "0.22.0" |
||||
source = "registry+https://github.com/rust-lang/crates.io-index" |
||||
checksum = "bc6844de72e57df1980054b38be3a9f4702aba4858be64dd700181a8a6d0e1b6" |
||||
dependencies = [ |
||||
"rustls", |
||||
"tokio", |
||||
"webpki", |
||||
] |
||||
|
||||
[[package]] |
||||
name = "unicode-xid" |
||||
version = "0.2.1" |
||||
source = "registry+https://github.com/rust-lang/crates.io-index" |
||||
checksum = "f7fe0bb3479651439c9112f72b6c505038574c9fbb575ed1bf3b797fa39dd564" |
||||
|
||||
[[package]] |
||||
name = "untrusted" |
||||
version = "0.7.1" |
||||
source = "registry+https://github.com/rust-lang/crates.io-index" |
||||
checksum = "a156c684c91ea7d62626509bce3cb4e1d9ed5c4d978f7b4352658f96a4c26b4a" |
||||
|
||||
[[package]] |
||||
name = "wasm-bindgen" |
||||
version = "0.2.70" |
||||
source = "registry+https://github.com/rust-lang/crates.io-index" |
||||
checksum = "55c0f7123de74f0dab9b7d00fd614e7b19349cd1e2f5252bbe9b1754b59433be" |
||||
dependencies = [ |
||||
"cfg-if 1.0.0", |
||||
"wasm-bindgen-macro", |
||||
] |
||||
|
||||
[[package]] |
||||
name = "wasm-bindgen-backend" |
||||
version = "0.2.70" |
||||
source = "registry+https://github.com/rust-lang/crates.io-index" |
||||
checksum = "7bc45447f0d4573f3d65720f636bbcc3dd6ce920ed704670118650bcd47764c7" |
||||
dependencies = [ |
||||
"bumpalo", |
||||
"lazy_static", |
||||
"log", |
||||
"proc-macro2", |
||||
"quote", |
||||
"syn", |
||||
"wasm-bindgen-shared", |
||||
] |
||||
|
||||
[[package]] |
||||
name = "wasm-bindgen-macro" |
||||
version = "0.2.70" |
||||
source = "registry+https://github.com/rust-lang/crates.io-index" |
||||
checksum = "3b8853882eef39593ad4174dd26fc9865a64e84026d223f63bb2c42affcbba2c" |
||||
dependencies = [ |
||||
"quote", |
||||
"wasm-bindgen-macro-support", |
||||
] |
||||
|
||||
[[package]] |
||||
name = "wasm-bindgen-macro-support" |
||||
version = "0.2.70" |
||||
source = "registry+https://github.com/rust-lang/crates.io-index" |
||||
checksum = "4133b5e7f2a531fa413b3a1695e925038a05a71cf67e87dafa295cb645a01385" |
||||
dependencies = [ |
||||
"proc-macro2", |
||||
"quote", |
||||
"syn", |
||||
"wasm-bindgen-backend", |
||||
"wasm-bindgen-shared", |
||||
] |
||||
|
||||
[[package]] |
||||
name = "wasm-bindgen-shared" |
||||
version = "0.2.70" |
||||
source = "registry+https://github.com/rust-lang/crates.io-index" |
||||
checksum = "dd4945e4943ae02d15c13962b38a5b1e81eadd4b71214eee75af64a4d6a4fd64" |
||||
|
||||
[[package]] |
||||
name = "web-sys" |
||||
version = "0.3.47" |
||||
source = "registry+https://github.com/rust-lang/crates.io-index" |
||||
checksum = "c40dc691fc48003eba817c38da7113c15698142da971298003cac3ef175680b3" |
||||
dependencies = [ |
||||
"js-sys", |
||||
"wasm-bindgen", |
||||
] |
||||
|
||||
[[package]] |
||||
name = "webpki" |
||||
version = "0.21.4" |
||||
source = "registry+https://github.com/rust-lang/crates.io-index" |
||||
checksum = "b8e38c0608262c46d4a56202ebabdeb094cef7e560ca7a226c6bf055188aa4ea" |
||||
dependencies = [ |
||||
"ring", |
||||
"untrusted", |
||||
] |
||||
|
||||
[[package]] |
||||
name = "winapi" |
||||
version = "0.3.9" |
||||
source = "registry+https://github.com/rust-lang/crates.io-index" |
||||
checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" |
||||
dependencies = [ |
||||
"winapi-i686-pc-windows-gnu", |
||||
"winapi-x86_64-pc-windows-gnu", |
||||
] |
||||
|
||||
[[package]] |
||||
name = "winapi-i686-pc-windows-gnu" |
||||
version = "0.4.0" |
||||
source = "registry+https://github.com/rust-lang/crates.io-index" |
||||
checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" |
||||
|
||||
[[package]] |
||||
name = "winapi-x86_64-pc-windows-gnu" |
||||
version = "0.4.0" |
||||
source = "registry+https://github.com/rust-lang/crates.io-index" |
||||
checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" |
@ -0,0 +1,19 @@
|
||||
[package] |
||||
name = "rhasspy-skill-server" |
||||
version = "0.1.0" |
||||
authors = ["Paul van Tilburg <paul@luon.net>"] |
||||
edition = "2018" |
||||
description = """ |
||||
A skill server for Rhasspy written in Rust that uses the Hermes MQTT protocol. |
||||
It is mainly meant for personal use as it currently hardcodes a number of |
||||
intents, but can also act as an example. |
||||
""" |
||||
license = "MIT" |
||||
keywords = ["mqtt", "rhasspy", "hermes", "voice assistant"] |
||||
|
||||
[dependencies] |
||||
# Use the GIt version until the crate is fully stabilized on Tokio 1.0 |
||||
rumqttc = { git = "https://github.com/bytebeamio/rumqtt", version = "0.5.0" } |
||||
serde = { version = "1.0", features = ["derive"] } |
||||
serde_json = "1.0" |
||||
tokio = "1.0" |
@ -0,0 +1,144 @@
|
||||
#![warn(clippy::all)] |
||||
|
||||
use serde::{Deserialize, Deserializer, Serialize}; |
||||
use std::collections::HashMap; |
||||
|
||||
// Hermes protocol types
|
||||
|
||||
#[derive(Debug, Deserialize)] |
||||
struct HermesIntent { |
||||
input: String, |
||||
#[serde(rename = "rawInput")] |
||||
input_raw: String, |
||||
intent: HermesIntentClassification, |
||||
#[serde(rename = "sessionId")] |
||||
session_id: String, |
||||
#[serde(rename = "siteId")] |
||||
site_id: String, |
||||
slots: Vec<HermesSlot>, |
||||
} |
||||
|
||||
#[derive(Debug, Deserialize)] |
||||
struct HermesIntentClassification { |
||||
#[serde(rename = "confidenceScore")] |
||||
confidence: f32, |
||||
#[serde(rename = "intentName")] |
||||
name: String, |
||||
} |
||||
|
||||
#[derive(Debug, Deserialize)] |
||||
struct HermesSlot { |
||||
confidence: f32, |
||||
entity: String, |
||||
#[serde(rename = "slotName")] |
||||
name: String, |
||||
value: HermesSlotValue, |
||||
#[serde(rename = "rawValue")] |
||||
value_raw: String, |
||||
} |
||||
|
||||
#[derive(Debug, Deserialize)] |
||||
struct HermesSlotValue { |
||||
value: String, |
||||
} |
||||
|
||||
#[derive(Debug, Serialize)] |
||||
struct HermesResponse { |
||||
#[serde(rename = "sessionId")] |
||||
session_id: String, |
||||
text: Option<String>, |
||||
} |
||||
|
||||
#[derive(Debug)] |
||||
pub struct Intent { |
||||
pub name: String, |
||||
pub input: String, |
||||
pub input_raw: String, |
||||
pub confidence: f32, |
||||
pub session_id: String, |
||||
pub site_id: String, |
||||
pub slots: HashMap<String, Slot>, |
||||
} |
||||
|
||||
impl From<HermesIntent> for Intent { |
||||
fn from(hermes_intent: HermesIntent) -> Self { |
||||
let slots = hermes_intent |
||||
.slots |
||||
.into_iter() |
||||
.map(|hermes_slot| (hermes_slot.name.clone(), Slot::from(hermes_slot))) |
||||
.collect(); |
||||
|
||||
Self { |
||||
name: hermes_intent.intent.name, |
||||
input: hermes_intent.input, |
||||
input_raw: hermes_intent.input_raw, |
||||
confidence: hermes_intent.intent.confidence, |
||||
session_id: hermes_intent.session_id, |
||||
site_id: hermes_intent.site_id, |
||||
slots, |
||||
} |
||||
} |
||||
} |
||||
|
||||
#[derive(Debug)] |
||||
pub struct Slot { |
||||
pub confidence: f32, |
||||
pub entity: String, |
||||
pub value: String, |
||||
pub value_raw: String, |
||||
} |
||||
|
||||
impl From<HermesSlot> for Slot { |
||||
fn from(slot_data: HermesSlot) -> Self { |
||||
Self { |
||||
confidence: slot_data.confidence, |
||||
entity: slot_data.entity, |
||||
value: slot_data.value.value, |
||||
value_raw: slot_data.value_raw, |
||||
} |
||||
} |
||||
} |
||||
|
||||
impl<'de> Deserialize<'de> for Intent { |
||||
fn deserialize<D>(deserializer: D) -> Result<Self, D::Error> |
||||
where |
||||
D: Deserializer<'de>, |
||||
{ |
||||
let intent_data = HermesIntent::deserialize(deserializer)?; |
||||
Ok(Intent::from(intent_data)) |
||||
} |
||||
} |
||||
|
||||
#[derive(Debug)] |
||||
pub struct Response { |
||||
pub session_id: String, |
||||
pub text: Option<String>, |
||||
} |
||||
|
||||
impl Response { |
||||
pub fn new(session_id: String) -> Self { |
||||
let text = None; |
||||
Self { session_id, text } |
||||
} |
||||
|
||||
pub fn with_text(mut self, text: impl Into<String>) -> Self { |
||||
self.text = Some(text.into()); |
||||
self |
||||
} |
||||
} |
||||
|
||||
impl From<Response> for Vec<u8> { |
||||
fn from(response: Response) -> Vec<u8> { |
||||
let hermes_response = HermesResponse::from(response); |
||||
serde_json::to_vec(&hermes_response).unwrap() |
||||
} |
||||
} |
||||
|
||||
impl From<Response> for HermesResponse { |
||||
fn from(response: Response) -> Self { |
||||
HermesResponse { |
||||
session_id: response.session_id, |
||||
text: response.text, |
||||
} |
||||
} |
||||
} |
@ -0,0 +1,68 @@
|
||||
use rhasspy_skill_server::{Intent, Response}; |
||||
use rumqttc::{AsyncClient, Event, MqttOptions, Packet, QoS}; |
||||
|
||||
#[derive(Default, Debug)] |
||||
struct Context; |
||||
|
||||
async fn handle(_context: &mut Context, intent: Intent) -> Option<Response> { |
||||
println!( |
||||
">>> Detected intent: {} (confidence: {})", |
||||
intent.name, intent.confidence |
||||
); |
||||
|
||||
match intent.name.as_ref() { |
||||
"test" => { |
||||
let choice = intent.slots.get("choice").unwrap(); |
||||
Some( |
||||
Response::new(intent.session_id) |
||||
.with_text(format!("De test is geslaagd: {}", choice.value)), |
||||
) |
||||
} |
||||
_ => { |
||||
println!("??? Ignoring unsupported intent: {:?}", intent.name); |
||||
None |
||||
} |
||||
} |
||||
} |
||||
|
||||
#[tokio::main] |
||||
async fn main() -> Result<(), Box<dyn std::error::Error + 'static>> { |
||||
let mut mqttoptions = MqttOptions::new("rhasspy-skill-server", "void", 1883); |
||||
mqttoptions.set_keep_alive(5); |
||||
|
||||
let (client, mut eventloop) = AsyncClient::new(mqttoptions, 10); |
||||
client.subscribe("hermes/intent/#", QoS::AtMostOnce).await?; |
||||
|
||||
let mut context = Context::default(); |
||||
loop { |
||||
let event = eventloop.poll().await?; |
||||
if let Event::Incoming(Packet::Publish(published)) = event { |
||||
let result: Result<Intent, _> = serde_json::from_slice(published.payload.as_ref()); |
||||
let response = match result { |
||||
Ok(intent) => handle(&mut context, intent).await, |
||||
Err(e) => { |
||||
println!( |
||||
"!!! Could not parse intent payload: {} at\n{:?}", |
||||
e, published.payload |
||||
); |
||||
continue; |
||||
} |
||||
}; |
||||
|
||||
if let Some(response) = response { |
||||
let result = client |
||||
.publish( |
||||
"hermes/dialogueManager/endSession", |
||||
QoS::AtMostOnce, |
||||
false, |
||||
response, |
||||
) |
||||
.await; |
||||
match result { |
||||
Ok(_) => println!("<<< Reacted with a response!"), |
||||
Err(e) => println!("!!! Could not publish intent payload: {}", e), |
||||
} |
||||
} |
||||
} |
||||
} |
||||
} |
Loading…
Reference in new issue