wgpu_core/device/trace/
replay.rs1use 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 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}