crafter 0.3.2

Packet-level network interaction for Rust tools and agents.
Documentation
mod common;

use common::{print_help_if_requested, ExampleResult};
use crafter::prelude::*;

fn main() -> ExampleResult<()> {
    if print_help_if_requested(
        "usage: cargo run --example ip_ranges --\n\nParse documentation-safe IPv4 range and number expressions.",
    ) {
        return Ok(());
    }

    let direct = Ipv4Range::parse("192.0.2.10-192.0.2.12")?;
    let wildcard = parse_ip_range("198.51.100.20,21,22")?;
    let cidr_strings = get_ip_strings("203.0.113.0/30")?;
    let ports = parse_numbers("80,443,8000-8002")?;

    println!("example: ip_ranges");
    println!("mode: offline");
    println!("Ipv4Range::parse len: {}", direct.len());
    println!("Ipv4Range::parse addresses: {:?}", direct.addresses());
    println!(
        "Ipv4Range contains 192.0.2.11: {}",
        direct.contains("192.0.2.11".parse()?)
    );
    println!("parse_ip_range len: {}", wildcard.len());
    println!(
        "parse_ip_range addresses: {:?}",
        wildcard.iter().collect::<Vec<_>>()
    );
    println!("get_ip_strings: {:?}", cidr_strings);
    println!("parse_numbers: {:?}", ports);

    Ok(())
}