From 0d7d403edc733e45ec087de81944ad4564ee87e3 Mon Sep 17 00:00:00 2001 From: mwojcik Date: Tue, 27 Jul 2021 09:38:38 +0200 Subject: [PATCH] merged proto_core_io with libio --- src/libio/proto.rs | 43 ++++----- src/runtime/Cargo.toml | 1 + src/runtime/src/main.rs | 1 - src/runtime/src/proto_core_io.rs | 158 ------------------------------- src/runtime/src/rpc.rs | 2 +- 5 files changed, 22 insertions(+), 183 deletions(-) delete mode 100644 src/runtime/src/proto_core_io.rs diff --git a/src/libio/proto.rs b/src/libio/proto.rs index 3df4a04a..c165606b 100644 --- a/src/libio/proto.rs +++ b/src/libio/proto.rs @@ -1,15 +1,14 @@ -#[cfg(feature = "alloc")] -use {core::str::Utf8Error, alloc::String}; -use byteorder::{ByteOrder, NetworkEndian}; +use core::str::Utf8Error; +use byteorder::{ByteOrder, NativeEndian}; +use alloc::vec; +use alloc::string::String; -use ::{Read, Write, Error as IoError}; +use core_io::{Read, Write, Error as IoError}; -#[cfg(feature = "alloc")] -#[derive(Fail, Debug, Clone, PartialEq)] +#[allow(dead_code)] +#[derive(Debug, Clone, PartialEq)] pub enum ReadStringError { - #[fail(display = "invalid UTF-8: {}", _0)] Utf8(Utf8Error), - #[fail(display = "{}", _0)] Other(T) } @@ -29,21 +28,21 @@ pub trait ProtoRead { fn read_u16(&mut self) -> Result { let mut bytes = [0; 2]; self.read_exact(&mut bytes)?; - Ok(NetworkEndian::read_u16(&bytes)) + Ok(NativeEndian::read_u16(&bytes)) } #[inline] fn read_u32(&mut self) -> Result { let mut bytes = [0; 4]; self.read_exact(&mut bytes)?; - Ok(NetworkEndian::read_u32(&bytes)) + Ok(NativeEndian::read_u32(&bytes)) } #[inline] fn read_u64(&mut self) -> Result { let mut bytes = [0; 8]; self.read_exact(&mut bytes)?; - Ok(NetworkEndian::read_u64(&bytes)) + Ok(NativeEndian::read_u64(&bytes)) } #[inline] @@ -51,18 +50,16 @@ pub trait ProtoRead { Ok(self.read_u8()? != 0) } - #[cfg(feature = "alloc")] #[inline] - fn read_bytes(&mut self) -> Result<::alloc::Vec, Self::ReadError> { + fn read_bytes(&mut self) -> Result<::alloc::vec::Vec, Self::ReadError> { let length = self.read_u32()?; let mut value = vec![0; length as usize]; self.read_exact(&mut value)?; Ok(value) } - #[cfg(feature = "alloc")] #[inline] - fn read_string(&mut self) -> Result<::alloc::String, ReadStringError> { + fn read_string(&mut self) -> Result<::alloc::string::String, ReadStringError> { let bytes = self.read_bytes().map_err(ReadStringError::Other)?; String::from_utf8(bytes).map_err(|err| ReadStringError::Utf8(err.utf8_error())) } @@ -88,42 +85,42 @@ pub trait ProtoWrite { #[inline] fn write_u16(&mut self, value: u16) -> Result<(), Self::WriteError> { let mut bytes = [0; 2]; - NetworkEndian::write_u16(&mut bytes, value); + NativeEndian::write_u16(&mut bytes, value); self.write_all(&bytes) } #[inline] fn write_i16(&mut self, value: i16) -> Result<(), Self::WriteError> { let mut bytes = [0; 2]; - NetworkEndian::write_i16(&mut bytes, value); + NativeEndian::write_i16(&mut bytes, value); self.write_all(&bytes) } #[inline] fn write_u32(&mut self, value: u32) -> Result<(), Self::WriteError> { let mut bytes = [0; 4]; - NetworkEndian::write_u32(&mut bytes, value); + NativeEndian::write_u32(&mut bytes, value); self.write_all(&bytes) } #[inline] fn write_i32(&mut self, value: i32) -> Result<(), Self::WriteError> { let mut bytes = [0; 4]; - NetworkEndian::write_i32(&mut bytes, value); + NativeEndian::write_i32(&mut bytes, value); self.write_all(&bytes) } #[inline] fn write_u64(&mut self, value: u64) -> Result<(), Self::WriteError> { let mut bytes = [0; 8]; - NetworkEndian::write_u64(&mut bytes, value); + NativeEndian::write_u64(&mut bytes, value); self.write_all(&bytes) } #[inline] fn write_i64(&mut self, value: i64) -> Result<(), Self::WriteError> { let mut bytes = [0; 8]; - NetworkEndian::write_i64(&mut bytes, value); + NativeEndian::write_i64(&mut bytes, value); self.write_all(&bytes) } @@ -145,7 +142,7 @@ pub trait ProtoWrite { } impl ProtoRead for T where T: Read + ?Sized { - type ReadError = IoError; + type ReadError = IoError; fn read_exact(&mut self, buf: &mut [u8]) -> Result<(), Self::ReadError> { T::read_exact(self, buf) @@ -153,7 +150,7 @@ impl ProtoRead for T where T: Read + ?Sized { } impl ProtoWrite for T where T: Write + ?Sized { - type WriteError = IoError; + type WriteError = IoError; fn write_all(&mut self, buf: &[u8]) -> Result<(), Self::WriteError> { T::write_all(self, buf) diff --git a/src/runtime/Cargo.toml b/src/runtime/Cargo.toml index 1b64b9f0..da14d915 100644 --- a/src/runtime/Cargo.toml +++ b/src/runtime/Cargo.toml @@ -40,4 +40,5 @@ dyld = { path = "../libdyld" } dwarf = { path = "../libdwarf" } unwind = { path = "../libunwind" } libc = { path = "../libc" } +io = { path = "../libio" } libboard_artiq = { path = "../libboard_artiq" } \ No newline at end of file diff --git a/src/runtime/src/main.rs b/src/runtime/src/main.rs index d51c5df2..98724ce4 100644 --- a/src/runtime/src/main.rs +++ b/src/runtime/src/main.rs @@ -26,7 +26,6 @@ use libcortex_a9::l2c::enable_l2_cache; #[cfg(feature = "target_kasli_soc")] use libboard_artiq::{si5324, logger}; -mod proto_core_io; mod proto_async; mod comms; mod rpc; diff --git a/src/runtime/src/proto_core_io.rs b/src/runtime/src/proto_core_io.rs deleted file mode 100644 index c165606b..00000000 --- a/src/runtime/src/proto_core_io.rs +++ /dev/null @@ -1,158 +0,0 @@ -use core::str::Utf8Error; -use byteorder::{ByteOrder, NativeEndian}; -use alloc::vec; -use alloc::string::String; - -use core_io::{Read, Write, Error as IoError}; - -#[allow(dead_code)] -#[derive(Debug, Clone, PartialEq)] -pub enum ReadStringError { - Utf8(Utf8Error), - Other(T) -} - -pub trait ProtoRead { - type ReadError; - - fn read_exact(&mut self, buf: &mut [u8]) -> Result<(), Self::ReadError>; - - #[inline] - fn read_u8(&mut self) -> Result { - let mut bytes = [0; 1]; - self.read_exact(&mut bytes)?; - Ok(bytes[0]) - } - - #[inline] - fn read_u16(&mut self) -> Result { - let mut bytes = [0; 2]; - self.read_exact(&mut bytes)?; - Ok(NativeEndian::read_u16(&bytes)) - } - - #[inline] - fn read_u32(&mut self) -> Result { - let mut bytes = [0; 4]; - self.read_exact(&mut bytes)?; - Ok(NativeEndian::read_u32(&bytes)) - } - - #[inline] - fn read_u64(&mut self) -> Result { - let mut bytes = [0; 8]; - self.read_exact(&mut bytes)?; - Ok(NativeEndian::read_u64(&bytes)) - } - - #[inline] - fn read_bool(&mut self) -> Result { - Ok(self.read_u8()? != 0) - } - - #[inline] - fn read_bytes(&mut self) -> Result<::alloc::vec::Vec, Self::ReadError> { - let length = self.read_u32()?; - let mut value = vec![0; length as usize]; - self.read_exact(&mut value)?; - Ok(value) - } - - #[inline] - fn read_string(&mut self) -> Result<::alloc::string::String, ReadStringError> { - let bytes = self.read_bytes().map_err(ReadStringError::Other)?; - String::from_utf8(bytes).map_err(|err| ReadStringError::Utf8(err.utf8_error())) - } -} - -pub trait ProtoWrite { - type WriteError; - - fn write_all(&mut self, buf: &[u8]) -> Result<(), Self::WriteError>; - - #[inline] - fn write_u8(&mut self, value: u8) -> Result<(), Self::WriteError> { - let bytes = [value; 1]; - self.write_all(&bytes) - } - - #[inline] - fn write_i8(&mut self, value: i8) -> Result<(), Self::WriteError> { - let bytes = [value as u8; 1]; - self.write_all(&bytes) - } - - #[inline] - fn write_u16(&mut self, value: u16) -> Result<(), Self::WriteError> { - let mut bytes = [0; 2]; - NativeEndian::write_u16(&mut bytes, value); - self.write_all(&bytes) - } - - #[inline] - fn write_i16(&mut self, value: i16) -> Result<(), Self::WriteError> { - let mut bytes = [0; 2]; - NativeEndian::write_i16(&mut bytes, value); - self.write_all(&bytes) - } - - #[inline] - fn write_u32(&mut self, value: u32) -> Result<(), Self::WriteError> { - let mut bytes = [0; 4]; - NativeEndian::write_u32(&mut bytes, value); - self.write_all(&bytes) - } - - #[inline] - fn write_i32(&mut self, value: i32) -> Result<(), Self::WriteError> { - let mut bytes = [0; 4]; - NativeEndian::write_i32(&mut bytes, value); - self.write_all(&bytes) - } - - #[inline] - fn write_u64(&mut self, value: u64) -> Result<(), Self::WriteError> { - let mut bytes = [0; 8]; - NativeEndian::write_u64(&mut bytes, value); - self.write_all(&bytes) - } - - #[inline] - fn write_i64(&mut self, value: i64) -> Result<(), Self::WriteError> { - let mut bytes = [0; 8]; - NativeEndian::write_i64(&mut bytes, value); - self.write_all(&bytes) - } - - #[inline] - fn write_bool(&mut self, value: bool) -> Result<(), Self::WriteError> { - self.write_u8(value as u8) - } - - #[inline] - fn write_bytes(&mut self, value: &[u8]) -> Result<(), Self::WriteError> { - self.write_u32(value.len() as u32)?; - self.write_all(value) - } - - #[inline] - fn write_string(&mut self, value: &str) -> Result<(), Self::WriteError> { - self.write_bytes(value.as_bytes()) - } -} - -impl ProtoRead for T where T: Read + ?Sized { - type ReadError = IoError; - - fn read_exact(&mut self, buf: &mut [u8]) -> Result<(), Self::ReadError> { - T::read_exact(self, buf) - } -} - -impl ProtoWrite for T where T: Write + ?Sized { - type WriteError = IoError; - - fn write_all(&mut self, buf: &[u8]) -> Result<(), Self::WriteError> { - T::write_all(self, buf) - } -} diff --git a/src/runtime/src/rpc.rs b/src/runtime/src/rpc.rs index bb17f507..ef4e659f 100644 --- a/src/runtime/src/rpc.rs +++ b/src/runtime/src/rpc.rs @@ -10,7 +10,7 @@ use libasync::smoltcp::TcpStream; use alloc::boxed::Box; use async_recursion::async_recursion; -use crate::proto_core_io::ProtoWrite; +use io::proto::ProtoWrite; use crate::proto_async; use self::tag::{Tag, TagIterator, split_tag};