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
use core::fmt::Debug;
use core::hash::Hash;

/// Address-family independent interface for IP masks.
///
/// Methods on `Mask` types that are well defined for all address-families
/// are implemented via this trait.
///
/// See also [`concrete::Mask<T, A>`][crate::concrete::Mask] and
/// [`any::Mask<T>`][crate::any::Mask] for address-family specific items.
pub trait Mask: Clone + Copy + Debug + Hash + PartialEq + Eq {}

/// Address-family independent interface for IP netmasks.
///
/// Methods on `Netmask` types that are well defined for all address-families
/// are implemented via this trait.
///
/// See also [`concrete::Netmask<A>`][crate::concrete::Netmask] and
/// [`any::Netmask`][crate::any::Netmask] for address-family specific items.
pub trait Netmask: Mask {}

/// Address-family independent interface for IP hostmasks.
///
/// Methods on `Hostmask` types that are well defined for all address-families
/// are implemented via this trait.
///
/// See also [`concrete::Hostmask<A>`][crate::concrete::Hostmask] and
/// [`any::Hostmask`][crate::any::Hostmask] for address-family specific items.
pub trait Hostmask: Mask {}

/// Address-family independent interface for IP bitmasks.
///
/// Methods on `Bitmask` types that are well defined for all address-families
/// are implemented via this trait.
///
/// See also [`concrete::Bitmask<A>`][crate::concrete::Bitmask] and
/// [`any::Bitmask`][crate::any::Bitmask] for address-family specific items.
pub trait Bitmask: Mask {}