1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
/*
 * SPDX-License-Identifier: MIT
 */
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,
        })
    }
}