From 3968c3a4cda41c7f2f07479389e5405f0162679e Mon Sep 17 00:00:00 2001 From: Mark Poliakov Date: Mon, 9 Dec 2024 10:21:15 +0200 Subject: [PATCH] ipc: flexbuffers -> postcard --- userspace/Cargo.lock | 212 ++++++++++++----------------- userspace/Cargo.toml | 2 +- userspace/colors/Cargo.toml | 1 - userspace/lib/serde-ipc/Cargo.toml | 2 +- userspace/lib/serde-ipc/src/lib.rs | 18 ++- 5 files changed, 100 insertions(+), 135 deletions(-) diff --git a/userspace/Cargo.lock b/userspace/Cargo.lock index a6713fca..6f260fae 100644 --- a/userspace/Cargo.lock +++ b/userspace/Cargo.lock @@ -8,7 +8,7 @@ version = "0.1.0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.86", + "syn", "thiserror", ] @@ -91,6 +91,15 @@ version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7c02d123df017efcdfbd739ef81735b36c5ba83ec3c59c80a9d7ecc718f92e50" +[[package]] +name = "atomic-polyfill" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8cf2bce30dfe09ef0bfaef228b9d414faaf7e563035494d7fe092dba54b300f4" +dependencies = [ + "critical-section", +] + [[package]] name = "autocfg" version = "1.4.0" @@ -103,12 +112,6 @@ version = "1.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8c3c1a368f70d6cf7302d78f8f7093da241fb8e8807c05cc9e51a125895a6d5b" -[[package]] -name = "bitflags" -version = "1.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" - [[package]] name = "bitflags" version = "2.6.0" @@ -141,7 +144,7 @@ checksum = "bcfcc3cd946cb52f0bbfdbbcfa2f4e24f75ebb6c0e1002f7c25904fada18b9ec" dependencies = [ "proc-macro2", "quote", - "syn 2.0.86", + "syn", ] [[package]] @@ -228,7 +231,7 @@ dependencies = [ "heck", "proc-macro2", "quote", - "syn 2.0.86", + "syn", ] [[package]] @@ -237,6 +240,12 @@ version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1462739cb27611015575c0c11df5df7601141071f07518d56fcc1be504cbec97" +[[package]] +name = "cobs" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67ba02a97a2bd10f4b59b25c7973101c79642302776489e030cd13cdab09ed15" + [[package]] name = "colorchoice" version = "1.0.3" @@ -247,7 +256,6 @@ checksum = "5b63caa9aa9397e2d9480a9b13673856c78d8ac123288526c37d7839f2a86990" name = "colors" version = "0.1.0" dependencies = [ - "flexbuffers", "lazy_static", "libcolors", "serde", @@ -271,6 +279,12 @@ dependencies = [ "libc", ] +[[package]] +name = "critical-section" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "790eea4361631c5e7d22598ecd5723ff611904e3344ce8720784c93e3d83d40b" + [[package]] name = "cross" version = "0.1.0" @@ -284,7 +298,7 @@ version = "0.27.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f476fe445d41c9e991fd07515a6f463074b782242ccf4a5b7b1d1012e70824df" dependencies = [ - "bitflags 2.6.0", + "bitflags", "crossterm_winapi", "libc", "mio", @@ -346,7 +360,7 @@ source = "git+https://git.alnyan.me/yggdrasil/curve25519-dalek.git?branch=alnyan dependencies = [ "proc-macro2", "quote", - "syn 2.0.86", + "syn", ] [[package]] @@ -422,6 +436,18 @@ version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4445909572dbd556c457c849c4ca58623d84b27c8fff1e74b0b4227d8b90d17b" +[[package]] +name = "embedded-io" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef1a6892d9eef45c8fa6b9e0086428a2cca8491aca8f787c534a3d6d0bcb3ced" + +[[package]] +name = "embedded-io" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "edd0f118536f44f5ccd48bcb8b111bdc3de888b58c74639dfb034a357d0f206d" + [[package]] name = "env_filter" version = "0.1.2" @@ -445,12 +471,6 @@ dependencies = [ "log", ] -[[package]] -name = "equivalent" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" - [[package]] name = "errno" version = "0.3.9" @@ -491,19 +511,6 @@ version = "0.2.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "28dea519a9695b9977216879a3ebfddf92f1c08c05d984f8996aecd6ecdc811d" -[[package]] -name = "flexbuffers" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "15d14128f06405808ce75bfebe11e9b0f9da18719ede6d7bdb1702d6bfe0f7e8" -dependencies = [ - "bitflags 1.3.2", - "byteorder", - "num_enum", - "serde", - "serde_derive", -] - [[package]] name = "fnv" version = "1.0.7" @@ -533,7 +540,7 @@ checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" dependencies = [ "proc-macro2", "quote", - "syn 2.0.86", + "syn", ] [[package]] @@ -588,10 +595,27 @@ dependencies = [ ] [[package]] -name = "hashbrown" -version = "0.15.0" +name = "hash32" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e087f84d4f86bf4b218b927129862374b72199ae7d8657835f1e89000eea4fb" +checksum = "b0c35f58762feb77d74ebe43bdbc3210f09be9fe6742234d573bacc26ed92b67" +dependencies = [ + "byteorder", +] + +[[package]] +name = "heapless" +version = "0.7.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cdc6457c0eb62c71aac4bc17216026d8410337c4126773b9c5daba343f17964f" +dependencies = [ + "atomic-polyfill", + "hash32", + "rustc_version", + "serde", + "spin", + "stable_deref_trait", +] [[package]] name = "heck" @@ -655,16 +679,6 @@ dependencies = [ "unicode-normalization", ] -[[package]] -name = "indexmap" -version = "2.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "707907fe3c25f5424cce2cb7e1cbcafee6bdbe735ca90ef77c29e84591e5b9da" -dependencies = [ - "equivalent", - "hashbrown", -] - [[package]] name = "init" version = "0.1.0" @@ -877,27 +891,6 @@ dependencies = [ "libm", ] -[[package]] -name = "num_enum" -version = "0.5.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f646caf906c20226733ed5b1374287eb97e3c2a5c227ce668c1f2ce20ae57c9" -dependencies = [ - "num_enum_derive", -] - -[[package]] -name = "num_enum_derive" -version = "0.5.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dcbff9bc912032c62bf65ef1d5aea88983b420f4f839db1e9b0c281a25c9c799" -dependencies = [ - "proc-macro-crate", - "proc-macro2", - "quote", - "syn 1.0.109", -] - [[package]] name = "num_threads" version = "0.1.7" @@ -984,6 +977,19 @@ dependencies = [ "spki", ] +[[package]] +name = "postcard" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "170a2601f67cc9dba8edd8c4870b15f71a6a2dc196daec8c83f72b59dff628a8" +dependencies = [ + "cobs", + "embedded-io 0.4.0", + "embedded-io 0.6.1", + "heapless", + "serde", +] + [[package]] name = "powerfmt" version = "0.2.0" @@ -1006,17 +1012,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "64d1ec885c64d0457d564db4ec299b2dae3f9c02808b8ad9c3a089c591b18033" dependencies = [ "proc-macro2", - "syn 2.0.86", -] - -[[package]] -name = "proc-macro-crate" -version = "1.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f4c021e1093a56626774e81216a4ce732a735e5bad4868a03f3ed65ca0c3919" -dependencies = [ - "once_cell", - "toml_edit", + "syn", ] [[package]] @@ -1154,7 +1150,7 @@ version = "0.5.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9b6dfecf2c74bce2466cabf93f6664d6998a69eb21e39f4207930065b27b771f" dependencies = [ - "bitflags 2.6.0", + "bitflags", ] [[package]] @@ -1244,7 +1240,7 @@ version = "0.38.38" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "aa260229e6538e52293eeb577aabd09945a09d6d9cc0fc550ed7529056c2e32a" dependencies = [ - "bitflags 2.6.0", + "bitflags", "errno", "libc", "linux-raw-sys", @@ -1282,7 +1278,7 @@ dependencies = [ name = "serde-ipc" version = "0.1.0" dependencies = [ - "flexbuffers", + "postcard", "serde", "tempfile", "thiserror", @@ -1296,7 +1292,7 @@ checksum = "de523f781f095e28fa605cdce0f8307e451cc0fd14e2eb4cd2e98a355b147766" dependencies = [ "proc-macro2", "quote", - "syn 2.0.86", + "syn", ] [[package]] @@ -1408,6 +1404,9 @@ name = "spin" version = "0.9.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" +dependencies = [ + "lock_api", +] [[package]] name = "spki" @@ -1425,6 +1424,12 @@ version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "02a8428da277a8e3a15271d79943e80ccc2ef254e78813a166a08d65e4c3ece5" +[[package]] +name = "stable_deref_trait" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" + [[package]] name = "subtle" version = "2.6.1" @@ -1437,17 +1442,6 @@ version = "0.7.16" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9ac8fb7895b4afa060ad731a32860db8755da3449a47e796d5ecf758db2671d4" -[[package]] -name = "syn" -version = "1.0.109" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" -dependencies = [ - "proc-macro2", - "quote", - "unicode-ident", -] - [[package]] name = "syn" version = "2.0.86" @@ -1530,7 +1524,7 @@ checksum = "b08be0f17bd307950653ce45db00cd31200d82b624b36e181337d9c7d92765b5" dependencies = [ "proc-macro2", "quote", - "syn 2.0.86", + "syn", ] [[package]] @@ -1581,23 +1575,6 @@ version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" -[[package]] -name = "toml_datetime" -version = "0.6.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0dd7358ecb8fc2f8d014bf86f6f638ce72ba252a2c3a2572f2a795f1d23efb41" - -[[package]] -name = "toml_edit" -version = "0.19.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421" -dependencies = [ - "indexmap", - "toml_datetime", - "winnow", -] - [[package]] name = "typed-arena" version = "2.0.2" @@ -1836,15 +1813,6 @@ version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" -[[package]] -name = "winnow" -version = "0.5.40" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f593a95398737aeed53e489c785df13f3618e41dbcd6718c6addbf1395aa6876" -dependencies = [ - "memchr", -] - [[package]] name = "x25519-dalek" version = "2.0.1" @@ -1914,7 +1882,7 @@ checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e" dependencies = [ "proc-macro2", "quote", - "syn 2.0.86", + "syn", ] [[package]] @@ -1925,7 +1893,7 @@ checksum = "3cd137b4cc21bde6ecce3bbbb3350130872cda0be2c6888874279ea76e17d4c1" dependencies = [ "proc-macro2", "quote", - "syn 2.0.86", + "syn", ] [[package]] @@ -1945,5 +1913,5 @@ checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" dependencies = [ "proc-macro2", "quote", - "syn 2.0.86", + "syn", ] diff --git a/userspace/Cargo.toml b/userspace/Cargo.toml index a5df70e1..c05f18db 100644 --- a/userspace/Cargo.toml +++ b/userspace/Cargo.toml @@ -28,9 +28,9 @@ serde_json = "1.0.132" serde = { version = "1.0.214", features = ["derive"] } bytemuck = "1.19.0" thiserror = "1.0.64" -flexbuffers = "2.0.0" sha2 = { version = "0.10.8" } chrono = { version = "0.4.31", default-features = false } +postcard = { version = "1.1.1", features = ["alloc"] } # Vendored/patched dependencies rand = { git = "https://git.alnyan.me/yggdrasil/rand.git", branch = "alnyan/yggdrasil" } diff --git a/userspace/colors/Cargo.toml b/userspace/colors/Cargo.toml index 066478ac..b2ec65ba 100644 --- a/userspace/colors/Cargo.toml +++ b/userspace/colors/Cargo.toml @@ -8,7 +8,6 @@ authors = ["Mark Poliakov "] yggdrasil-abi.workspace = true serde-ipc.workspace = true serde.workspace = true -flexbuffers.workspace = true thiserror.workspace = true libcolors = { workspace = true, default-features = false } diff --git a/userspace/lib/serde-ipc/Cargo.toml b/userspace/lib/serde-ipc/Cargo.toml index 5c9ba247..416970ae 100644 --- a/userspace/lib/serde-ipc/Cargo.toml +++ b/userspace/lib/serde-ipc/Cargo.toml @@ -5,7 +5,7 @@ edition = "2021" authors = ["Mark Poliakov "] [dependencies] -flexbuffers.workspace = true +postcard.workspace = true serde.workspace = true thiserror.workspace = true diff --git a/userspace/lib/serde-ipc/src/lib.rs b/userspace/lib/serde-ipc/src/lib.rs index bd5c38cc..71164522 100644 --- a/userspace/lib/serde-ipc/src/lib.rs +++ b/userspace/lib/serde-ipc/src/lib.rs @@ -18,12 +18,10 @@ use crate::sys::IpcSender; #[derive(thiserror::Error, Debug)] pub enum Error { - #[error("Serialization error: {0}")] - SerializeError(flexbuffers::SerializationError), - #[error("Deserialization error: {0}")] - DeserializeError(flexbuffers::DeserializationError), + #[error("Ser/des error: {0}")] + Serialize(postcard::Error), #[error("I/O error: {0}")] - IoError(#[from] io::Error), + Io(#[from] io::Error), } pub struct Sender { @@ -90,10 +88,10 @@ pub fn connect>( impl Sender { pub fn send_to(&self, message: &T, peer: &PeerAddr) -> Result<(), Error> { - let message = flexbuffers::to_vec(message).map_err(Error::SerializeError)?; + let message = postcard::to_allocvec(message).map_err(Error::Serialize)?; self.inner .send_message_to(&message, peer) - .map_err(Error::IoError) + .map_err(Error::Io) } #[inline] @@ -102,7 +100,7 @@ impl Sender { } pub fn send_file_to(&self, file: &F, peer: &PeerAddr) -> Result<(), Error> { - self.inner.send_file_to(file, peer).map_err(Error::IoError) + self.inner.send_file_to(file, peer).map_err(Error::Io) } } @@ -116,8 +114,8 @@ impl Receiver { pub fn receive(&mut self) -> Result<(PeerAddr, Either), Error> { let (peer, message) = self.inner.receive(&mut self.buffer)?; let message = message - .try_map_left(|len| flexbuffers::from_slice(&self.buffer[..len])) - .map_err(Error::DeserializeError)?; + .try_map_left(|len| postcard::from_bytes(&self.buffer[..len])) + .map_err(Error::Serialize)?; Ok((peer, message)) }