pyroscope_rbspy_oncpu/storage/
v0.rs

1use crate::core::types::{Header, StackFrame, StackTrace};
2use std::io::prelude::*;
3use std::io::BufReader;
4
5use super::*;
6
7pub(crate) struct Data(Vec<Vec<StackFrame>>);
8
9impl Storage for Data {
10    fn from_reader<R: Read>(r: R) -> Result<Data> {
11        let reader = BufReader::new(r);
12        let mut result = Vec::new();
13        for line in reader.lines() {
14            let trace: Vec<StackFrame> = serde_json::from_str(&line?)?;
15            result.push(trace);
16        }
17        Ok(Data(result))
18    }
19    fn version() -> Version {
20        Version(0)
21    }
22}
23
24impl From<Data> for v2::Data {
25    fn from(d: Data) -> v2::Data {
26        let x: Vec<StackTrace> = d.0.into_iter().map(std::convert::Into::into).collect();
27        v2::Data {
28            header: Header {
29                sample_rate: None,
30                rbspy_version: None,
31                start_time: None,
32            },
33            traces: x,
34        }
35    }
36}
37
38impl From<Vec<StackFrame>> for StackTrace {
39    fn from(trace: Vec<StackFrame>) -> StackTrace {
40        StackTrace {
41            pid: None,
42            trace,
43            thread_id: None,
44            time: None,
45        }
46    }
47}