timecode/
timecode_frames.rs1pub use frame_rate::FrameRate;
2use std::fmt::Display;
3
4use serde::{Deserialize, Serialize};
5
6#[derive(Debug, Deserialize, Clone, PartialEq, Serialize)]
7pub struct TimecodeFrames {
8 frame_rate: FrameRate,
9 number_of_frames: u8,
10 drop_frame: bool,
11 color_frame: bool,
12}
13
14impl TimecodeFrames {
15 pub fn new(
16 frame_rate: FrameRate,
17 number_of_frames: u8,
18 drop_frame: bool,
19 color_frame: bool,
20 ) -> Self {
21 Self {
22 frame_rate,
23 number_of_frames,
24 drop_frame,
25 color_frame,
26 }
27 }
28
29 pub fn frame_rate(&self) -> FrameRate {
30 self.frame_rate
31 }
32
33 pub fn number_of_frames(&self) -> u8 {
34 self.number_of_frames
35 }
36
37 pub fn drop_frame(&self) -> bool {
38 self.drop_frame
39 }
40
41 pub fn color_frame(&self) -> bool {
42 self.color_frame
43 }
44
45 pub fn number_of_digits(&self) -> usize {
46 2
47 }
48
49 pub fn separator(&self) -> char {
50 if self.drop_frame() {
51 ';'
52 } else {
53 ':'
54 }
55 }
56}
57
58impl Display for TimecodeFrames {
59 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
60 let separator = if self.drop_frame() { ';' } else { ':' };
61
62 write!(f, "{}{:02}", separator, self.number_of_frames())
63 }
64}