performance-mark 0.3.0

A utility library for marking events and durations for performance-tracking purposes.
Documentation
use std::time::{Instant, SystemTime};

use serde::Serializer;

pub(crate) fn approx_instant<S>(instant: &Instant, serializer: S) -> Result<S::Ok, S::Error>
where
  S: Serializer,
{
  serializer.serialize_newtype_struct("SystemTime", &approx(instant))
}

pub(crate) fn approx_opt_instant<S>(instant: &Option<Instant>, serializer: S) -> Result<S::Ok, S::Error>
where
  S: Serializer,
{
  match instant {
    Some(i) => serializer.serialize_some(&approx(i)),
    None => serializer.serialize_none(),
  }
}

fn approx(instant: &Instant) -> SystemTime {
  let system_now = SystemTime::now();
  let instant_now = Instant::now();
  system_now - (instant_now - *instant)
}