rapx/analysis/core/api_dependency/graph/
dep_edge.rs

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