From 164e410bcf6be5579fef6d293d528d671c9cb9ff Mon Sep 17 00:00:00 2001 From: devolutionsbot <31221910+devolutionsbot@users.noreply.github.com> Date: Mon, 27 Jul 2026 16:40:09 -0400 Subject: [PATCH 1/3] chore(release): prepare for publishing --- Cargo.lock | 235 +++++++++--------- policies/rust/now-policy-api/Cargo.toml | 60 ++--- .../now-policy-server-template/Cargo.toml | 74 +++--- protocols/rust/now-proto-pdu/CHANGELOG.md | 122 +++++++++ protocols/rust/now-proto-pdu/Cargo.toml | 2 +- 5 files changed, 313 insertions(+), 180 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 4c0f938..7d6df14 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -43,19 +43,19 @@ dependencies = [ [[package]] name = "anyhow" -version = "1.0.103" +version = "1.0.104" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a4385e2e34eb35d6b3efe798b9eb88096925d87726c0798709bf56d9ed84af3" +checksum = "330a5ed07fa54e4702c9d6c4174f74427fc0ef6e214bbd677ae50a5099946470" [[package]] name = "async-trait" -version = "0.1.89" +version = "0.1.91" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9035ad2d096bed7955a320ee7e2230574d28fd3c3a0f186cbea1ff3c7eed5dbb" +checksum = "ae36dc4177970ef04fde5178d3e2429882def40e57a451f919c098f72baa6cec" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 3.0.3", ] [[package]] @@ -117,9 +117,9 @@ checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" [[package]] name = "bitflags" -version = "2.13.0" +version = "2.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4388bee8683e3d04af747c73422af53102d2bd24d9eadb6cbc100baef4b43f8" +checksum = "b588b76d00fde79687d7646a9b5bdf3cc0f655e0bbd080335a95d7e96f3587da" [[package]] name = "bumpalo" @@ -129,15 +129,15 @@ checksum = "72f5acc6cb2ba439de613abc23857ec3d78374d8ed5ac84e9d11336e87da8649" [[package]] name = "bytes" -version = "1.12.0" +version = "1.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ae3f5d315924270530207e2a68396c3cc547f6dca3fbdca317cfb1a51edb593" +checksum = "fc652a48c352aef3ea3aed32080501cf3ef6ed5da78602a020c991775b0aff04" [[package]] name = "cc" -version = "1.2.64" +version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dad887fd958be91b5098c0248def011f4523ab786cd411be668777e55063501f" +checksum = "5add81bb678e6cb321aff7fa0dc7689ad82b112dbc032cea19f91d6b8e3582b9" dependencies = [ "find-msvc-tools", "shlex", @@ -197,7 +197,7 @@ dependencies = [ "proc-macro2", "quote", "rustc_version", - "syn", + "syn 2.0.119", "unicode-xid", ] @@ -209,7 +209,7 @@ checksum = "1ac70aa55017e108007fbaf5aa0f54b021c98f92ff8af59d42eda9da96e3dd4f" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.119", ] [[package]] @@ -257,9 +257,9 @@ dependencies = [ [[package]] name = "futures" -version = "0.3.32" +version = "0.3.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b147ee9d1f6d097cef9ce628cd2ee62288d963e16fb287bd9286455b241382d" +checksum = "a88cf1f829d945f548cf8fec32c61b1f202b6d93b45848602fc02af4b12ad218" dependencies = [ "futures-channel", "futures-core", @@ -272,9 +272,9 @@ dependencies = [ [[package]] name = "futures-channel" -version = "0.3.32" +version = "0.3.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07bbe89c50d7a535e539b8c17bc0b49bdb77747034daa8087407d655f3f7cc1d" +checksum = "262590f4fe6afeb0bc83be1daa64e52657fe185690a958af7f3ad0e92085c5ae" dependencies = [ "futures-core", "futures-sink", @@ -282,15 +282,15 @@ dependencies = [ [[package]] name = "futures-core" -version = "0.3.32" +version = "0.3.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e3450815272ef58cec6d564423f6e755e25379b217b0bc688e295ba24df6b1d" +checksum = "2cd50c473c80f6d7c3670a752354b8e569b1a7cbfdc0419ec88e5edad85e0dc7" [[package]] name = "futures-executor" -version = "0.3.32" +version = "0.3.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "baf29c38818342a3b26b5b923639e7b1f4a61fc5e76102d4b1981c6dc7a7579d" +checksum = "6754879cc9f2c66f88c6e5c35344bb0bdb0708b0352b1201815667c7eabc7458" dependencies = [ "futures-core", "futures-task", @@ -299,44 +299,44 @@ dependencies = [ [[package]] name = "futures-io" -version = "0.3.32" +version = "0.3.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cecba35d7ad927e23624b22ad55235f2239cfa44fd10428eecbeba6d6a717718" +checksum = "4577ecaa3c4f96589d473f679a71b596316f6641bc350038b962a5daf0085d7a" [[package]] name = "futures-macro" -version = "0.3.32" +version = "0.3.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e835b70203e41293343137df5c0664546da5745f82ec9b84d40be8336958447b" +checksum = "2d6d3cde68c518367be28956066ddfef33813991b77a55005a69dae04bf3b10b" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.119", ] [[package]] name = "futures-sink" -version = "0.3.32" +version = "0.3.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c39754e157331b013978ec91992bde1ac089843443c49cbc7f46150b0fad0893" +checksum = "e34418ac499d6305c2fb5ad0ed2f6ac998c5f8ca209b4510f7f94242c647e307" [[package]] name = "futures-task" -version = "0.3.32" +version = "0.3.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "037711b3d59c33004d3856fbdc83b99d4ff37a24768fa1be9ce3538a1cde4393" +checksum = "b231ed28831efb4a61a08580c4bc233ec56bc009f4cd8f52da2c3cb97df0c109" [[package]] name = "futures-timer" -version = "3.0.3" +version = "3.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f288b0a4f20f9a56b5d1da57e2227c661b7b16168e2f72365f57b63326e29b24" +checksum = "af43fadb8a98512d547e37b4e92e0ced13e205c061b87b4623eff01d918d6968" [[package]] name = "futures-util" -version = "0.3.32" +version = "0.3.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "389ca41296e6190b48053de0321d02a77f32f8a5d2461dd38762c0593805c6d6" +checksum = "a77a90a256fce34da66415271e30f94ee91c57b04b8a2c042d9cf3220179deaa" dependencies = [ "futures-channel", "futures-core", @@ -351,9 +351,9 @@ dependencies = [ [[package]] name = "glob" -version = "0.3.3" +version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0cc23270f6e1808e30a928bdc84dea0b9b4136a8bc82338574f23baf47bbd280" +checksum = "e4eba85ea1d0a966a983acd07deee566e67395d2d96b6fb39e62b5a833f1eb0b" [[package]] name = "hashbrown" @@ -379,9 +379,9 @@ dependencies = [ [[package]] name = "http-body" -version = "1.0.1" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1efedce1fb8e6913f23e0c92de8e62cd5b772a67e7b3946df930a62566c93184" +checksum = "ca2a8f2913ee65f60facd6a5905613afaa448497a0230cc41ce022d93290bc2c" dependencies = [ "bytes", "http", @@ -389,9 +389,9 @@ dependencies = [ [[package]] name = "http-body-util" -version = "0.1.3" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b021d93e26becf5dc7e1b75b1bed1fd93124b374ceb73f43d4d4eafec896a64a" +checksum = "e9f41fd6a08e4d4ec69df65976da761afd5ad5e58a9d4acb46bd1c953a9e3ff2" dependencies = [ "bytes", "futures-core", @@ -562,9 +562,9 @@ checksum = "8f42a60cbdf9a97f5d2305f08a87dc4e09308d1276d28c869c684d7777685682" [[package]] name = "js-sys" -version = "0.3.102" +version = "0.3.103" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "03d04c30968dffe80775bd4d7fb676131cd04a1fb46d2686dbffbaec2d9dfd31" +checksum = "53b44bfcdb3f8d5837a46dae1ca9660a837176eee74a28b229bc626816589102" dependencies = [ "cfg-if", "futures-util", @@ -573,9 +573,9 @@ dependencies = [ [[package]] name = "libc" -version = "0.2.186" +version = "0.2.189" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68ab91017fe16c622486840e4c83c9a37afeff978bd239b5293d61ece587de66" +checksum = "3eaf3ede3fee6db1a4c2ee091bf8a8b4dccdc6d17f656fb07896ee72867612f2" [[package]] name = "litemap" @@ -585,9 +585,9 @@ checksum = "92daf443525c4cce67b150400bc2316076100ce0b3686209eb8cf3c31612e6f0" [[package]] name = "log" -version = "0.4.32" +version = "0.4.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "953f07c43838f8e6f9758cab68bf5bed85465e7587ebe0b823f1bcd81978ad3a" +checksum = "0ceec5bc11778974d1bcb055b18002eba7f4b3518b6a0081b3af5f21666da9ad" [[package]] name = "matchit" @@ -597,9 +597,9 @@ checksum = "47e1ffaa40ddd1f3ed91f717a33c8c0ee23fff369e3aa8772b9605cc1d22f4c3" [[package]] name = "memchr" -version = "2.8.0" +version = "2.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8ca58f447f06ed17d5fc4043ce1b10dd205e060fb3ce5b979b8ed8e59ff3f79" +checksum = "cf8baf1c55e62ffcace7a9f06f4bd9cd3f0c4beb022d3b367256b91b87513d98" [[package]] name = "mime" @@ -669,7 +669,7 @@ version = "0.0.0" [[package]] name = "now-proto-pdu" -version = "0.4.3" +version = "0.4.4" dependencies = [ "bitflags", "ironrdp-core", @@ -739,27 +739,27 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.106" +version = "1.0.107" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8fd00f0bb2e90d81d1044c2b32617f68fcb9fa3bb7640c23e9c748e53fb30934" +checksum = "985e7ec9bb745e6ce6535b544d84d6cd6f7ad8bd711c398938ae983b91a766d9" dependencies = [ "unicode-ident", ] [[package]] name = "quote" -version = "1.0.45" +version = "1.0.47" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41f2619966050689382d2b44f664f4bc593e129785a36d6ee376ddf37259b924" +checksum = "1fbf4db142a473a8d80c26bbf18454ed458bf8d26c8219c331daecfdbd079001" dependencies = [ "proc-macro2", ] [[package]] name = "regex" -version = "1.12.3" +version = "1.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e10754a14b9137dd7b1e3e5b0493cc9171fdd105e0ab477f51b72e7f3ac0e276" +checksum = "f020237b6c8eed93db2e2cb53c00c60a8e1bc73da7d073199a1180401450218d" dependencies = [ "aho-corasick", "memchr", @@ -769,9 +769,9 @@ dependencies = [ [[package]] name = "regex-automata" -version = "0.4.14" +version = "0.4.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e1dd4122fc1595e8162618945476892eefca7b88c52820e74af6262213cae8f" +checksum = "8fcfdb36bda0c880c5931cdc7a2bcdc8ba4556847b9d912bca70bc94708711ad" dependencies = [ "aho-corasick", "memchr", @@ -780,9 +780,9 @@ dependencies = [ [[package]] name = "regex-syntax" -version = "0.8.10" +version = "0.8.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc897dd8d9e8bd1ed8cdad82b5966c3e0ecae09fb1907d58efaa013543185d0a" +checksum = "d6f6ff9a378485b298a5286656da665ba74413d36db0979633275d2e708145d4" [[package]] name = "relative-path" @@ -815,7 +815,7 @@ dependencies = [ "regex", "relative-path", "rustc_version", - "syn", + "syn 2.0.119", "unicode-ident", ] @@ -830,9 +830,9 @@ dependencies = [ [[package]] name = "rustversion" -version = "1.0.22" +version = "1.0.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d" +checksum = "cf54715a573b99ac80df0bc206da022bcd442c974952c7b9720069370852e21f" [[package]] name = "ryu" @@ -863,7 +863,7 @@ dependencies = [ "proc-macro2", "quote", "serde_derive_internals", - "syn", + "syn 2.0.119", ] [[package]] @@ -874,9 +874,9 @@ checksum = "8a7852d02fc848982e0c167ef163aaff9cd91dc640ba85e263cb1ce46fae51cd" [[package]] name = "serde" -version = "1.0.228" +version = "1.0.229" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a8e94ea7f378bd32cbbd37198a4a91436180c5bb472411e48b5ec2e2124ae9e" +checksum = "4148590afebada386688f18773da617792bf2ef03ffc1e4cbd2b1d45b023e0ba" dependencies = [ "serde_core", "serde_derive", @@ -884,22 +884,22 @@ dependencies = [ [[package]] name = "serde_core" -version = "1.0.228" +version = "1.0.229" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41d385c7d4ca58e59fc732af25c3983b67ac852c1a25000afe1175de458b67ad" +checksum = "67dca2c9c51e58a4791a4b1ed58308b39c64224d349a935ab5039aa360942a48" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.228" +version = "1.0.229" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79" +checksum = "e7a5d71263a5a7d47b41f6b3f06ba276f10cc18b0931f1799f710578e2309348" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 3.0.3", ] [[package]] @@ -910,14 +910,14 @@ checksum = "18d26a20a969b9e3fdf2fc2d9f21eda6c40e2de84c9408bb5d3b05d499aae711" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.119", ] [[package]] name = "serde_json" -version = "1.0.150" +version = "1.0.151" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8014e44b4736ed0538adeecded0fce2a272f22dc9578a7eb6b2d9993c74cfb9" +checksum = "c841b55ecdae098c80dcae9cf767f6f8a0c2cdb3416bbef72181df4d0fe73f14" dependencies = [ "itoa", "memchr", @@ -1005,14 +1005,25 @@ dependencies = [ "heck", "proc-macro2", "quote", - "syn", + "syn 2.0.119", ] [[package]] name = "syn" -version = "2.0.117" +version = "2.0.119" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e665b8803e7b1d2a727f4023456bbbbe74da67099c585258af0ad9c5013b9b99" +checksum = "872831b642d1a07999a962a351ed35b955ea2cfc8f3862091e2a240a84f17297" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "syn" +version = "3.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53e9bae58849f64dfa4f5d5ae372c8341f7305f82a3868709269343628b659a3" dependencies = [ "proc-macro2", "quote", @@ -1033,27 +1044,27 @@ checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.119", ] [[package]] name = "thiserror" -version = "2.0.18" +version = "2.0.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4288b5bcbc7920c07a1149a35cf9590a2aa808e0bc1eafaade0b80947865fbc4" +checksum = "09a43598840e33d5b0331f38c5e30d13bb11c11210a4b58f0d9b18a5a5eefcd9" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "2.0.18" +version = "2.0.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ebc4ee7f67670e9b64d05fa4253e753e016c6c95ff35b89b7941d6b856dec1d5" +checksum = "43cbfe0cf76104d42a574802844187e84a305e531ed54455f11fbde0f10541cd" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 3.0.3", ] [[package]] @@ -1068,9 +1079,9 @@ dependencies = [ [[package]] name = "tokio" -version = "1.52.3" +version = "1.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8fc7f01b389ac15039e4dc9531aa973a135d7a4135281b12d7c1bc79fd57fffe" +checksum = "202caea871b69668250d242070849eb495be178ed697a3e98aebce5bc81a0bed" dependencies = [ "bytes", "pin-project-lite", @@ -1079,13 +1090,13 @@ dependencies = [ [[package]] name = "tokio-macros" -version = "2.7.0" +version = "2.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "385a6cb71ab9ab790c5fe8d67f1645e6c450a7ce006a33de03daa956cf70a496" +checksum = "6328af13490e73a9b4694030fafd93f8c8c6a9dede33e821c3fc63eddf8042ba" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.119", ] [[package]] @@ -1099,9 +1110,9 @@ dependencies = [ [[package]] name = "toml_edit" -version = "0.25.11+spec-1.1.0" +version = "0.25.13+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b59c4d22ed448339746c59b905d24568fcbb3ab65a500494f7b8c3e97739f2b" +checksum = "6975367e4d2ef766d86af01ffad14b622fecc8d4357a998fbc4deb6e9bacaf9b" dependencies = [ "indexmap", "toml_datetime", @@ -1111,9 +1122,9 @@ dependencies = [ [[package]] name = "toml_parser" -version = "1.1.2+spec-1.1.0" +version = "1.1.3+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2abe9b86193656635d2411dc43050282ca48aa31c2451210f4202550afb7526" +checksum = "1d38ac1cf9b95face32296c0a3ede1fdc270627c9d9c02a7274dd6d960dc4d56" dependencies = [ "winnow", ] @@ -1163,7 +1174,7 @@ checksum = "7490cfa5ec963746568740651ac6781f701c9c5ea257c58e057f3ba8cf69e8da" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.119", ] [[package]] @@ -1219,15 +1230,15 @@ checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be" [[package]] name = "uuid" -version = "1.23.4" +version = "1.24.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf80a72845275afea99e7f2b434723d3bc7e38470fcd1c7ed39a599c73319a53" +checksum = "bf3923a6f5c4c6382e0b653c4117f48d631ea17f38ed86e2a828e6f7412f5239" [[package]] name = "wasm-bindgen" -version = "0.2.125" +version = "0.2.126" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ddb3f79143bced6de84270411622a2699cee572fc0875aeaf1e7867cf9fca1a" +checksum = "4b067c0c11094aef6b7a801c1e34a26affafdf3d051dba08456b868789aaf9a4" dependencies = [ "cfg-if", "once_cell", @@ -1238,9 +1249,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.125" +version = "0.2.126" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4e21a184b13fb19e157296e2c46056aec9092264fab83e4ba59e68c61b323c3d" +checksum = "167ce5e579f6bcf889c4f7175a8a5a585de84e8ff93976ce393efa5f2837aab1" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -1248,22 +1259,22 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.125" +version = "0.2.126" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fecefd9c35bd935a20fc3fc344b5f29138961e4f47fb03297d88f2587afb5ebd" +checksum = "f3997c7839262f4ef12cf90b818d6340c18e80f263f1a94bf157d0ec4420380e" dependencies = [ "bumpalo", "proc-macro2", "quote", - "syn", + "syn 2.0.119", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-shared" -version = "0.2.125" +version = "0.2.126" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23939e44bb9a5d7576fa2b563dc2e136628f1224e88a8deed09e04858b77871f" +checksum = "dc1b4cb0cc549fcf58d7dfc081778139b3d283a081644e833e84682ad71cea24" dependencies = [ "unicode-ident", ] @@ -1289,7 +1300,7 @@ checksum = "053e2e040ab57b9dc951b72c264860db7eb3b0200ba345b4e4c3b14f67855ddf" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.119", ] [[package]] @@ -1300,7 +1311,7 @@ checksum = "3f316c4a2570ba26bbec722032c4099d8c8bc095efccdc15688708623367e358" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.119", ] [[package]] @@ -1329,9 +1340,9 @@ dependencies = [ [[package]] name = "winnow" -version = "1.0.3" +version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0592e1c9d151f854e6fd382574c3a0855250e1d9b2f99d9281c6e6391af352f1" +checksum = "23b97319f7b8343df12cc98938e5c3eb436064524c8d2b4e30a1d3a36eecdf81" dependencies = [ "memchr", ] @@ -1385,7 +1396,7 @@ checksum = "de844c262c8848816172cef550288e7dc6c7b7814b4ee56b3e1553f275f1858e" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.119", "synstructure", ] @@ -1406,7 +1417,7 @@ checksum = "11532158c46691caf0f2593ea8358fed6bbf68a0315e80aae9bd41fbade684a1" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.119", "synstructure", ] @@ -1440,11 +1451,11 @@ checksum = "625dc425cab0dca6dc3c3319506e6593dcb08a9f387ea3b284dbd52a92c40555" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.119", ] [[package]] name = "zmij" -version = "1.0.21" +version = "1.0.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8848ee67ecc8aedbaf3e4122217aff892639231befc6a1b58d29fff4c2cabaa" +checksum = "29666d0abbfad1e3dc4dcf6144730dd3a3ab225bbbdac83319345b1b44ccfc1b" diff --git a/policies/rust/now-policy-api/Cargo.toml b/policies/rust/now-policy-api/Cargo.toml index 9868f9c..60eae0b 100644 --- a/policies/rust/now-policy-api/Cargo.toml +++ b/policies/rust/now-policy-api/Cargo.toml @@ -1,30 +1,30 @@ -[package] -name = "now-policy-api" -version = "0.1.0" -edition = "2024" -license.workspace = true -homepage.workspace = true -repository.workspace = true -authors.workspace = true -readme = "README.md" -description = "Implementation-agnostic Devolutions NOW policy package broker API model" -publish = true - -[lints] -workspace = true - -[features] -default = [] -policy-compat = ["dep:now-policy"] - -[dependencies] -base64 = "0.22" -chrono = { version = "0.4", features = ["serde"] } -derive_more = { version = "2", features = ["as_ref", "deref", "display", "from"] } -now-policy = { version = "0.1", path = "../now-policy", optional = true } -schemars = { version = "0.8", features = ["chrono"] } -semver = "1" -serde = { version = "1", features = ["derive"] } -serde_json = "1" -strum = { version = "0.28", features = ["derive"] } -thiserror = "2" +[package] +name = "now-policy-api" +version = "0.1.0" +edition = "2024" +license.workspace = true +homepage.workspace = true +repository.workspace = true +authors.workspace = true +readme = "README.md" +description = "Implementation-agnostic Devolutions NOW policy package broker API model" +publish = true + +[lints] +workspace = true + +[features] +default = [] +policy-compat = ["dep:now-policy"] + +[dependencies] +base64 = "0.22" +chrono = { version = "0.4", features = ["serde"] } +derive_more = { version = "2", features = ["as_ref", "deref", "display", "from"] } +now-policy = { version = "0.1", path = "../now-policy", optional = true } +schemars = { version = "0.8", features = ["chrono"] } +semver = "1" +serde = { version = "1", features = ["derive"] } +serde_json = "1" +strum = { version = "0.28", features = ["derive"] } +thiserror = "2" diff --git a/policies/rust/now-policy-server-template/Cargo.toml b/policies/rust/now-policy-server-template/Cargo.toml index ec0393d..c620169 100644 --- a/policies/rust/now-policy-server-template/Cargo.toml +++ b/policies/rust/now-policy-server-template/Cargo.toml @@ -1,37 +1,37 @@ -[package] -name = "now-policy-server-template" -version = "0.1.0" -edition = "2024" -license.workspace = true -homepage.workspace = true -repository.workspace = true -authors.workspace = true -readme = "README.md" -description = "Reusable Devolutions NOW package broker server facade, mock, and OpenAPI generator" -publish = true - -[lints] -workspace = true - -[features] -default = [] -policy-compat = ["dep:now-policy", "now-policy-api/policy-compat"] - -[dependencies] -aide = { version = "0.14", features = ["axum", "axum-json"] } -async-trait = "0.1" -axum = { version = "0.8", default-features = false, features = ["json"] } -now-policy-api = { version = "0.1", path = "../now-policy-api" } -now-policy = { version = "0.1", path = "../now-policy", optional = true } -schemars = "0.8" -serde = { version = "1", features = ["derive"] } -serde_json = "1" -serde_yaml = "0.9" - -[dev-dependencies] -tokio = { version = "1.52", features = ["macros", "rt"] } -tower = { version = "0.5", features = ["util"] } - -[[bin]] -name = "generate-now-policy-api-openapi" -path = "tools/generate_openapi.rs" +[package] +name = "now-policy-server-template" +version = "0.1.0" +edition = "2024" +license.workspace = true +homepage.workspace = true +repository.workspace = true +authors.workspace = true +readme = "README.md" +description = "Reusable Devolutions NOW package broker server facade, mock, and OpenAPI generator" +publish = true + +[lints] +workspace = true + +[features] +default = [] +policy-compat = ["dep:now-policy", "now-policy-api/policy-compat"] + +[dependencies] +aide = { version = "0.14", features = ["axum", "axum-json"] } +async-trait = "0.1" +axum = { version = "0.8", default-features = false, features = ["json"] } +now-policy-api = { version = "0.1", path = "../now-policy-api" } +now-policy = { version = "0.1", path = "../now-policy", optional = true } +schemars = "0.8" +serde = { version = "1", features = ["derive"] } +serde_json = "1" +serde_yaml = "0.9" + +[dev-dependencies] +tokio = { version = "1.52", features = ["macros", "rt"] } +tower = { version = "0.5", features = ["util"] } + +[[bin]] +name = "generate-now-policy-api-openapi" +path = "tools/generate_openapi.rs" diff --git a/protocols/rust/now-proto-pdu/CHANGELOG.md b/protocols/rust/now-proto-pdu/CHANGELOG.md index 6832d98..d81d284 100644 --- a/protocols/rust/now-proto-pdu/CHANGELOG.md +++ b/protocols/rust/now-proto-pdu/CHANGELOG.md @@ -6,6 +6,128 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [[0.4.4](https://github.com/Devolutions/now-libraries/compare/now-proto-pdu-v0.4.3...now-proto-pdu-v0.4.4)] - 2026-07-27 + +### Features + +- Implement broker APIs and dotnet client ([#76](https://github.com/Devolutions/now-libraries/issues/76)) ([5d343c5f2e](https://github.com/Devolutions/now-libraries/commit/5d343c5f2e611511762812c61238dfec0699daf2)) + + ## Summary + + Adds the package broker API/client foundation to `now-proto` across Rust + and .NET. + + The main goal is to keep the broker protocol definition + implementation-agnostic and transport-independent while making Rust the + source of truth for schema/OpenAPI generation. .NET implementations and + clients can then validate against the generated contract and stay + synchronized with the Rust API model. + + ## Architecture + + ### Rust contract source of truth + + `policies/rust/now-policy-api` defines the canonical package broker wire + model: + + - request, response, status, health, capabilities, and error DTOs; + - package-manager enums and strongly validated newtypes; + - API version and default broker pipe name constants; + - fixed `RequestKind` / `ResponseKind` marker types that serialize as + constant strings and validate discriminator values on deserialization; + - OpenAPI output under + `policies/rust/now-policy-api/openapi/now-policy-api.yaml`. + + This crate intentionally contains no broker implementation. Its purpose + is to describe the protocol shape, generate OpenAPI, and provide a + stable Rust model for tests and server facades. + + ### Rust server facade and mock template + + `policies/rust/now-policy-server-template` provides the implementation + boundary around the API crate: + + - `PackageBrokerServer` trait as the server-side facade; + - Axum router/template that maps HTTP endpoints to the facade without + embedding policy/package-manager logic; + - fixture-backed mock broker for deterministic request/response testing; + - sample request, response, and scenario documents derived from the + Uniget broker shape; + - OpenAPI generation tool that writes the contract back into the API + crate. + + This keeps real broker behavior out of `now-proto` while still allowing + the API to be exercised end-to-end. + + ### Transport-independent message shape + + The protocol now treats request/response identity as part of the body + schema instead of HTTP metadata: + + - `RequestKind` and `RequestVersion` live at the top level of request + messages. + - `ResponseKind` and `ResponseVersion` live at the top level of response + messages. + + This keeps the schema usable if the broker later moves away from + HTTP-over-named-pipe to another transport. + + ### .NET API package + + `policies/dotnet/Devolutions.Now.Policy.Api` mirrors the Rust schema in + C#: + + - API constants, JSON serialization options, and policy-model + compatibility conversions are centralized here. + - Tests validate DTO behavior against the Rust-generated OpenAPI and + shared sample documents. + + This package contains only API types and no transport/client execution + logic. + + ### .NET client package + + `policies/dotnet/Devolutions.Now.Policy.Client` contains the actual + client behavior: + + - `BrokerClient` exposes high-level methods for health, capabilities, + evaluate, execute, and operation status. + - `BrokerClientOptions` is the single configuration entry point. + - Client context fields are filled implicitly where possible, including + effective user, client version, executable path, transport, timestamps, + and generated request IDs. + - Public request wrapper types avoid exposing raw wire DTO fields that + the client owns. + - `IBrokerTransport` abstracts transport so named pipes are only one + implementation detail. + - `NamedPipeBrokerTransport` handles the current HTTP-over-named-pipe + transport. + - Capabilities are fetched and cached before operation/status requests + so unsupported operations fail locally before sending the request. + + ### Test and fixture strategy + + Shared Rust sample documents are used as contract fixtures for both Rust + and .NET. The Rust server-template tests verify sample deserialization, + mock broker behavior, and router/facade wiring. The .NET tests validate + DTO schema compatibility, fixed discriminator handling, policy enum + compatibility, fake transport behavior, capability preflight, error + mapping, and client-generated request metadata. + + ## Changes + + - Added Rust `now-policy-api` and `now-policy-server-template` crates. + - Added generated package broker OpenAPI contract. + - Added shared request/response/scenario samples. + - Added .NET `Devolutions.Now.Policy.Api` and + `Devolutions.Now.Policy.Client` projects. + - Added .NET client/API tests using fake transport and Rust fixture + validation. + - Updated Cargo workspace, .NET solution, NuGet publishing workflow, and + package documentation. + + + ## [[0.4.3](https://github.com/Devolutions/now-proto/compare/now-proto-pdu-v0.4.2...now-proto-pdu-v0.4.3)] - 2026-05-15 ### Features diff --git a/protocols/rust/now-proto-pdu/Cargo.toml b/protocols/rust/now-proto-pdu/Cargo.toml index 7458624..3dcebd4 100644 --- a/protocols/rust/now-proto-pdu/Cargo.toml +++ b/protocols/rust/now-proto-pdu/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "now-proto-pdu" -version = "0.4.3" +version = "0.4.4" readme = "README.md" description = "NOW protocol PDU encoding and decoding" edition.workspace = true From d8160f3b74279916b67d6d29e3deaaa37967670e Mon Sep 17 00:00:00 2001 From: Vladyslav Nikonov Date: Tue, 28 Jul 2026 00:00:56 +0300 Subject: [PATCH 2/3] chore(release): bump policy crates to 0.2.0 for changes shipped in #84 The squash-merge of #84 was mislabeled as 'ci:', so release-plz (release_commits filter) and git-cliff (ci skip rule) ignored it. Manually bump now-policy, now-policy-api and now-policy-server-template to 0.2.0 and hand-write the changelog entries for those changes. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> --- Cargo.lock | 6 +++--- policies/rust/now-policy-api/CHANGELOG.md | 21 +++++++++++++++++++ policies/rust/now-policy-api/Cargo.toml | 4 ++-- .../now-policy-server-template/CHANGELOG.md | 19 +++++++++++++++++ .../now-policy-server-template/Cargo.toml | 6 +++--- policies/rust/now-policy/CHANGELOG.md | 19 +++++++++++++++++ policies/rust/now-policy/Cargo.toml | 2 +- 7 files changed, 68 insertions(+), 9 deletions(-) create mode 100644 policies/rust/now-policy-api/CHANGELOG.md create mode 100644 policies/rust/now-policy-server-template/CHANGELOG.md create mode 100644 policies/rust/now-policy/CHANGELOG.md diff --git a/Cargo.lock b/Cargo.lock index 7d6df14..2172363 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -618,7 +618,7 @@ dependencies = [ [[package]] name = "now-policy" -version = "0.1.0" +version = "0.2.0" dependencies = [ "chrono", "schemars", @@ -632,7 +632,7 @@ dependencies = [ [[package]] name = "now-policy-api" -version = "0.1.0" +version = "0.2.0" dependencies = [ "base64", "chrono", @@ -648,7 +648,7 @@ dependencies = [ [[package]] name = "now-policy-server-template" -version = "0.1.0" +version = "0.2.0" dependencies = [ "aide", "async-trait", diff --git a/policies/rust/now-policy-api/CHANGELOG.md b/policies/rust/now-policy-api/CHANGELOG.md new file mode 100644 index 0000000..719aad1 --- /dev/null +++ b/policies/rust/now-policy-api/CHANGELOG.md @@ -0,0 +1,21 @@ +# Changelog + +All notable changes to this project will be documented in this file. + +The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), +and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). + + +## [[0.2.0](https://github.com/Devolutions/now-libraries/compare/now-policy-api-v0.1.0...now-policy-api-v0.2.0)] - 2026-07-27 + +### Features + +- [**breaking**] Add 14 new package manager variants to `ManagerName` (Apt, Bun, Cargo, Chocolatey, Dnf, Dotnet, Flatpak, Homebrew, Npm, Pacman, Pip, Scoop, Snap, Vcpkg) ([#84](https://github.com/Devolutions/now-libraries/issues/84)) ([7157ff6d25](https://github.com/Devolutions/now-libraries/commit/7157ff6d252417afed41521b59f73f44b5433d66)) +- Add `CapabilitiesResponse::manager_capability` and `CapabilitiesResponse::supports_manager` helpers for querying advertised broker capabilities ([#84](https://github.com/Devolutions/now-libraries/issues/84)) ([7157ff6d25](https://github.com/Devolutions/now-libraries/commit/7157ff6d252417afed41521b59f73f44b5433d66)) +- Extend `policy-compat` bidirectional `ManagerName` conversions to cover the new package managers ([#84](https://github.com/Devolutions/now-libraries/issues/84)) ([7157ff6d25](https://github.com/Devolutions/now-libraries/commit/7157ff6d252417afed41521b59f73f44b5433d66)) + +## [[0.1.0](https://github.com/Devolutions/now-libraries/releases)] - 2026-06-30 + +### Features + +- Initial release of the implementation-agnostic Devolutions NOW policy package broker API model diff --git a/policies/rust/now-policy-api/Cargo.toml b/policies/rust/now-policy-api/Cargo.toml index 60eae0b..f32d820 100644 --- a/policies/rust/now-policy-api/Cargo.toml +++ b/policies/rust/now-policy-api/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "now-policy-api" -version = "0.1.0" +version = "0.2.0" edition = "2024" license.workspace = true homepage.workspace = true @@ -21,7 +21,7 @@ policy-compat = ["dep:now-policy"] base64 = "0.22" chrono = { version = "0.4", features = ["serde"] } derive_more = { version = "2", features = ["as_ref", "deref", "display", "from"] } -now-policy = { version = "0.1", path = "../now-policy", optional = true } +now-policy = { version = "0.2", path = "../now-policy", optional = true } schemars = { version = "0.8", features = ["chrono"] } semver = "1" serde = { version = "1", features = ["derive"] } diff --git a/policies/rust/now-policy-server-template/CHANGELOG.md b/policies/rust/now-policy-server-template/CHANGELOG.md new file mode 100644 index 0000000..05b0c07 --- /dev/null +++ b/policies/rust/now-policy-server-template/CHANGELOG.md @@ -0,0 +1,19 @@ +# Changelog + +All notable changes to this project will be documented in this file. + +The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), +and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). + + +## [[0.2.0](https://github.com/Devolutions/now-libraries/compare/now-policy-server-template-v0.1.0...now-policy-server-template-v0.2.0)] - 2026-07-27 + +### Features + +- Advertise the new package managers (Apt, Bun, Cargo, Chocolatey, Dnf, Dotnet, Flatpak, Homebrew, Npm, Pacman, Pip, Scoop, Snap, Vcpkg) in the mock broker capabilities and sample documents ([#84](https://github.com/Devolutions/now-libraries/issues/84)) ([7157ff6d25](https://github.com/Devolutions/now-libraries/commit/7157ff6d252417afed41521b59f73f44b5433d66)) + +## [[0.1.0](https://github.com/Devolutions/now-libraries/releases)] - 2026-06-30 + +### Features + +- Initial release of the Devolutions NOW policy package broker server template and mock broker diff --git a/policies/rust/now-policy-server-template/Cargo.toml b/policies/rust/now-policy-server-template/Cargo.toml index c620169..58a67e4 100644 --- a/policies/rust/now-policy-server-template/Cargo.toml +++ b/policies/rust/now-policy-server-template/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "now-policy-server-template" -version = "0.1.0" +version = "0.2.0" edition = "2024" license.workspace = true homepage.workspace = true @@ -21,8 +21,8 @@ policy-compat = ["dep:now-policy", "now-policy-api/policy-compat"] aide = { version = "0.14", features = ["axum", "axum-json"] } async-trait = "0.1" axum = { version = "0.8", default-features = false, features = ["json"] } -now-policy-api = { version = "0.1", path = "../now-policy-api" } -now-policy = { version = "0.1", path = "../now-policy", optional = true } +now-policy-api = { version = "0.2", path = "../now-policy-api" } +now-policy = { version = "0.2", path = "../now-policy", optional = true } schemars = "0.8" serde = { version = "1", features = ["derive"] } serde_json = "1" diff --git a/policies/rust/now-policy/CHANGELOG.md b/policies/rust/now-policy/CHANGELOG.md new file mode 100644 index 0000000..4fe2ac0 --- /dev/null +++ b/policies/rust/now-policy/CHANGELOG.md @@ -0,0 +1,19 @@ +# Changelog + +All notable changes to this project will be documented in this file. + +The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), +and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). + + +## [[0.2.0](https://github.com/Devolutions/now-libraries/compare/now-policy-v0.1.0...now-policy-v0.2.0)] - 2026-07-27 + +### Features + +- [**breaking**] Add 14 new package manager variants to `ManagerName` (Apt, Bun, Cargo, Chocolatey, Dnf, Dotnet, Flatpak, Homebrew, Npm, Pacman, Pip, Scoop, Snap, Vcpkg) ([#84](https://github.com/Devolutions/now-libraries/issues/84)) ([7157ff6d25](https://github.com/Devolutions/now-libraries/commit/7157ff6d252417afed41521b59f73f44b5433d66)) + +## [[0.1.0](https://github.com/Devolutions/now-libraries/releases)] - 2026-06-23 + +### Features + +- Initial release of the Devolutions NOW policy model crate diff --git a/policies/rust/now-policy/Cargo.toml b/policies/rust/now-policy/Cargo.toml index 9aee784..aba5080 100644 --- a/policies/rust/now-policy/Cargo.toml +++ b/policies/rust/now-policy/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "now-policy" -version = "0.1.0" +version = "0.2.0" edition = "2024" license.workspace = true homepage.workspace = true From e080db62d551aadfdef35e0bc88bbb7e66822afc Mon Sep 17 00:00:00 2001 From: Vladyslav Nikonov Date: Tue, 28 Jul 2026 11:51:18 +0300 Subject: [PATCH 3/3] docs(release): fix now-proto-pdu 0.4.4 changelog entry Replace the misattributed package-broker feature description (from the squash-merged #76 PR body) with the actual crate-local change: a spelling fix in a code comment. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> --- protocols/rust/now-proto-pdu/CHANGELOG.md | 119 +--------------------- 1 file changed, 2 insertions(+), 117 deletions(-) diff --git a/protocols/rust/now-proto-pdu/CHANGELOG.md b/protocols/rust/now-proto-pdu/CHANGELOG.md index d81d284..141ec6e 100644 --- a/protocols/rust/now-proto-pdu/CHANGELOG.md +++ b/protocols/rust/now-proto-pdu/CHANGELOG.md @@ -8,124 +8,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [[0.4.4](https://github.com/Devolutions/now-libraries/compare/now-proto-pdu-v0.4.3...now-proto-pdu-v0.4.4)] - 2026-07-27 -### Features - -- Implement broker APIs and dotnet client ([#76](https://github.com/Devolutions/now-libraries/issues/76)) ([5d343c5f2e](https://github.com/Devolutions/now-libraries/commit/5d343c5f2e611511762812c61238dfec0699daf2)) - - ## Summary - - Adds the package broker API/client foundation to `now-proto` across Rust - and .NET. - - The main goal is to keep the broker protocol definition - implementation-agnostic and transport-independent while making Rust the - source of truth for schema/OpenAPI generation. .NET implementations and - clients can then validate against the generated contract and stay - synchronized with the Rust API model. - - ## Architecture - - ### Rust contract source of truth - - `policies/rust/now-policy-api` defines the canonical package broker wire - model: - - - request, response, status, health, capabilities, and error DTOs; - - package-manager enums and strongly validated newtypes; - - API version and default broker pipe name constants; - - fixed `RequestKind` / `ResponseKind` marker types that serialize as - constant strings and validate discriminator values on deserialization; - - OpenAPI output under - `policies/rust/now-policy-api/openapi/now-policy-api.yaml`. - - This crate intentionally contains no broker implementation. Its purpose - is to describe the protocol shape, generate OpenAPI, and provide a - stable Rust model for tests and server facades. - - ### Rust server facade and mock template - - `policies/rust/now-policy-server-template` provides the implementation - boundary around the API crate: - - - `PackageBrokerServer` trait as the server-side facade; - - Axum router/template that maps HTTP endpoints to the facade without - embedding policy/package-manager logic; - - fixture-backed mock broker for deterministic request/response testing; - - sample request, response, and scenario documents derived from the - Uniget broker shape; - - OpenAPI generation tool that writes the contract back into the API - crate. - - This keeps real broker behavior out of `now-proto` while still allowing - the API to be exercised end-to-end. - - ### Transport-independent message shape - - The protocol now treats request/response identity as part of the body - schema instead of HTTP metadata: - - - `RequestKind` and `RequestVersion` live at the top level of request - messages. - - `ResponseKind` and `ResponseVersion` live at the top level of response - messages. - - This keeps the schema usable if the broker later moves away from - HTTP-over-named-pipe to another transport. - - ### .NET API package - - `policies/dotnet/Devolutions.Now.Policy.Api` mirrors the Rust schema in - C#: - - - API constants, JSON serialization options, and policy-model - compatibility conversions are centralized here. - - Tests validate DTO behavior against the Rust-generated OpenAPI and - shared sample documents. - - This package contains only API types and no transport/client execution - logic. - - ### .NET client package - - `policies/dotnet/Devolutions.Now.Policy.Client` contains the actual - client behavior: - - - `BrokerClient` exposes high-level methods for health, capabilities, - evaluate, execute, and operation status. - - `BrokerClientOptions` is the single configuration entry point. - - Client context fields are filled implicitly where possible, including - effective user, client version, executable path, transport, timestamps, - and generated request IDs. - - Public request wrapper types avoid exposing raw wire DTO fields that - the client owns. - - `IBrokerTransport` abstracts transport so named pipes are only one - implementation detail. - - `NamedPipeBrokerTransport` handles the current HTTP-over-named-pipe - transport. - - Capabilities are fetched and cached before operation/status requests - so unsupported operations fail locally before sending the request. - - ### Test and fixture strategy - - Shared Rust sample documents are used as contract fixtures for both Rust - and .NET. The Rust server-template tests verify sample deserialization, - mock broker behavior, and router/facade wiring. The .NET tests validate - DTO schema compatibility, fixed discriminator handling, policy enum - compatibility, fake transport behavior, capability preflight, error - mapping, and client-generated request metadata. - - ## Changes - - - Added Rust `now-policy-api` and `now-policy-server-template` crates. - - Added generated package broker OpenAPI contract. - - Added shared request/response/scenario samples. - - Added .NET `Devolutions.Now.Policy.Api` and - `Devolutions.Now.Policy.Client` projects. - - Added .NET client/API tests using fake transport and Rust fixture - validation. - - Updated Cargo workspace, .NET solution, NuGet publishing workflow, and - package documentation. +### Documentation +- Fix spelling error in `NowMessage` decoding code comment ([#76](https://github.com/Devolutions/now-libraries/issues/76)) ([5d343c5f2e](https://github.com/Devolutions/now-libraries/commit/5d343c5f2e611511762812c61238dfec0699daf2)) ## [[0.4.3](https://github.com/Devolutions/now-proto/compare/now-proto-pdu-v0.4.2...now-proto-pdu-v0.4.3)] - 2026-05-15