Coverage Report

Created: 2025-11-16 07:04

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/rust/registry/src/index.crates.io-1949cf8c6b5b557f/petgraph-0.8.3/src/visit/macros.rs
Line
Count
Source
1
/// Define a trait as usual, and a macro that can be used to instantiate
2
/// implementations of it.
3
///
4
/// There *must* be section markers in the trait definition:
5
/// @section type for associated types
6
/// @section self for methods
7
/// @section nodelegate for arbitrary tail that is not forwarded.
8
macro_rules! trait_template {
9
    ($(#[$doc:meta])* pub trait $name:ident $($methods:tt)*) => {
10
        macro_rules! $name {
11
            ($m:ident $extra:tt) => {
12
                $m! {
13
                    $extra
14
                    pub trait $name $($methods)*
15
                }
16
            }
17
        }
18
19
        remove_sections! { []
20
            $(#[$doc])*
21
            pub trait $name $($methods)*
22
23
            // This is where the trait definition is reproduced by the macro.
24
            // It makes the source links point to this place!
25
            //
26
            // I'm sorry, you'll have to find the source by looking at the
27
            // source of the module the trait is defined in.
28
            //
29
            // We use this nifty macro so that we can automatically generate
30
            // delegation trait impls and implement the graph traits for more
31
            // types and combinators.
32
        }
33
    }
34
}
35
36
macro_rules! remove_sections_inner {
37
    ([$($stack:tt)*]) => {
38
        $($stack)*
39
    };
40
    // escape the following tt
41
    ([$($stack:tt)*] @escape $_x:tt $($t:tt)*) => {
42
        remove_sections_inner!([$($stack)*] $($t)*);
43
    };
44
    ([$($stack:tt)*] @section $x:ident $($t:tt)*) => {
45
        remove_sections_inner!([$($stack)*] $($t)*);
46
    };
47
    ([$($stack:tt)*] $t:tt $($tail:tt)*) => {
48
        remove_sections_inner!([$($stack)* $t] $($tail)*);
49
    };
50
}
51
52
// This is the outer layer, just find the { } of the actual trait definition
53
// recurse once into { }, but not more.
54
macro_rules! remove_sections {
55
    ([$($stack:tt)*]) => {
56
        $($stack)*
57
    };
58
    ([$($stack:tt)*] { $($tail:tt)* }) => {
59
        $($stack)* {
60
            remove_sections_inner!([] $($tail)*);
61
        }
62
    };
63
    ([$($stack:tt)*] $t:tt $($tail:tt)*) => {
64
        remove_sections!([$($stack)* $t] $($tail)*);
65
    };
66
}
67
68
macro_rules! deref {
69
    ($e:expr) => {
70
        *$e
71
    };
72
}
73
macro_rules! deref_twice {
74
    ($e:expr) => {
75
        **$e
76
    };
77
}
78
79
/// Implement a trait by delegation. By default as if we are delegating
80
/// from &G to G.
81
macro_rules! delegate_impl {
82
    ([] $($rest:tt)*) => {
83
        delegate_impl! { [['a, G], G, &'a G, deref] $($rest)* }
84
    };
85
    ([[$($param:tt)*], $self_type:ident, $self_wrap:ty, $self_map:ident]
86
     pub trait $name:ident $(: $sup:ident)* $(+ $more_sup:ident)* {
87
88
        // "Escaped" associated types. Stripped before making the `trait`
89
        // itself, but forwarded when delegating impls.
90
        $(
91
        @escape [type $assoc_name_ext:ident]
92
        // Associated types. Forwarded.
93
        )*
94
        $(
95
        @section type
96
        $(
97
            $(#[$_assoc_attr:meta])*
98
            type $assoc_name:ident $(: $assoc_bound:ty)*;
99
        )+
100
        )*
101
        // Methods. Forwarded. Using $self_map!(self) around the self argument.
102
        // Methods must use receiver `self` or explicit type like `self: &Self`
103
        // &self and &mut self are _not_ supported.
104
        $(
105
        @section self
106
        $(
107
            $(#[$_method_attr:meta])*
108
            fn $method_name:ident(self $(: $self_selftype:ty)* $(,$marg:ident : $marg_ty:ty)*) $(-> $mret:ty)?;
109
        )+
110
        )*
111
        // Arbitrary tail that is ignored when forwarding.
112
        $(
113
        @section nodelegate
114
        $($tail:tt)*
115
        )*
116
    }) => {
117
        impl<$($param)*> $name for $self_wrap where $self_type: $name {
118
            $(
119
            $(
120
                type $assoc_name = $self_type::$assoc_name;
121
            )*
122
            )*
123
            $(
124
                type $assoc_name_ext = $self_type::$assoc_name_ext;
125
            )*
126
            $(
127
            $(
128
0
                fn $method_name(self $(: $self_selftype)* $(,$marg: $marg_ty)*) $(-> $mret)? {
129
0
                    $self_map!(self).$method_name($($marg),*)
130
0
                }
Unexecuted instantiation: <&petgraph::graphmap::GraphMap<u32, (), petgraph::Directed, core::hash::BuildHasherDefault<rustc_hash::FxHasher>> as petgraph::visit::Visitable>::reset_map
Unexecuted instantiation: <&petgraph::graphmap::GraphMap<u32, (), petgraph::Directed, core::hash::BuildHasherDefault<rustc_hash::FxHasher>> as petgraph::visit::Visitable>::visit_map
Unexecuted instantiation: <&_ as petgraph::data::DataMap>::edge_weight
Unexecuted instantiation: <&_ as petgraph::data::DataMap>::node_weight
Unexecuted instantiation: <&mut _ as petgraph::data::DataMap>::edge_weight
Unexecuted instantiation: <&mut _ as petgraph::data::DataMap>::node_weight
Unexecuted instantiation: <petgraph::visit::reversed::Reversed<_> as petgraph::data::DataMap>::edge_weight
Unexecuted instantiation: <petgraph::visit::reversed::Reversed<_> as petgraph::data::DataMap>::node_weight
Unexecuted instantiation: <&mut _ as petgraph::data::DataMapMut>::edge_weight_mut
Unexecuted instantiation: <&mut _ as petgraph::data::DataMapMut>::node_weight_mut
Unexecuted instantiation: <petgraph::visit::reversed::Reversed<_> as petgraph::data::DataMapMut>::edge_weight_mut
Unexecuted instantiation: <petgraph::visit::reversed::Reversed<_> as petgraph::data::DataMapMut>::node_weight_mut
Unexecuted instantiation: <&_ as petgraph::visit::IntoNeighbors>::neighbors
Unexecuted instantiation: <&_ as petgraph::visit::IntoEdges>::edges
Unexecuted instantiation: <&_ as petgraph::visit::IntoEdgesDirected>::edges_directed
Unexecuted instantiation: <&_ as petgraph::visit::IntoNodeIdentifiers>::node_identifiers
Unexecuted instantiation: <&_ as petgraph::visit::IntoNeighborsDirected>::neighbors_directed
Unexecuted instantiation: <&_ as petgraph::visit::IntoNodeReferences>::node_references
Unexecuted instantiation: <&_ as petgraph::visit::IntoEdgeReferences>::edge_references
Unexecuted instantiation: <&_ as petgraph::visit::NodeIndexable>::from_index
Unexecuted instantiation: <&_ as petgraph::visit::NodeIndexable>::node_bound
Unexecuted instantiation: <&_ as petgraph::visit::NodeIndexable>::to_index
Unexecuted instantiation: <&_ as petgraph::visit::EdgeIndexable>::edge_bound
Unexecuted instantiation: <&_ as petgraph::visit::EdgeIndexable>::from_index
Unexecuted instantiation: <&_ as petgraph::visit::EdgeIndexable>::to_index
Unexecuted instantiation: <&_ as petgraph::visit::NodeCount>::node_count
Unexecuted instantiation: <&_ as petgraph::visit::Visitable>::reset_map
Unexecuted instantiation: <&_ as petgraph::visit::Visitable>::visit_map
Unexecuted instantiation: <&_ as petgraph::visit::GetAdjacencyMatrix>::is_adjacent
Unexecuted instantiation: <&_ as petgraph::visit::GetAdjacencyMatrix>::adjacency_matrix
Unexecuted instantiation: <&_ as petgraph::visit::EdgeCount>::edge_count
Unexecuted instantiation: <petgraph::graph_impl::Frozen<_> as petgraph::data::DataMap>::edge_weight
Unexecuted instantiation: <petgraph::graph_impl::Frozen<_> as petgraph::data::DataMap>::node_weight
Unexecuted instantiation: <petgraph::graph_impl::Frozen<_> as petgraph::data::DataMapMut>::edge_weight_mut
Unexecuted instantiation: <petgraph::graph_impl::Frozen<_> as petgraph::data::DataMapMut>::node_weight_mut
Unexecuted instantiation: <petgraph::graph_impl::Frozen<_> as petgraph::visit::GetAdjacencyMatrix>::is_adjacent
Unexecuted instantiation: <petgraph::graph_impl::Frozen<_> as petgraph::visit::GetAdjacencyMatrix>::adjacency_matrix
Unexecuted instantiation: <&petgraph::graph_impl::Frozen<_> as petgraph::visit::IntoEdgeReferences>::edge_references
Unexecuted instantiation: <&petgraph::graph_impl::Frozen<_> as petgraph::visit::IntoEdges>::edges
Unexecuted instantiation: <&petgraph::graph_impl::Frozen<_> as petgraph::visit::IntoEdgesDirected>::edges_directed
Unexecuted instantiation: <&petgraph::graph_impl::Frozen<_> as petgraph::visit::IntoNeighbors>::neighbors
Unexecuted instantiation: <&petgraph::graph_impl::Frozen<_> as petgraph::visit::IntoNeighborsDirected>::neighbors_directed
Unexecuted instantiation: <&petgraph::graph_impl::Frozen<_> as petgraph::visit::IntoNodeIdentifiers>::node_identifiers
Unexecuted instantiation: <&petgraph::graph_impl::Frozen<_> as petgraph::visit::IntoNodeReferences>::node_references
Unexecuted instantiation: <petgraph::graph_impl::Frozen<_> as petgraph::visit::NodeCount>::node_count
Unexecuted instantiation: <petgraph::graph_impl::Frozen<_> as petgraph::visit::NodeIndexable>::from_index
Unexecuted instantiation: <petgraph::graph_impl::Frozen<_> as petgraph::visit::NodeIndexable>::node_bound
Unexecuted instantiation: <petgraph::graph_impl::Frozen<_> as petgraph::visit::NodeIndexable>::to_index
Unexecuted instantiation: <petgraph::graph_impl::Frozen<_> as petgraph::visit::EdgeCount>::edge_count
Unexecuted instantiation: <petgraph::graph_impl::Frozen<_> as petgraph::visit::EdgeIndexable>::edge_bound
Unexecuted instantiation: <petgraph::graph_impl::Frozen<_> as petgraph::visit::EdgeIndexable>::from_index
Unexecuted instantiation: <petgraph::graph_impl::Frozen<_> as petgraph::visit::EdgeIndexable>::to_index
Unexecuted instantiation: <petgraph::graph_impl::Frozen<_> as petgraph::visit::Visitable>::reset_map
Unexecuted instantiation: <petgraph::graph_impl::Frozen<_> as petgraph::visit::Visitable>::visit_map
Unexecuted instantiation: <petgraph::visit::undirected_adaptor::UndirectedAdaptor<_> as petgraph::visit::Visitable>::reset_map
Unexecuted instantiation: <petgraph::visit::undirected_adaptor::UndirectedAdaptor<_> as petgraph::visit::Visitable>::visit_map
Unexecuted instantiation: <petgraph::visit::undirected_adaptor::UndirectedAdaptor<_> as petgraph::visit::NodeIndexable>::from_index
Unexecuted instantiation: <petgraph::visit::undirected_adaptor::UndirectedAdaptor<_> as petgraph::visit::NodeIndexable>::node_bound
Unexecuted instantiation: <petgraph::visit::undirected_adaptor::UndirectedAdaptor<_> as petgraph::visit::NodeIndexable>::to_index
Unexecuted instantiation: <petgraph::visit::undirected_adaptor::UndirectedAdaptor<_> as petgraph::visit::IntoNodeIdentifiers>::node_identifiers
Unexecuted instantiation: <petgraph::visit::undirected_adaptor::UndirectedAdaptor<_> as petgraph::visit::IntoNodeReferences>::node_references
Unexecuted instantiation: <petgraph::visit::undirected_adaptor::UndirectedAdaptor<_> as petgraph::visit::NodeCount>::node_count
Unexecuted instantiation: <petgraph::visit::filter::NodeFiltered<_, _> as petgraph::visit::NodeIndexable>::from_index
Unexecuted instantiation: <petgraph::visit::filter::NodeFiltered<_, _> as petgraph::visit::NodeIndexable>::node_bound
Unexecuted instantiation: <petgraph::visit::filter::NodeFiltered<_, _> as petgraph::visit::NodeIndexable>::to_index
Unexecuted instantiation: <petgraph::visit::filter::NodeFiltered<_, _> as petgraph::visit::EdgeIndexable>::edge_bound
Unexecuted instantiation: <petgraph::visit::filter::NodeFiltered<_, _> as petgraph::visit::EdgeIndexable>::from_index
Unexecuted instantiation: <petgraph::visit::filter::NodeFiltered<_, _> as petgraph::visit::EdgeIndexable>::to_index
Unexecuted instantiation: <petgraph::visit::filter::NodeFiltered<_, _> as petgraph::visit::Visitable>::reset_map
Unexecuted instantiation: <petgraph::visit::filter::NodeFiltered<_, _> as petgraph::visit::Visitable>::visit_map
Unexecuted instantiation: <&petgraph::visit::filter::EdgeFiltered<_, _> as petgraph::visit::IntoNodeIdentifiers>::node_identifiers
Unexecuted instantiation: <&petgraph::visit::filter::EdgeFiltered<_, _> as petgraph::visit::IntoNodeReferences>::node_references
Unexecuted instantiation: <petgraph::visit::filter::EdgeFiltered<_, _> as petgraph::visit::NodeCount>::node_count
Unexecuted instantiation: <petgraph::visit::filter::EdgeFiltered<_, _> as petgraph::visit::NodeIndexable>::from_index
Unexecuted instantiation: <petgraph::visit::filter::EdgeFiltered<_, _> as petgraph::visit::NodeIndexable>::node_bound
Unexecuted instantiation: <petgraph::visit::filter::EdgeFiltered<_, _> as petgraph::visit::NodeIndexable>::to_index
Unexecuted instantiation: <petgraph::visit::filter::EdgeFiltered<_, _> as petgraph::visit::EdgeIndexable>::edge_bound
Unexecuted instantiation: <petgraph::visit::filter::EdgeFiltered<_, _> as petgraph::visit::EdgeIndexable>::from_index
Unexecuted instantiation: <petgraph::visit::filter::EdgeFiltered<_, _> as petgraph::visit::EdgeIndexable>::to_index
Unexecuted instantiation: <petgraph::visit::filter::EdgeFiltered<_, _> as petgraph::visit::Visitable>::reset_map
Unexecuted instantiation: <petgraph::visit::filter::EdgeFiltered<_, _> as petgraph::visit::Visitable>::visit_map
Unexecuted instantiation: <petgraph::visit::reversed::Reversed<_> as petgraph::visit::NodeIndexable>::from_index
Unexecuted instantiation: <petgraph::visit::reversed::Reversed<_> as petgraph::visit::NodeIndexable>::node_bound
Unexecuted instantiation: <petgraph::visit::reversed::Reversed<_> as petgraph::visit::NodeIndexable>::to_index
Unexecuted instantiation: <petgraph::visit::reversed::Reversed<_> as petgraph::visit::IntoNodeIdentifiers>::node_identifiers
Unexecuted instantiation: <petgraph::visit::reversed::Reversed<_> as petgraph::visit::IntoNodeReferences>::node_references
Unexecuted instantiation: <petgraph::visit::reversed::Reversed<_> as petgraph::visit::NodeCount>::node_count
Unexecuted instantiation: <petgraph::visit::reversed::Reversed<_> as petgraph::visit::EdgeCount>::edge_count
Unexecuted instantiation: <petgraph::visit::reversed::Reversed<_> as petgraph::visit::EdgeIndexable>::edge_bound
Unexecuted instantiation: <petgraph::visit::reversed::Reversed<_> as petgraph::visit::EdgeIndexable>::from_index
Unexecuted instantiation: <petgraph::visit::reversed::Reversed<_> as petgraph::visit::EdgeIndexable>::to_index
Unexecuted instantiation: <petgraph::visit::reversed::Reversed<_> as petgraph::visit::GetAdjacencyMatrix>::is_adjacent
Unexecuted instantiation: <petgraph::visit::reversed::Reversed<_> as petgraph::visit::GetAdjacencyMatrix>::adjacency_matrix
131
            )*
132
            )*
133
        }
134
    }
135
}