Skip to main content

rapx/analysis/api_dependency/graph/
dep_edge.rs

1use rustc_middle::ty::{self, Mutability, Ty};
2use serde::Serialize;
3use std::{fmt::Display, sync::OnceLock};
4
5use super::transform::TransformKind;
6
7#[derive(Clone, Copy, Eq, PartialEq, Debug, Serialize)]
8#[serde(tag = "type")]
9pub enum DepEdge {
10    Arg {
11        no: usize,
12    },
13    Ret,
14    Transform {
15        #[serde(rename = "transform_kind")]
16        kind: TransformKind,
17    },
18}
19
20impl Display for DepEdge {
21    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
22        match self {
23            DepEdge::Arg { no } => write!(f, "{}", no),
24            DepEdge::Ret => write!(f, "r"),
25            DepEdge::Transform { kind } => write!(f, "Transform({})", kind),
26        }
27    }
28}
29
30impl DepEdge {
31    pub fn arg(no: usize) -> DepEdge {
32        DepEdge::Arg { no }
33    }
34    pub fn ret() -> DepEdge {
35        DepEdge::Ret
36    }
37
38    pub fn transform(kind: TransformKind) -> DepEdge {
39        DepEdge::Transform { kind }
40    }
41    pub fn as_transform_kind(self) -> Option<TransformKind> {
42        match self {
43            DepEdge::Transform { kind } => Some(kind),
44            _ => None,
45        }
46    }
47}