A related problem is that of parsing binary data. Common cases where this is applicable include parsing binary files and binary protocols. Let us look at how nom can be used to parse binary data. In our toy example, we will write a parser for the IPv6 header. Our Cargo.toml will look exactly the same as last time. Set up the project using the CLI:
$ cargo new --bin nom-ipv6
Our main file will look like this:
// chapter4/nom-ipv6/src/main.rs
#[macro_use]
extern crate nom;
use std::net::Ipv6Addr;
use nom::IResult;
// Struct representing an IPv6 header
#[derive(Debug, PartialEq, Eq)]
pub struct IPv6Header {
version: u8,
traffic_class: u8,
flow_label: u32,
payload_length: u16,
next_header: u8,
hop_limit: u8,
source_addr: Ipv6Addr,
dest_addr: Ipv6Addr,
}
// Converts a given slice of [u8] to an array of 16 u8 given by
// [u8; 16]
fn slice_to_array(input...