1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49
// SPDX-License-Identifier: Apache-2.0
use crate::{
NetStateIfaceFilter, NetStateRouteFilter, NetStateRouteRuleFilter,
};
#[derive(Debug, PartialEq, Eq, Clone)]
#[non_exhaustive]
/// The `NetStateFilter::default()` will retrieve full information.
/// To query only the interested part, please use `NetStateFilter::minimum()`
/// with proper sub-filter set with `Some()`.
pub struct NetStateFilter {
/// Filter applied to interfaces, default is NetStateIfaceFilter::default()
/// -- all interface with full information.
/// When set to None, no interface will be included in result.
pub iface: Option<NetStateIfaceFilter>,
/// Filter applied to route entries, default is
/// NetStateRouteFilter::default() -- full routes information.
/// When set to None, no route will be included in result.
pub route: Option<NetStateRouteFilter>,
/// Filter applied to route rule entries, default is
/// NetStateRouteRuleFilter::default() -- full route rule infromation.
/// When set to None, no route rule will be included in result.
pub route_rule: Option<NetStateRouteRuleFilter>,
}
impl Default for NetStateFilter {
fn default() -> Self {
Self {
iface: Some(NetStateIfaceFilter::default()),
route: Some(NetStateRouteFilter::default()),
route_rule: Some(NetStateRouteRuleFilter::default()),
}
}
}
impl NetStateFilter {
/// Return a filter excluding all information.
/// Could be used to query interested information only by setting
/// the sub-filter to `Some()`.
pub fn minimum() -> Self {
Self {
iface: None,
route: None,
route_rule: None,
}
}
}