From 7b17c0f9e3a606e08be394de19cfc6948389a495 Mon Sep 17 00:00:00 2001 From: pjht Date: Sun, 9 Jun 2024 18:28:28 -0500 Subject: [PATCH] Change to MessagePack --- Cargo.lock | 170 ++++++++++++++++++++++++++++++++++++++++++++++++----- Cargo.toml | 7 +-- src/lib.rs | 18 +++--- 3 files changed, 165 insertions(+), 30 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 4ec9784..27a998f 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -9,20 +9,38 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" [[package]] -name = "cobs" -version = "0.2.3" +name = "bitflags" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67ba02a97a2bd10f4b59b25c7973101c79642302776489e030cd13cdab09ed15" +checksum = "cf4b9d6a944f767f8e5e0db018570623c85f3d925ac718db4e06d0187adb21c1" + +[[package]] +name = "byteorder" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" + +[[package]] +name = "cfg-if" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" [[package]] name = "dev_driver_rpc" version = "0.1.0" dependencies = [ - "postcard", + "parking_lot", + "rmp-serde", "serde", - "spin", ] +[[package]] +name = "libc" +version = "0.2.155" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97b3888a4aecf77e811145cadf6eef5901f4782c53886191b2f693f24761847c" + [[package]] name = "lock_api" version = "0.4.8" @@ -34,15 +52,43 @@ dependencies = [ ] [[package]] -name = "postcard" -version = "1.0.2" +name = "num-traits" +version = "0.2.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1c2b180dc0bade59f03fd005cb967d3f1e5f69b13922dad0cd6e047cb8af2363" +checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" dependencies = [ - "cobs", - "serde", + "autocfg", ] +[[package]] +name = "parking_lot" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f1bf18183cf54e8d6059647fc3063646a1801cf30896933ec2311622cc4b9a27" +dependencies = [ + "lock_api", + "parking_lot_core", +] + +[[package]] +name = "parking_lot_core" +version = "0.9.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e401f977ab385c9e4e3ab30627d6f26d00e2c73eef317493c4ec6d468726cf8" +dependencies = [ + "cfg-if", + "libc", + "redox_syscall", + "smallvec", + "windows-targets", +] + +[[package]] +name = "paste" +version = "1.0.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a" + [[package]] name = "proc-macro2" version = "1.0.85" @@ -61,6 +107,37 @@ dependencies = [ "proc-macro2", ] +[[package]] +name = "redox_syscall" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "469052894dcb553421e483e4209ee581a45100d31b4018de03e5a7ad86374a7e" +dependencies = [ + "bitflags", +] + +[[package]] +name = "rmp" +version = "0.8.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "228ed7c16fa39782c3b3468e974aec2795e9089153cd08ee2e9aefb3613334c4" +dependencies = [ + "byteorder", + "num-traits", + "paste", +] + +[[package]] +name = "rmp-serde" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "52e599a477cf9840e92f2cde9a7189e67b42c57532749bf90aea6ec10facd4db" +dependencies = [ + "byteorder", + "rmp", + "serde", +] + [[package]] name = "scopeguard" version = "1.1.0" @@ -88,13 +165,10 @@ dependencies = [ ] [[package]] -name = "spin" -version = "0.9.4" +name = "smallvec" +version = "1.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f6002a767bff9e83f8eeecf883ecb8011875a21ae8da43bffb817a57e78cc09" -dependencies = [ - "lock_api", -] +checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" [[package]] name = "syn" @@ -112,3 +186,67 @@ name = "unicode-ident" version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c4f5b37a154999a8f3f98cc23a628d850e154479cd94decf3414696e12e31aaf" + +[[package]] +name = "windows-targets" +version = "0.52.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6f0713a46559409d202e70e28227288446bf7841d3211583a4b53e3f6d96e7eb" +dependencies = [ + "windows_aarch64_gnullvm", + "windows_aarch64_msvc", + "windows_i686_gnu", + "windows_i686_gnullvm", + "windows_i686_msvc", + "windows_x86_64_gnu", + "windows_x86_64_gnullvm", + "windows_x86_64_msvc", +] + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.52.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7088eed71e8b8dda258ecc8bac5fb1153c5cffaf2578fc8ff5d61e23578d3263" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.52.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9985fd1504e250c615ca5f281c3f7a6da76213ebd5ccc9561496568a2752afb6" + +[[package]] +name = "windows_i686_gnu" +version = "0.52.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "88ba073cf16d5372720ec942a8ccbf61626074c6d4dd2e745299726ce8b89670" + +[[package]] +name = "windows_i686_gnullvm" +version = "0.52.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87f4261229030a858f36b459e748ae97545d6f1ec60e5e0d6a3d32e0dc232ee9" + +[[package]] +name = "windows_i686_msvc" +version = "0.52.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db3c2bf3d13d5b658be73463284eaf12830ac9a26a90c717b7f771dfe97487bf" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.52.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4e4246f76bdeff09eb48875a0fd3e2af6aada79d409d33011886d3e1581517d9" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.52.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "852298e482cd67c356ddd9570386e2862b5673c85bd5f88df9ab6802b334c596" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.52.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bec47e5bfd1bff0eeaf6d8b485cc1074891a197ab4225d504cb7a1ab88b02bf0" diff --git a/Cargo.toml b/Cargo.toml index 3809545..7b0dea1 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -6,10 +6,9 @@ edition = "2021" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies] -postcard = { version = "1.0.2", default-features = false, features = ["alloc"] } -serde = { version = "1.0.144", default-features = false, features = ["alloc", "derive"] } -spin = "0.9.4" -# std = { version = "0.1.0", path = "../std" } +parking_lot = "0.12.3" +rmp-serde = "1.3.0" +serde = { version = "1.0.144", features = ["derive"] } [profile.dev] panic="abort" diff --git a/src/lib.rs b/src/lib.rs index a91dd8e..7d569c3 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -1,19 +1,17 @@ -// #![no_std] #![allow(clippy::result_unit_err)] use std::{ - io, - os::mikros::ipc::rpc::{self, IncomingCall}, + os::mikros::ipc::rpc::{self, IncomingCall}, path::Path, }; -use spin::RwLock; +use parking_lot::RwLock; static SERVER: RwLock>> = RwLock::new(None); const PROTO: u16 = 0; pub trait Server: Send + Sync { - fn open(&self, path: &str) -> Result; + fn open(&self, path: &Path) -> Result; } #[derive(Copy, Clone)] @@ -24,9 +22,9 @@ impl Client { Self(pid) } - pub fn open(self, path: &str) -> Result { - postcard::from_bytes( - &rpc::send_call(self.0, PROTO, 0, &postcard::to_allocvec(path).unwrap()).get_return(), + pub fn open(self, path: &Path) -> Result { + rmp_serde::from_slice( + &rpc::send_call(self.0, PROTO, 0, &rmp_serde::to_vec(path).unwrap()).get_return(), ) .unwrap() } @@ -46,8 +44,8 @@ fn callback(call: IncomingCall) { let server_lock = SERVER.read(); let server = server_lock.as_ref().unwrap(); if call.func == 0 { - let path = postcard::from_bytes(&call.args).unwrap(); - let ret = postcard::to_allocvec(&server.open(path).map_err(|e| ())).unwrap(); + let path = rmp_serde::from_slice(&call.args).unwrap(); + let ret = rmp_serde::to_vec(&server.open(path)).unwrap(); call.send_return(&ret); } }