route_verification_lex/
peering.rs

1use super::*;
2
3#[derive(Clone, Debug, Deserialize, Eq, Hash, Ord, PartialEq, PartialOrd, Serialize)]
4pub struct Peering {
5    pub as_expr: AsExpr,
6    #[serde(default)]
7    #[serde(skip_serializing_if = "Option::is_none")]
8    pub router_expr1: Option<AsExpr>,
9    #[serde(default)]
10    #[serde(skip_serializing_if = "Option::is_none")]
11    pub router_expr2: Option<AsExpr>,
12}
13
14#[derive(Clone, Debug, Deserialize, Eq, Hash, Ord, PartialEq, PartialOrd, Serialize)]
15#[serde(untagged)]
16pub enum AsExpr {
17    Field(String),
18    AsComp(ComplexAsExpr),
19}
20
21#[derive(Clone, Debug, Deserialize, Eq, Hash, Ord, PartialEq, PartialOrd, Serialize)]
22#[serde(rename_all = "snake_case")]
23pub enum ComplexAsExpr {
24    And {
25        left: Box<AsExpr>,
26        right: Box<AsExpr>,
27    },
28    Or {
29        left: Box<AsExpr>,
30        right: Box<AsExpr>,
31    },
32    Except {
33        left: Box<AsExpr>,
34        right: Box<AsExpr>,
35    },
36    Group(Box<AsExpr>),
37}