abstract-bits-derive 0.2.0

Turn bit & byte sequences into normal structs
Documentation
use proc_macro2::{Literal, TokenStream};
use quote::{quote, quote_spanned};
use syn::Ident;

pub fn read(controlled: &Ident, struct_name: &Literal) -> TokenStream {
    let option_controlled = Literal::string(&controlled.to_string());
    let controller_ident = super::option::is_some_ident(controlled);
    quote_spanned! {controlled.span()=>
        let #controller_ident = bool::read_abstract_bits(reader)
            .map_err(|cause| cause.read_option_controller(#struct_name, #option_controlled))?;
    }
}

pub fn write(controlled: &Ident) -> TokenStream {
    quote_spanned! {controlled.span()=>
        if self.#controlled.is_some() {
            true.write_abstract_bits(writer)?;
        } else {
            false.write_abstract_bits(writer)?;
        }
    }
}

pub(crate) fn min_bits() -> TokenStream {
    quote! { 1 }
}

pub(crate) fn max_bits() -> TokenStream {
    quote! { 1 }
}