rapx/analysis/core/api_dependency/graph/
dep_edge.rs1use 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}