inkview 0.1.1

Rust bindings for pocketbook E-Reader devices (inkview)
Documentation
use std::ffi::{c_int, CString};
use std::time::Duration;

use crate::bindings;

#[derive(Debug, Clone, Copy, PartialEq, PartialOrd, Eq, Ord)]
pub enum Icon {
    Information = bindings::ICON_INFORMATION as isize,
    Question = bindings::ICON_QUESTION as isize,
    Warning = bindings::ICON_WARNING as isize,
    Error = bindings::ICON_ERROR as isize,
    WiFi = bindings::ICON_WIFI as isize,
}

pub fn message(
    iv: &bindings::Inkview,
    icon: Icon,
    title: impl Into<String>,
    text: impl Into<String>,
    timeout: Duration,
) {
    let title = CString::new(title.into()).unwrap();
    let text = CString::new(text.into()).unwrap();
    let timeout = timeout.as_millis();

    unsafe {
        iv.Message(icon as i32, title.as_ptr(), text.as_ptr(), timeout as i32);
    }
}

pub fn dialog(
    iv: &bindings::Inkview,
    icon: Icon,
    title: impl Into<String>,
    text: impl Into<String>,
    button_1: impl Into<String>,
    button_2: impl Into<String>,
    button_3: Option<impl Into<String>>,
) {
    let title = CString::new(title.into()).unwrap();
    let text = CString::new(text.into()).unwrap();
    let button_1 = CString::new(button_1.into()).unwrap();
    let button_2 = CString::new(button_2.into()).unwrap();

    if let Some(button_3) = button_3 {
        let button_3 = CString::new(button_3.into()).unwrap();

        unsafe {
            iv.Dialog3(
                icon as c_int,
                title.as_ptr(),
                text.as_ptr(),
                button_1.as_ptr(),
                button_2.as_ptr(),
                button_3.as_ptr(),
                None,
            )
        }
    } else {
        unsafe {
            iv.Dialog(
                icon as c_int,
                title.as_ptr(),
                text.as_ptr(),
                button_1.as_ptr(),
                button_2.as_ptr(),
                None,
            )
        }
    }
}