kpt_lib 0.1.1

Keyboard plate prototyping
Documentation
extern crate serde;
use serde::Deserialize;

#[serde(default)]
#[derive(Deserialize, Clone, Debug)]
pub struct Layout {
    pub layout: Vec<Vec<Key>>,
    pub options: ConfigurableOptions,
}

#[derive(Deserialize, Clone, Debug)]
pub struct Key {
    pub size: f32,
    #[serde(alias = "char")]
    pub display: String,
    pub k_type: i8,
}

impl Default for Layout {
    fn default() -> Layout {
        Layout {
            layout: vec![],
            options: ConfigurableOptions::default(),
        }
    }
}

#[derive(Deserialize, Clone, Debug)]
pub struct Options {
    pub layout: Vec<Vec<Key>>,
}

#[serde(default)]
#[derive(Deserialize, Clone, Debug)]
pub struct ConfigurableOptions {
    pub plate_height: i32,
    pub screw_holes: bool,
    pub row: Vec<DirectionOptions>,
    pub column: Vec<DirectionOptions>
}

impl Default for ConfigurableOptions {
    fn default() -> ConfigurableOptions {
        ConfigurableOptions {
            plate_height: 20,
            screw_holes: false,
            row: vec![],
            column: vec![],
        }
    }
}

#[derive(Deserialize, Clone, Debug)]
pub struct DirectionOptions {
    pub index: i32,
    pub offset: f64,
}