cidr/
num.rs

1/// Number of addresses (in a prefix / range)
2///
3/// Can be 2^128, so a u128 isn't enough - we need one more.
4#[derive(Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash, Debug)]
5pub enum NumberOfAddresses {
6	/// Given amount
7	Count(u128),
8	/// 2^128 = 340282366920938463463374607431768211456
9	MaxIpv6Addresses,
10}
11
12impl NumberOfAddresses {
13	pub(crate) const fn count_from_distance(d: u128) -> Self {
14		match d.checked_add(1) {
15			Some(c) => Self::Count(c),
16			None => Self::MaxIpv6Addresses,
17		}
18	}
19}
20
21impl core::fmt::Display for NumberOfAddresses {
22	fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
23		match self {
24			Self::Count(c) => c.fmt(f),
25			Self::MaxIpv6Addresses => f.write_str("340282366920938463463374607431768211456"),
26		}
27	}
28}