use std::fmt::{Debug, Formatter};
use pipewire_wrapper_proc_macro::RawWrapper;
use crate::spa::type_::FractionRef;
use crate::wrapper::RawWrapper;
#[derive(RawWrapper)]
#[repr(transparent)]
pub struct TimeRef {
    #[raw]
    raw: pw_sys::pw_time,
}
impl TimeRef {
    pub fn now(&self) -> i64 {
        self.raw.now
    }
    pub fn rate(&self) -> &FractionRef {
        unsafe { FractionRef::from_raw_ptr(&self.raw.rate) }
    }
    pub fn ticks(&self) -> u64 {
        self.raw.ticks
    }
    pub fn delay(&self) -> i64 {
        self.raw.delay
    }
    pub fn queued(&self) -> u64 {
        self.raw.queued
    }
}
impl Debug for TimeRef {
    fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
        f.debug_struct("TimeRef")
            .field("now", &self.now())
            .field("rate", &self.rate())
            .field("ticks", &self.ticks())
            .field("delay", &self.delay())
            .field("queued", &self.queued())
            .finish()
    }
}
impl Default for TimeRef {
    fn default() -> Self {
        TimeRef::from_raw(pw_sys::pw_time {
            now: 0,
            rate: spa_sys::spa_fraction { num: 0, denom: 0 },
            ticks: 0,
            delay: 0,
            queued: 0,
        })
    }
}