filmborders 0.0.32

add hipster film borders to your images :)
Documentation
use super::types;
use serde::{Deserialize, Serialize};
use wasm_bindgen::prelude::*;

#[wasm_bindgen]
#[derive(Serialize, Deserialize, Clone, Debug)]
pub struct Options {
    pub output_size: super::BoundedSize,
    pub output_size_bounds: super::BoundedSize,
    pub scale_factor: f32,
    pub margin: f32,
    pub mode: super::FitMode,
    pub crop: Option<super::sides::percent::Sides>,
    pub frame_width: super::sides::percent::Sides,
    pub image_rotation: super::Rotation,
    pub border_rotation: super::Rotation,
    pub frame_color: super::Color,
    pub background_color: Option<super::Color>,
    pub preview: bool,
}

impl Default for Options {
    #[inline]
    #[must_use]
    fn default() -> Self {
        Self {
            output_size: super::BoundedSize::default(),
            output_size_bounds: super::BoundedSize::default(),
            margin: 0.0,
            scale_factor: 1.0,
            mode: super::FitMode::default(),
            crop: None,
            frame_width: super::sides::percent::Sides::default(),
            image_rotation: super::Rotation::default(),
            border_rotation: super::Rotation::default(),
            frame_color: super::Color::black(),
            background_color: None,
            preview: false,
        }
    }
}

#[wasm_bindgen]
impl Options {
    #[wasm_bindgen(constructor)]
    #[inline]
    #[must_use]
    pub fn new() -> Self {
        Options::default()
    }

    #[inline]
    pub fn deserialize(val: &str) -> Result<Options, JsError> {
        let options = serde_json::from_str(val)?;
        Ok(options)
    }

    #[inline]
    pub fn serialize(&self) -> Result<String, JsError> {
        let json = serde_json::to_string(&self)?;
        Ok(json)
    }
}

impl Options {
    #[must_use]
    pub fn background_color(&self) -> types::Color {
        self.background_color.unwrap_or(if self.preview {
            types::Color::gray()
        } else {
            types::Color::white()
        })
    }
}