off64 0.9.0

Read from and write to byte slices with u64 offsets
Documentation
use crate::int::*;
use chrono::DateTime;
use chrono::TimeZone;
use chrono::Utc;
pub trait Off64ReadChrono<'a, T: 'a + AsRef<[u8]>>: Off64ReadInt<'a, T> {
  fn read_timestamp_be_at(&'a self, offset: u64) -> DateTime<Utc> {
    let sec = self.read_i64_be_at(offset);
    Utc.timestamp_millis_opt(sec * 1000).unwrap()
  }

  fn read_timestamp_millis_be_at(&'a self, offset: u64) -> DateTime<Utc> {
    let ms = self.read_i64_be_at(offset);
    Utc.timestamp_millis_opt(ms).unwrap()
  }

  fn read_timestamp_le_at(&'a self, offset: u64) -> DateTime<Utc> {
    let sec = self.read_i64_le_at(offset);
    Utc.timestamp_millis_opt(sec * 1000).unwrap()
  }

  fn read_timestamp_millis_le_at(&'a self, offset: u64) -> DateTime<Utc> {
    let ms = self.read_i64_le_at(offset);
    Utc.timestamp_millis_opt(ms).unwrap()
  }
}
#[async_trait::async_trait]
pub trait Off64AsyncReadChrono<'a, T: 'a + AsRef<[u8]>>: Off64AsyncReadInt<'a, T> {
  async fn read_timestamp_be_at(&'a self, offset: u64) -> DateTime<Utc> {
    let sec = self.read_i64_be_at(offset).await;
    Utc.timestamp_millis_opt(sec * 1000).unwrap()
  }

  async fn read_timestamp_millis_be_at(&'a self, offset: u64) -> DateTime<Utc> {
    let ms = self.read_i64_be_at(offset).await;
    Utc.timestamp_millis_opt(ms).unwrap()
  }

  async fn read_timestamp_le_at(&'a self, offset: u64) -> DateTime<Utc> {
    let sec = self.read_i64_le_at(offset).await;
    Utc.timestamp_millis_opt(sec * 1000).unwrap()
  }

  async fn read_timestamp_millis_le_at(&'a self, offset: u64) -> DateTime<Utc> {
    let ms = self.read_i64_le_at(offset).await;
    Utc.timestamp_millis_opt(ms).unwrap()
  }
}
#[async_trait::async_trait]
pub trait Off64AsyncWriteMutChrono: Off64AsyncWriteMutInt {
  async fn write_timestamp_be_at(&mut self, offset: u64, value: DateTime<Utc>) {
    let sec = value.timestamp();
    self.write_i64_be_at(offset, sec).await;
  }

  async fn write_timestamp_millis_be_at(&mut self, offset: u64, value: DateTime<Utc>) {
    let ms = value.timestamp_millis();
    self.write_i64_be_at(offset, ms).await;
  }

  async fn write_timestamp_le_at(&mut self, offset: u64, value: DateTime<Utc>) {
    let sec = value.timestamp();
    self.write_i64_le_at(offset, sec).await;
  }

  async fn write_timestamp_millis_le_at(&mut self, offset: u64, value: DateTime<Utc>) {
    let ms = value.timestamp_millis();
    self.write_i64_le_at(offset, ms).await;
  }
}
#[async_trait::async_trait]
pub trait Off64AsyncWriteChrono: Off64AsyncWriteInt {
  async fn write_timestamp_be_at(&self, offset: u64, value: DateTime<Utc>) {
    let sec = value.timestamp();
    self.write_i64_be_at(offset, sec).await;
  }

  async fn write_timestamp_millis_be_at(&self, offset: u64, value: DateTime<Utc>) {
    let ms = value.timestamp_millis();
    self.write_i64_be_at(offset, ms).await;
  }

  async fn write_timestamp_le_at(&self, offset: u64, value: DateTime<Utc>) {
    let sec = value.timestamp();
    self.write_i64_le_at(offset, sec).await;
  }

  async fn write_timestamp_millis_le_at(&self, offset: u64, value: DateTime<Utc>) {
    let ms = value.timestamp_millis();
    self.write_i64_le_at(offset, ms).await;
  }
}
pub trait Off64WriteMutChrono: Off64WriteMutInt {
  fn write_timestamp_be_at(&mut self, offset: u64, value: DateTime<Utc>) {
    let sec = value.timestamp();
    self.write_i64_be_at(offset, sec);
  }

  fn write_timestamp_millis_be_at(&mut self, offset: u64, value: DateTime<Utc>) {
    let ms = value.timestamp_millis();
    self.write_i64_be_at(offset, ms);
  }

  fn write_timestamp_le_at(&mut self, offset: u64, value: DateTime<Utc>) {
    let sec = value.timestamp();
    self.write_i64_le_at(offset, sec);
  }

  fn write_timestamp_millis_le_at(&mut self, offset: u64, value: DateTime<Utc>) {
    let ms = value.timestamp_millis();
    self.write_i64_le_at(offset, ms);
  }
}
pub trait Off64WriteChrono: Off64WriteInt {
  fn write_timestamp_be_at(&self, offset: u64, value: DateTime<Utc>) {
    let sec = value.timestamp();
    self.write_i64_be_at(offset, sec);
  }

  fn write_timestamp_millis_be_at(&self, offset: u64, value: DateTime<Utc>) {
    let ms = value.timestamp_millis();
    self.write_i64_be_at(offset, ms);
  }

  fn write_timestamp_le_at(&self, offset: u64, value: DateTime<Utc>) {
    let sec = value.timestamp();
    self.write_i64_le_at(offset, sec);
  }

  fn write_timestamp_millis_le_at(&self, offset: u64, value: DateTime<Utc>) {
    let ms = value.timestamp_millis();
    self.write_i64_le_at(offset, ms);
  }
}