linkerd2_proxy_api/
tap.rs

1include!("gen/io.linkerd.proxy.tap.rs");
2
3// === impl Eos ===
4
5impl From<h2::Reason> for Eos {
6    fn from(reason: h2::Reason) -> Self {
7        let end = eos::End::ResetErrorCode(reason.into());
8        Eos { end: Some(end) }
9    }
10}
11
12impl Eos {
13    pub fn from_grpc_status(code: u32) -> Self {
14        let end = eos::End::GrpcStatusCode(code);
15        Eos { end: Some(end) }
16    }
17}
18
19#[cfg(feature = "arbitrary")]
20mod arbitary {
21    use super::*;
22    use crate::{http_types::*, net::*};
23    use quickcheck::*;
24
25    impl Arbitrary for ObserveRequest {
26        fn arbitrary(g: &mut Gen) -> Self {
27            ObserveRequest {
28                limit: Arbitrary::arbitrary(g),
29                r#match: Arbitrary::arbitrary(g),
30                extract: Arbitrary::arbitrary(g),
31            }
32        }
33    }
34
35    impl Arbitrary for observe_request::Match {
36        fn arbitrary(g: &mut Gen) -> Self {
37            observe_request::Match {
38                r#match: Arbitrary::arbitrary(g),
39            }
40        }
41    }
42
43    impl Arbitrary for observe_request::r#match::Match {
44        fn arbitrary(g: &mut Gen) -> Self {
45            match u32::arbitrary(g) % 6 {
46                0 => observe_request::r#match::Match::All(Arbitrary::arbitrary(g)),
47                1 => observe_request::r#match::Match::Any(Arbitrary::arbitrary(g)),
48                2 => observe_request::r#match::Match::Not(Box::new(Arbitrary::arbitrary(g))),
49                3 => observe_request::r#match::Match::Source(Arbitrary::arbitrary(g)),
50                4 => observe_request::r#match::Match::Destination(Arbitrary::arbitrary(g)),
51                5 => observe_request::r#match::Match::Http(Arbitrary::arbitrary(g)),
52                _ => unreachable!(),
53            }
54        }
55    }
56
57    impl Arbitrary for observe_request::r#match::Seq {
58        fn arbitrary(g: &mut Gen) -> Self {
59            observe_request::r#match::Seq {
60                matches: Arbitrary::arbitrary(g),
61            }
62        }
63
64        fn shrink(&self) -> Box<dyn Iterator<Item = Self>> {
65            Box::new(
66                self.matches
67                    .shrink()
68                    .map(|matches| observe_request::r#match::Seq { matches }),
69            )
70        }
71    }
72
73    impl Arbitrary for observe_request::r#match::Label {
74        fn arbitrary(g: &mut Gen) -> Self {
75            observe_request::r#match::Label {
76                key: Arbitrary::arbitrary(g),
77                value: Arbitrary::arbitrary(g),
78            }
79        }
80    }
81
82    impl Arbitrary for observe_request::r#match::Tcp {
83        fn arbitrary(g: &mut Gen) -> Self {
84            observe_request::r#match::Tcp {
85                r#match: Arbitrary::arbitrary(g),
86            }
87        }
88    }
89
90    impl Arbitrary for observe_request::r#match::tcp::Match {
91        fn arbitrary(g: &mut Gen) -> Self {
92            use self::observe_request::r#match::tcp;
93
94            if bool::arbitrary(g) {
95                tcp::Match::Netmask(Arbitrary::arbitrary(g))
96            } else {
97                tcp::Match::Ports(Arbitrary::arbitrary(g))
98            }
99        }
100    }
101
102    impl Arbitrary for observe_request::r#match::tcp::PortRange {
103        fn arbitrary(g: &mut Gen) -> Self {
104            observe_request::r#match::tcp::PortRange {
105                min: Arbitrary::arbitrary(g),
106                max: Arbitrary::arbitrary(g),
107            }
108        }
109    }
110
111    impl Arbitrary for observe_request::r#match::tcp::Netmask {
112        fn arbitrary(g: &mut Gen) -> Self {
113            let ip: Option<IpAddress> = Arbitrary::arbitrary(g);
114            let mask = match ip.as_ref().and_then(|a| a.ip.as_ref()) {
115                Some(&ip_address::Ip::Ipv4(_)) => u32::arbitrary(g) % 32 + 1,
116                Some(&ip_address::Ip::Ipv6(_)) => u32::arbitrary(g) % 128 + 1,
117                None => 0u32,
118            };
119            observe_request::r#match::tcp::Netmask { ip, mask }
120        }
121    }
122
123    impl Arbitrary for observe_request::r#match::Http {
124        fn arbitrary(g: &mut Gen) -> Self {
125            observe_request::r#match::Http {
126                r#match: Arbitrary::arbitrary(g),
127            }
128        }
129    }
130
131    impl Arbitrary for observe_request::r#match::http::Match {
132        fn arbitrary(g: &mut Gen) -> Self {
133            use self::observe_request::r#match::http;
134
135            match u32::arbitrary(g) % 4 {
136                0 => http::Match::Scheme(Scheme::arbitrary(g)),
137                1 => http::Match::Method(HttpMethod::arbitrary(g)),
138                2 => http::Match::Authority(http::StringMatch::arbitrary(g)),
139                3 => http::Match::Path(http::StringMatch::arbitrary(g)),
140                _ => unreachable!(),
141            }
142        }
143    }
144
145    impl Arbitrary for observe_request::r#match::http::StringMatch {
146        fn arbitrary(g: &mut Gen) -> Self {
147            observe_request::r#match::http::StringMatch {
148                r#match: Arbitrary::arbitrary(g),
149            }
150        }
151    }
152
153    impl Arbitrary for observe_request::r#match::http::string_match::Match {
154        fn arbitrary(g: &mut Gen) -> Self {
155            use self::observe_request::r#match::http::string_match;
156
157            match u16::arbitrary(g) % 2 {
158                0 => string_match::Match::Exact(String::arbitrary(g)),
159                1 => string_match::Match::Prefix(String::arbitrary(g)),
160                _ => unreachable!(),
161            }
162        }
163    }
164
165    impl Arbitrary for observe_request::Extract {
166        fn arbitrary(g: &mut Gen) -> Self {
167            observe_request::Extract {
168                extract: Arbitrary::arbitrary(g),
169            }
170        }
171    }
172
173    impl Arbitrary for observe_request::extract::Extract {
174        fn arbitrary(g: &mut Gen) -> Self {
175            observe_request::extract::Extract::Http(Arbitrary::arbitrary(g))
176        }
177    }
178
179    impl Arbitrary for observe_request::extract::Http {
180        fn arbitrary(g: &mut Gen) -> Self {
181            observe_request::extract::Http {
182                extract: Arbitrary::arbitrary(g),
183            }
184        }
185    }
186
187    impl Arbitrary for observe_request::extract::http::Extract {
188        fn arbitrary(g: &mut Gen) -> Self {
189            observe_request::extract::http::Extract::Headers(Arbitrary::arbitrary(g))
190        }
191    }
192
193    impl Arbitrary for observe_request::extract::http::Headers {
194        fn arbitrary(_: &mut Gen) -> Self {
195            Self {}
196        }
197    }
198}