wgpu_core/device/trace/
replay.rs

1use alloc::borrow::Cow;
2
3use super::Data;
4
5pub trait DataLoader {
6    fn load<'loader, 'data>(&'loader self, data: &'data Data) -> Cow<'data, [u8]>;
7    fn load_utf8<'loader, 'data>(&'loader self, data: &'data Data) -> Cow<'data, str>;
8}
9
10#[cfg(feature = "std")]
11pub struct DiskTraceLoader<'a>(&'a std::path::Path);
12
13#[cfg(feature = "std")]
14impl<'a> DiskTraceLoader<'a> {
15    pub fn new(path: &'a std::path::Path) -> DiskTraceLoader<'a> {
16        DiskTraceLoader(path)
17    }
18}
19
20impl DataLoader for DiskTraceLoader<'_> {
21    fn load<'loader, 'data>(&'loader self, data: &'data Data) -> Cow<'data, [u8]> {
22        match data {
23            Data::File(file) => {
24                Cow::from(std::fs::read(self.0.join(file)).expect("Failed to read data file"))
25            }
26            Data::String(_, s) => Cow::from(s.as_bytes()),
27            Data::Binary(_, b) => Cow::from(b),
28        }
29    }
30
31    /// Load UTF-8 string data
32    ///
33    /// # Panics
34    ///
35    /// If the data kind is not a string format or the data is not valid UTF-8
36    fn load_utf8<'loader, 'data>(&'loader self, data: &'data Data) -> Cow<'data, str> {
37        match data {
38            Data::File(file) => Cow::from(
39                std::fs::read_to_string(self.0.join(file)).expect("Failed to read data file"),
40            ),
41            Data::String(kind, s) => {
42                assert!(kind.is_string(), "{kind:?} cannot be loaded as a string");
43                Cow::from(s)
44            }
45            Data::Binary(kind, b) => {
46                assert!(kind.is_string(), "{kind:?} cannot be loaded as a string");
47                Cow::from(core::str::from_utf8(b).unwrap())
48            }
49        }
50    }
51}