snapshot_parser 0.1.0

v8 snapshot_parser
Documentation
use serde::{Deserialize, Serialize};

#[derive(Serialize, Deserialize, Debug)]
#[serde(untagged)]
pub enum EdgeOrNodeType {
    MultiType(Vec<String>),
    SingleType(String),
}

impl EdgeOrNodeType {
    pub fn get_value(&self, index: usize) -> String {
        match self {
            EdgeOrNodeType::MultiType(values) => values.get(index).unwrap().to_string(),
            EdgeOrNodeType::SingleType(value) => value.to_string(),
        }
    }
}

#[derive(Serialize, Deserialize, Debug)]
pub struct SnapshotMeta {
    pub edge_fields: Vec<String>,
    pub edge_types: Vec<EdgeOrNodeType>,
    pub location_fields: Vec<String>,
    pub node_fields: Vec<String>,
    pub node_types: Vec<EdgeOrNodeType>,
    pub sample_fields: Vec<String>,
    pub trace_function_info_fields: Vec<String>,
    pub trace_node_fields: Vec<String>,
}

#[derive(Serialize, Deserialize, Debug)]
pub struct SnapshotInfo {
    pub edge_count: u32,
    pub meta: SnapshotMeta,
    pub node_count: u32,
    pub trace_function_count: u32,
}

#[derive(Serialize, Deserialize, Debug)]
pub struct Snapshot {
    pub edges: Vec<u32>,
    pub locations: Vec<u32>,
    pub nodes: Vec<u32>,
    pub samples: Vec<u32>,
    pub snapshot: SnapshotInfo,
    pub strings: Vec<String>,
    pub trace_function_infos: Vec<u32>,
    pub trace_tree: Vec<u32>,
}

#[derive(Serialize, Deserialize, Debug)]
pub struct Node {
    pub node_type: String,
    pub name: String,
    pub id: u32,
    pub self_size: u32,
    pub edge_count: u32,
    pub trace_node_id: u32,
    pub detachedness: u32,
    pub from_edge_index: Vec<u32>,
    pub to_edge_index: Vec<u32>,
}

#[derive(Serialize, Deserialize, Debug)]
pub struct Edge {
    pub edge_type: String,
    pub name_or_index: String,
    pub to_node_index: usize,
    pub to_node_id: u32,
    pub from_node_index: usize,
    pub from_node_id: u32,
}