bintex 0.1.0

Create bitfield LaTeX diagrams with the use of the deku library
Documentation
#[test]
fn all_bits() {
    use bintex::prelude::*;

    #[allow(dead_code)]
    #[derive(BinTex)]
    #[bintex(bit_width = "8")]
    struct Testing {
        #[deku(bits = "4")]
        a: u8,
        #[deku(bits = "4")]
        b: u8,
        #[deku(bits = "8")]
        c: u8,
    }

    let expected = r#"\begin{figure}
\begin{bytefield}{8}
\bitheader{0-7} \\
\bitbox{4}{a} & \bitbox{4}{b} \\
\bitbox{8}{c} \\
\end{bytefield}
\caption{Testing}
\end{figure}"#;
    assert_eq!(Testing::latex_output(), expected);
}

#[test]
fn use_bits_from_type() {
    use bintex::prelude::*;

    #[allow(dead_code)]
    #[derive(BinTex)]
    #[bintex(bit_width = "8")]
    struct Testing {
        #[deku(bits = "4")]
        a: u8,
        #[deku(bits = "4")]
        b: u8,
        c: u8,
    }

    let expected = r#"\begin{figure}
\begin{bytefield}{8}
\bitheader{0-7} \\
\bitbox{4}{a} & \bitbox{4}{b} \\
\bitbox{8}{c} \\
\end{bytefield}
\caption{Testing}
\end{figure}"#;
    assert_eq!(Testing::latex_output(), expected);
}

#[test]
fn readme() {
    use bintex::prelude::*;

    #[allow(dead_code)]
    #[derive(BinTex)]
    #[bintex(bit_width = 32)]
    struct Ipv6 {
        #[deku(bits = "4")]
        version: u8,
        #[deku(bits = "6")]
        ds: u8,
        #[deku(bits = "2")]
        ecn: u8,
        #[deku(bits = "20")]
        label: u32,
        length: u16,
        next_header: u8,
        hop_limit: u8,
        src: u32,
        dst: u32,
    }

    let expected = r#"\begin{figure}
\begin{bytefield}{32}
\bitheader{0-31} \\
\bitbox{4}{version} & \bitbox{6}{ds} & \bitbox{2}{ecn} & \bitbox{20}{label} \\
\bitbox{16}{length} & \bitbox{8}{next\_header} & \bitbox{8}{hop\_limit} \\
\bitbox{32}{src} \\
\bitbox{32}{dst} \\
\end{bytefield}
\caption{Ipv6}
\end{figure}"#;
    assert_eq!(Ipv6::latex_output(), expected);
}

#[test]
fn bitheader() {
    use bintex::prelude::*;

    #[allow(dead_code)]
    #[derive(BinTex)]
    #[bintex(bit_width = "8", bitheader = "0, 7")]
    struct Testing {
        #[deku(bits = "4")]
        a: u8,
        #[deku(bits = "4")]
        b: u8,
        #[deku(bits = "8")]
        c: u8,
    }

    let expected = r#"\begin{figure}
\begin{bytefield}{8}
\bitheader{0, 7} \\
\bitbox{4}{a} & \bitbox{4}{b} \\
\bitbox{8}{c} \\
\end{bytefield}
\caption{Testing}
\end{figure}"#;
    assert_eq!(Testing::latex_output(), expected);
}

#[test]
fn unused() {
    use bintex::prelude::*;

    #[allow(dead_code)]
    #[derive(BinTex)]
    #[bintex(bit_width = "8", bitheader = "0, 7")]
    struct Testing {
        #[deku(bits = "4")]
        a: u8,
        #[deku(bits = "4")]
        #[bintex(unused)]
        b: u8,
        #[deku(bits = "8")]
        c: u8,
    }

    let expected = r#"\begin{figure}
\begin{bytefield}{8}
\bitheader{0, 7} \\
\bitbox{4}{a} & \bitbox{4}[bgcolor=lightgray]{} \\
\bitbox{8}{c} \\
\end{bytefield}
\caption{Testing}
\end{figure}"#;
    assert_eq!(Testing::latex_output(), expected);
}

#[test]
fn other_struct() {
    use bintex::prelude::*;

    #[allow(dead_code)]
    #[derive(BinTex)]
    #[bintex(bit_width = 4)]
    struct Version {
        #[deku(bits = "4")]
        version: u8,
    }

    #[allow(dead_code)]
    #[derive(BinTex)]
    #[bintex(bit_width = 32)]
    struct Ipv6 {
        #[bintex(bits = "4")]
        v: Version,
        #[deku(bits = "6")]
        ds: u8,
        #[deku(bits = "2")]
        ecn: u8,
        #[deku(bits = "20")]
        label: u32,
        length: u16,
        next_header: u8,
        hop_limit: u8,
        src: u32,
        dst: u32,
    }

    let expected = r#"\begin{figure}
\begin{bytefield}{4}
\bitheader{0-3} \\
\bitbox{4}{version} \\
\end{bytefield}
\caption{Version}
\end{figure}\begin{figure}
\begin{bytefield}{32}
\bitheader{0-31} \\
\bitbox{4}{v} & \bitbox{6}{ds} & \bitbox{2}{ecn} & \bitbox{20}{label} \\
\bitbox{16}{length} & \bitbox{8}{next\_header} & \bitbox{8}{hop\_limit} \\
\bitbox{32}{src} \\
\bitbox{32}{dst} \\
\end{bytefield}
\caption{Ipv6}
\end{figure}"#;

    let mut file = String::new();
    file.push_str(&Version::latex_output());
    file.push_str(&Ipv6::latex_output());
    assert_eq!(expected, expected);
}