Change to MessagePack

This commit is contained in:
pjht 2024-06-09 18:28:28 -05:00
parent 9aaf248374
commit 7b17c0f9e3
Signed by: pjht
GPG Key ID: 7B5F6AFBEC7EE78E
3 changed files with 165 additions and 30 deletions

170
Cargo.lock generated
View File

@ -9,20 +9,38 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa"
[[package]] [[package]]
name = "cobs" name = "bitflags"
version = "0.2.3" version = "2.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index" 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]] [[package]]
name = "dev_driver_rpc" name = "dev_driver_rpc"
version = "0.1.0" version = "0.1.0"
dependencies = [ dependencies = [
"postcard", "parking_lot",
"rmp-serde",
"serde", "serde",
"spin",
] ]
[[package]]
name = "libc"
version = "0.2.155"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "97b3888a4aecf77e811145cadf6eef5901f4782c53886191b2f693f24761847c"
[[package]] [[package]]
name = "lock_api" name = "lock_api"
version = "0.4.8" version = "0.4.8"
@ -34,15 +52,43 @@ dependencies = [
] ]
[[package]] [[package]]
name = "postcard" name = "num-traits"
version = "1.0.2" version = "0.2.19"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1c2b180dc0bade59f03fd005cb967d3f1e5f69b13922dad0cd6e047cb8af2363" checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841"
dependencies = [ dependencies = [
"cobs", "autocfg",
"serde",
] ]
[[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]] [[package]]
name = "proc-macro2" name = "proc-macro2"
version = "1.0.85" version = "1.0.85"
@ -61,6 +107,37 @@ dependencies = [
"proc-macro2", "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]] [[package]]
name = "scopeguard" name = "scopeguard"
version = "1.1.0" version = "1.1.0"
@ -88,13 +165,10 @@ dependencies = [
] ]
[[package]] [[package]]
name = "spin" name = "smallvec"
version = "0.9.4" version = "1.13.2"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7f6002a767bff9e83f8eeecf883ecb8011875a21ae8da43bffb817a57e78cc09" checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67"
dependencies = [
"lock_api",
]
[[package]] [[package]]
name = "syn" name = "syn"
@ -112,3 +186,67 @@ name = "unicode-ident"
version = "1.0.3" version = "1.0.3"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c4f5b37a154999a8f3f98cc23a628d850e154479cd94decf3414696e12e31aaf" 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"

View File

@ -6,10 +6,9 @@ edition = "2021"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies] [dependencies]
postcard = { version = "1.0.2", default-features = false, features = ["alloc"] } parking_lot = "0.12.3"
serde = { version = "1.0.144", default-features = false, features = ["alloc", "derive"] } rmp-serde = "1.3.0"
spin = "0.9.4" serde = { version = "1.0.144", features = ["derive"] }
# std = { version = "0.1.0", path = "../std" }
[profile.dev] [profile.dev]
panic="abort" panic="abort"

View File

@ -1,19 +1,17 @@
// #![no_std]
#![allow(clippy::result_unit_err)] #![allow(clippy::result_unit_err)]
use std::{ use std::{
io, os::mikros::ipc::rpc::{self, IncomingCall}, path::Path,
os::mikros::ipc::rpc::{self, IncomingCall},
}; };
use spin::RwLock; use parking_lot::RwLock;
static SERVER: RwLock<Option<Box<dyn Server>>> = RwLock::new(None); static SERVER: RwLock<Option<Box<dyn Server>>> = RwLock::new(None);
const PROTO: u16 = 0; const PROTO: u16 = 0;
pub trait Server: Send + Sync { pub trait Server: Send + Sync {
fn open(&self, path: &str) -> Result<u64, io::Error>; fn open(&self, path: &Path) -> Result<u64, ()>;
} }
#[derive(Copy, Clone)] #[derive(Copy, Clone)]
@ -24,9 +22,9 @@ impl Client {
Self(pid) Self(pid)
} }
pub fn open(self, path: &str) -> Result<u64, ()> { pub fn open(self, path: &Path) -> Result<u64, ()> {
postcard::from_bytes( rmp_serde::from_slice(
&rpc::send_call(self.0, PROTO, 0, &postcard::to_allocvec(path).unwrap()).get_return(), &rpc::send_call(self.0, PROTO, 0, &rmp_serde::to_vec(path).unwrap()).get_return(),
) )
.unwrap() .unwrap()
} }
@ -46,8 +44,8 @@ fn callback(call: IncomingCall) {
let server_lock = SERVER.read(); let server_lock = SERVER.read();
let server = server_lock.as_ref().unwrap(); let server = server_lock.as_ref().unwrap();
if call.func == 0 { if call.func == 0 {
let path = postcard::from_bytes(&call.args).unwrap(); let path = rmp_serde::from_slice(&call.args).unwrap();
let ret = postcard::to_allocvec(&server.open(path).map_err(|e| ())).unwrap(); let ret = rmp_serde::to_vec(&server.open(path)).unwrap();
call.send_return(&ret); call.send_return(&ret);
} }
} }