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 50 51 52 53 54 55
use crate as hitori;
/// Internet Protocol v4 address
pub struct IpV4;
#[hitori::impl_expr]
impl Expr<usize, char> for IpV4 {
const PATTERN: _ = (
#[hitori::repeat(eq = 3)]
(
[
(
|ch| ch == '2',
|ch| ch == '5',
|ch| ('0'..='5').contains(&ch),
),
(
|ch| ch == '2',
|ch| ('0'..='4').contains(&ch),
|ch: char| ch.is_ascii_digit(),
),
(
|ch| ch == '0' || ch == '1',
|ch: char| ch.is_ascii_digit(),
|ch: char| ch.is_ascii_digit(),
),
(
|ch: char| ch.is_ascii_digit(),
|ch: char| ch.is_ascii_digit(),
),
],
|ch| ch == '.',
),
[
(
|ch| ch == '2',
|ch| ch == '5',
|ch| ('0'..='5').contains(&ch),
),
(
|ch| ch == '2',
|ch| ('0'..='4').contains(&ch),
|ch: char| ch.is_ascii_digit(),
),
(
|ch| ch == '0' || ch == '1',
|ch: char| ch.is_ascii_digit(),
|ch: char| ch.is_ascii_digit(),
),
(
|ch: char| ch.is_ascii_digit(),
|ch: char| ch.is_ascii_digit(),
),
],
);
}