Add helpers

This commit is contained in:
Dominik Werder
2024-11-30 11:42:58 +01:00
parent 3bade44520
commit b93deab39e
2 changed files with 107 additions and 56 deletions

View File

@@ -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)
}
}

View File

@@ -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 {