From 32e4bee157e3a37643a6986d0731ddbc1c5e9172 Mon Sep 17 00:00:00 2001 From: Alex Mikhalev Date: Fri, 19 Nov 2021 21:30:28 -0800 Subject: [PATCH] use ros_message::Time --- Cargo.toml | 2 ++ src/chunk.rs | 3 +- src/index.rs | 6 ++-- src/layout.rs | 58 ++++++++++++++++++++++++++++++++++++++ src/lib.rs | 10 +++++-- src/parse.rs | 2 +- src/parse/header.rs | 8 +++--- src/parse/header/fields.rs | 31 ++++++++------------ 8 files changed, 90 insertions(+), 30 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 932d31b..3560805 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -21,6 +21,8 @@ regex = "1.5.4" ros_message = "0.1.0" smallvec = "1.6.1" thiserror = "1.0.28" +smol_str = { version = "0.1.17", default-features = false } +indexmap = "1.7.0" [dev-dependencies] color-eyre = "0.5.11" diff --git a/src/chunk.rs b/src/chunk.rs index dddd09b..e5c2172 100644 --- a/src/chunk.rs +++ b/src/chunk.rs @@ -4,9 +4,10 @@ use eyre::bail; use crate::{ error, - parse::{Header, Op, Time}, + parse::{Header, Op}, reader::BagReader, Error, Result, + Time }; #[derive(Clone, Copy, Debug)] diff --git a/src/index.rs b/src/index.rs index 5025d8d..1af4d88 100644 --- a/src/index.rs +++ b/src/index.rs @@ -6,9 +6,9 @@ use nom::{number::streaming::le_u32, sequence::tuple, Parser}; use crate::{ error, - parse::{self, Header, Op, Time}, + parse::{self, header::fields::parse_time, Header, Op}, reader::BagReader, - Result, + Result, Time, }; #[derive(Debug)] @@ -188,7 +188,7 @@ pub struct IndexEntry { impl IndexEntry { pub fn parse(input: parse::Input) -> parse::IResult { - tuple((Time::parse, le_u32)) + tuple((parse_time, le_u32)) .map(|(time, offset)| IndexEntry { time, offset }) .parse(input) } diff --git a/src/layout.rs b/src/layout.rs index e69de29..821898f 100644 --- a/src/layout.rs +++ b/src/layout.rs @@ -0,0 +1,58 @@ +use ros_message::I8Variant; + +use crate::SmallStr; + +#[derive(Clone, Debug)] +pub enum FieldType { + /// Represents `bool`. + Bool, + /// Represents `int8` or `byte`. + I8(I8Variant), + /// Represents `int16`. + I16, + /// Represents `int32`. + I32, + /// Represents `int64`. + I64, + /// Represents `uint8` or `char`. + U8(I8Variant), + /// Represents `uint16`. + U16, + /// Represents `uint32`. + U32, + /// Represents `uint64`. + U64, + /// Represents `float32`. + F32, + /// Represents `float64`. + F64, + /// Represents `string`. + String, + /// Represents `time`. + Time, + /// Represents `duration`. + Duration, + // Another messgage type. + Message(MessageLayoutRef), +} + +#[derive(Clone, Debug)] +pub struct FieldLayout { + pub typ: FieldType, + pub name: SmallStr, + pub multiplicity: Multiplicity, +} + +#[derive(Clone, Debug, PartialEq, Eq)] +pub enum Multiplicity { + Unit, + Fixed(usize), + Dynamic, +} + +#[derive(Clone, Debug)] +pub struct MessageLayout { + fields: Vec, +} + +pub type MessageLayoutRef = std::sync::Arc; diff --git a/src/lib.rs b/src/lib.rs index 1210678..602df12 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -2,10 +2,16 @@ pub mod bag; pub mod chunk; mod error; pub mod index; +pub mod info; +pub mod layout; pub mod message; pub mod parse; pub mod reader; -pub mod info; -pub use error::{Error, Result}; +pub use ros_message::Time; +use smol_str::SmolStr; + pub use bag::Bag; +pub use error::{Error, Result}; + +pub type SmallStr = SmolStr; diff --git a/src/parse.rs b/src/parse.rs index f4a4e6b..e935464 100644 --- a/src/parse.rs +++ b/src/parse.rs @@ -3,7 +3,7 @@ pub mod header; mod version; pub use error::{Error, ErrorKind}; -pub use header::{Header, Op, Time}; +pub use header::{Header, Op}; pub use version::Version; pub type Input<'a> = &'a [u8]; diff --git a/src/parse/header.rs b/src/parse/header.rs index 96b0eaa..76ad507 100644 --- a/src/parse/header.rs +++ b/src/parse/header.rs @@ -12,14 +12,14 @@ use nom::{ use smallvec::SmallVec; use super::{IResult, Input}; -use crate::Result; +use crate::{Result, Time}; mod error; -mod fields; +pub mod fields; pub use self::{ error::{FieldDataError, MissingFieldError}, - fields::{Op, Time}, + fields::Op, }; #[derive(Clone, Debug)] @@ -95,7 +95,7 @@ impl Header { } pub fn read_time(&self, field: &[u8]) -> Result