rapx/analysis/core/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 { no: usize },
11    Ret,
12    Transform(TransformKind),
13}
14
15impl Display for DepEdge {
16    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
17        match self {
18            DepEdge::Arg { no } => write!(f, "{}", no),
19            DepEdge::Ret => write!(f, "r"),
20            DepEdge::Transform(kind) => write!(f, "Transform({})", kind),
21        }
22    }
23}
24
25impl DepEdge {
26    pub fn arg(no: usize) -> DepEdge {
27        DepEdge::Arg { no }
28    }
29    pub fn ret() -> DepEdge {
30        DepEdge::Ret
31    }
32
33    pub fn transform(kind: TransformKind) -> DepEdge {
34        DepEdge::Transform(kind)
35    }
36    pub fn as_transform_kind(self) -> Option<TransformKind> {
37        match self {
38            DepEdge::Transform(kind) => Some(kind),
39            _ => None,
40        }
41    }
42}