Add helpers
This commit is contained in:
147
src/netpod.rs
147
src/netpod.rs
@@ -12,40 +12,55 @@ pub mod log_macros {
|
||||
#[allow(unused)]
|
||||
#[macro_export]
|
||||
macro_rules! trace {
|
||||
($($arg:tt)*) => {
|
||||
eprintln!($($arg)*);
|
||||
($fmt:expr) => {
|
||||
eprintln!(concat!("TRACE ", $fmt));
|
||||
};
|
||||
($fmt:expr, $($arg:tt)*) => {
|
||||
eprintln!(concat!("TRACE ", $fmt), $($arg)*);
|
||||
};
|
||||
}
|
||||
|
||||
#[allow(unused)]
|
||||
#[macro_export]
|
||||
macro_rules! debug {
|
||||
($($arg:tt)*) => {
|
||||
eprintln!($($arg)*);
|
||||
($fmt:expr) => {
|
||||
eprintln!(concat!("DEBUG ", $fmt));
|
||||
};
|
||||
($fmt:expr, $($arg:tt)*) => {
|
||||
eprintln!(concat!("DEBUG ", $fmt), $($arg)*);
|
||||
};
|
||||
}
|
||||
|
||||
#[allow(unused)]
|
||||
#[macro_export]
|
||||
macro_rules! info {
|
||||
($($arg:tt)*) => {
|
||||
eprintln!($($arg)*);
|
||||
($fmt:expr) => {
|
||||
eprintln!(concat!("INFO ", $fmt));
|
||||
};
|
||||
($fmt:expr, $($arg:tt)*) => {
|
||||
eprintln!(concat!("INFO ", $fmt), $($arg)*);
|
||||
};
|
||||
}
|
||||
|
||||
#[allow(unused)]
|
||||
#[macro_export]
|
||||
macro_rules! warn {
|
||||
($($arg:tt)*) => {
|
||||
eprintln!($($arg)*);
|
||||
($fmt:expr) => {
|
||||
eprintln!(concat!("WARN ", $fmt));
|
||||
};
|
||||
($fmt:expr, $($arg:tt)*) => {
|
||||
eprintln!(concat!("WARN ", $fmt), $($arg)*);
|
||||
};
|
||||
}
|
||||
|
||||
#[allow(unused)]
|
||||
#[macro_export]
|
||||
macro_rules! error {
|
||||
($($arg:tt)*) => {
|
||||
eprintln!($($arg)*);
|
||||
($fmt:expr) => {
|
||||
eprintln!(concat!("ERROR ", $fmt));
|
||||
};
|
||||
($fmt:expr, $($arg:tt)*) => {
|
||||
eprintln!(concat!("ERROR ", $fmt), $($arg)*);
|
||||
};
|
||||
}
|
||||
}
|
||||
@@ -2006,6 +2021,18 @@ impl fmt::Display for TsNano {
|
||||
}
|
||||
}
|
||||
|
||||
impl AsRef<TsNano> for TsNano {
|
||||
fn as_ref(&self) -> &TsNano {
|
||||
&self
|
||||
}
|
||||
}
|
||||
|
||||
impl AsRef<TsMs> for TsMs {
|
||||
fn as_ref(&self) -> &TsMs {
|
||||
&self
|
||||
}
|
||||
}
|
||||
|
||||
pub struct TsNanoFmt {
|
||||
ts: TsNano,
|
||||
}
|
||||
@@ -2025,6 +2052,59 @@ impl fmt::Debug for TsNanoFmt {
|
||||
}
|
||||
}
|
||||
|
||||
pub struct TsMsFmt {
|
||||
ts: TsMs,
|
||||
}
|
||||
|
||||
impl fmt::Display for TsMsFmt {
|
||||
fn fmt(&self, fmt: &mut fmt::Formatter) -> fmt::Result {
|
||||
chrono::DateTime::from_timestamp_millis(self.ts.ms() as i64)
|
||||
.unwrap()
|
||||
.format(DATETIME_FMT_3MS)
|
||||
.fmt(fmt)
|
||||
}
|
||||
}
|
||||
|
||||
impl fmt::Debug for TsMsFmt {
|
||||
fn fmt(&self, fmt: &mut fmt::Formatter) -> fmt::Result {
|
||||
fmt::Display::fmt(self, fmt)
|
||||
}
|
||||
}
|
||||
|
||||
pub struct TsNanoVecFmt<I>(pub I);
|
||||
|
||||
impl<I, T> fmt::Display for TsNanoVecFmt<I>
|
||||
where
|
||||
I: Clone + IntoIterator<Item = T>,
|
||||
T: AsRef<TsNano>,
|
||||
{
|
||||
fn fmt(&self, fmt: &mut fmt::Formatter) -> fmt::Result {
|
||||
write!(fmt, "[")?;
|
||||
for ts in self.0.clone().into_iter() {
|
||||
write!(fmt, " {}", ts.as_ref().fmt())?;
|
||||
}
|
||||
write!(fmt, " ]")?;
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
|
||||
pub struct TsMsVecFmt<I>(pub I);
|
||||
|
||||
impl<I, T> fmt::Display for TsMsVecFmt<I>
|
||||
where
|
||||
I: Clone + IntoIterator<Item = T>,
|
||||
T: AsRef<TsMs>,
|
||||
{
|
||||
fn fmt(&self, fmt: &mut fmt::Formatter) -> fmt::Result {
|
||||
write!(fmt, "[")?;
|
||||
for ts in self.0.clone().into_iter() {
|
||||
write!(fmt, " {}", ts.as_ref().fmt())?;
|
||||
}
|
||||
write!(fmt, " ]")?;
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, PartialOrd)]
|
||||
pub struct PulseId(u64);
|
||||
|
||||
@@ -2977,12 +3057,6 @@ impl TsMs {
|
||||
}
|
||||
}
|
||||
|
||||
impl AsRef<TsMs> for TsMs {
|
||||
fn as_ref(&self) -> &TsMs {
|
||||
&self
|
||||
}
|
||||
}
|
||||
|
||||
impl fmt::Display for TsMs {
|
||||
fn fmt(&self, fmt: &mut fmt::Formatter) -> fmt::Result {
|
||||
write!(fmt, "TsMs {{ {} }}", self.0)
|
||||
@@ -2997,45 +3071,6 @@ impl core::ops::Sub for TsMs {
|
||||
}
|
||||
}
|
||||
|
||||
pub struct TsMsFmt {
|
||||
ts: TsMs,
|
||||
}
|
||||
|
||||
impl fmt::Debug for TsMsFmt {
|
||||
fn fmt(&self, fmt: &mut fmt::Formatter) -> fmt::Result {
|
||||
chrono::DateTime::from_timestamp_millis(self.ts.ms() as i64)
|
||||
.unwrap()
|
||||
.format(DATETIME_FMT_3MS)
|
||||
.fmt(fmt)
|
||||
}
|
||||
}
|
||||
|
||||
impl fmt::Display for TsMsFmt {
|
||||
fn fmt(&self, fmt: &mut fmt::Formatter) -> fmt::Result {
|
||||
chrono::DateTime::from_timestamp_millis(self.ts.ms() as i64)
|
||||
.unwrap()
|
||||
.format(DATETIME_FMT_3MS)
|
||||
.fmt(fmt)
|
||||
}
|
||||
}
|
||||
|
||||
pub struct TsMsVecFmt<I>(pub I);
|
||||
|
||||
impl<I, T> fmt::Display for TsMsVecFmt<I>
|
||||
where
|
||||
I: Clone + IntoIterator<Item = T>,
|
||||
T: AsRef<TsMs>,
|
||||
{
|
||||
fn fmt(&self, fmt: &mut fmt::Formatter) -> fmt::Result {
|
||||
write!(fmt, "[")?;
|
||||
for ts in self.0.clone().into_iter() {
|
||||
write!(fmt, " {}", ts.as_ref().fmt())?;
|
||||
}
|
||||
write!(fmt, " ]")?;
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
|
||||
pub trait RetStreamExt: Stream {
|
||||
fn only_first_error(self) -> OnlyFirstError<Self>
|
||||
where
|
||||
@@ -4396,7 +4431,7 @@ pub fn status_board() -> Result<RwLockWriteGuard<'static, StatusBoard>, StatusBo
|
||||
match x {
|
||||
Ok(x) => Ok(x),
|
||||
Err(e) => {
|
||||
error!("{e}");
|
||||
error!("{}", e);
|
||||
Err(StatusBoardError::CantAcquire)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -6,6 +6,7 @@ use crate::Dim0Kind;
|
||||
use crate::FromUrl;
|
||||
use crate::NetpodError;
|
||||
use crate::TsNano;
|
||||
use crate::MS;
|
||||
use chrono::DateTime;
|
||||
use chrono::TimeZone;
|
||||
use chrono::Utc;
|
||||
@@ -91,6 +92,13 @@ impl NanoRange {
|
||||
}
|
||||
}
|
||||
|
||||
pub fn from_ms_u64(beg: u64, end: u64) -> Self {
|
||||
Self {
|
||||
beg: MS * beg,
|
||||
end: MS * end,
|
||||
}
|
||||
}
|
||||
|
||||
pub fn from_ns_u64(beg: u64, end: u64) -> Self {
|
||||
Self { beg, end }
|
||||
}
|
||||
@@ -106,6 +114,14 @@ impl NanoRange {
|
||||
pub fn end(&self) -> u64 {
|
||||
self.end
|
||||
}
|
||||
|
||||
pub fn beg_ts(&self) -> TsNano {
|
||||
TsNano::from_ns(self.beg)
|
||||
}
|
||||
|
||||
pub fn end_ts(&self) -> TsNano {
|
||||
TsNano::from_ns(self.end)
|
||||
}
|
||||
}
|
||||
|
||||
impl From<(u64, u64)> for NanoRange {
|
||||
|
||||
Reference in New Issue
Block a user