cog_task/resource/
value.rs

1use crate::resource::{AudioBuffer, FrameBuffer, Stream};
2use eframe::egui::{TextureId, Vec2};
3use std::fmt::{Debug, Formatter};
4use std::path::PathBuf;
5use std::sync::Arc;
6
7#[derive(Clone)]
8pub enum ResourceValue {
9    Ref(PathBuf),
10    Text(Arc<String>),
11    Image(TextureId, Vec2),
12    Audio(AudioBuffer),
13    Video(FrameBuffer, f64),
14    Stream(Stream),
15}
16
17impl Debug for ResourceValue {
18    fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
19        match self {
20            ResourceValue::Ref(path) => {
21                write!(f, "{path:?}")
22            }
23            ResourceValue::Text(_) => {
24                write!(f, "[Text]")
25            }
26            ResourceValue::Image(_, size) => {
27                write!(f, "[Image ({} x {})]", size.x, size.y)
28            }
29            ResourceValue::Audio(buffer) => {
30                write!(
31                    f,
32                    "[Audio ({:?} @ {}Hz)]",
33                    buffer.duration(),
34                    buffer.sample_rate()
35                )
36            }
37            ResourceValue::Video(frames, fps) => {
38                write!(f, "[Cached video ({} frames @ {}fps)]", frames.len(), fps,)
39            }
40            ResourceValue::Stream(stream) => {
41                write!(
42                    f,
43                    "[Buffered stream ({:?} @ {}fps)]",
44                    stream.duration(),
45                    stream.framerate()
46                )
47            }
48        }
49    }
50}