Parse the timestamp correctly
The timestamp comes from OpenBSD's struct timeval, which defines the number of seconds as a time_t (i64) and the number of micro-seconds as a suseconds_t (long, hence i64 too). They are separated by a dot. https://man.openbsd.org/gettimeofday.2
This commit is contained in:
parent
2b87c9c3c3
commit
98dd194dca
1 changed files with 20 additions and 16 deletions
36
src/entry.rs
36
src/entry.rs
|
@ -33,11 +33,23 @@ pub enum Event {
|
|||
FilterResponse,
|
||||
}
|
||||
|
||||
#[derive(Debug)]
|
||||
pub struct TimeVal {
|
||||
pub sec: i64,
|
||||
pub usec: i64,
|
||||
}
|
||||
|
||||
impl TimeVal {
|
||||
pub fn to_string(&self) -> String {
|
||||
format!("{}.{}", self.sec, self.usec)
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Debug)]
|
||||
pub struct Entry {
|
||||
pub kind: Kind,
|
||||
pub version: u8,
|
||||
pub timestamp: u64,
|
||||
pub timestamp: TimeVal,
|
||||
pub subsystem: Subsystem,
|
||||
pub event: Event,
|
||||
pub token: Option<u64>,
|
||||
|
@ -57,11 +69,7 @@ fn to_u8(s: &str) -> Result<u8, std::num::ParseIntError> {
|
|||
s.parse()
|
||||
}
|
||||
|
||||
fn to_i32(s: &str) -> Result<i32, std::num::ParseIntError> {
|
||||
s.parse()
|
||||
}
|
||||
|
||||
fn to_u64(s: &str) -> Result<u64, std::num::ParseIntError> {
|
||||
fn to_i64(s: &str) -> Result<i64, std::num::ParseIntError> {
|
||||
s.parse()
|
||||
}
|
||||
|
||||
|
@ -103,12 +111,12 @@ named!(parse_event<&str, Event>,
|
|||
)
|
||||
);
|
||||
|
||||
named!(parse_timestamp<&str, u64>,
|
||||
named!(parse_timestamp<&str, TimeVal>,
|
||||
do_parse!(
|
||||
sec: parse_u64 >>
|
||||
sec: parse_i64 >>
|
||||
tag!(".") >>
|
||||
nsec: parse_i32 >>
|
||||
(sec)
|
||||
usec: parse_i64 >>
|
||||
(TimeVal { sec, usec})
|
||||
)
|
||||
);
|
||||
|
||||
|
@ -116,12 +124,8 @@ named!(parse_version<&str, u8>,
|
|||
map_res!(take_while!(is_ascii_digit), to_u8)
|
||||
);
|
||||
|
||||
named!(parse_i32<&str, i32>,
|
||||
map_res!(take_while!(is_ascii_digit), to_i32)
|
||||
);
|
||||
|
||||
named!(parse_u64<&str, u64>,
|
||||
map_res!(take_while!(is_ascii_digit), to_u64)
|
||||
named!(parse_i64<&str, i64>,
|
||||
map_res!(take_while!(is_ascii_digit), to_i64)
|
||||
);
|
||||
|
||||
named!(parse_u64_hex<&str, u64>,
|
||||
|
|
Reference in a new issue