jabcode 1.1.0

Bindings for the JAB code reference implementation
Documentation
use super::option::ColorNumber;
use super::WriteError;
use crate::jabcode;

pub struct EncodeHandle<'a> {
    enc: &'a mut jabcode::jab_encode,
}

impl<'a> EncodeHandle<'a> {
    pub fn new(color_number: ColorNumber, symbol_number: usize) -> Result<Self, WriteError> {
        let enc = if let Some(enc) =
            unsafe { jabcode::createEncode(color_number.into(), symbol_number as i32).as_mut() }
        {
            enc
        } else {
            return Err(WriteError::Encode);
        };

        Ok(Self { enc })
    }

    pub fn enc_mut(&mut self) -> &mut jabcode::jab_encode {
        self.enc
    }
    #[allow(dead_code)]
    pub fn enc(&self) -> &jabcode::jab_encode {
        self.enc
    }
}

impl<'a> Drop for EncodeHandle<'a> {
    fn drop(&mut self) {
        unsafe {
            jabcode::destroyEncode(self.enc);
        }
    }
}