Parsing binary data

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, ...

Get Network Programming with Rust now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.