observation-tools 0.0.12

Export, visualize, and inspect data from anywhere in your program
Documentation
use crate::artifacts::NumberBuilder;
use crate::artifacts::Point2Builder;
use crate::artifacts::Vector2Builder;
use crate::generated::Transform2;
use crate::generated::TRS2;
use wasm_bindgen::prelude::*;

#[wasm_bindgen]
#[derive(Debug, Clone)]
pub struct Transform2Builder {
    pub(crate) proto: Transform2,
}

#[wasm_bindgen]
impl Transform2Builder {
    pub fn identity() -> Transform2Builder {
        let mut proto = Transform2::new();
        proto.set_identity(true);
        Transform2Builder { proto }
    }

    pub fn trs(
        translation: &Point2Builder,
        rotation: &NumberBuilder,
        scale: &Vector2Builder,
    ) -> Transform2Builder {
        let mut trs = TRS2::new();
        trs.translation = Some(translation.proto.clone()).into();
        trs.rotation = Some(rotation.proto.clone()).into();
        trs.scale = Some(scale.proto.clone()).into();
        let mut proto = Transform2::new();
        *proto.mut_trs() = trs;
        Transform2Builder { proto }
    }
}

impl Transform2Builder {
    pub fn translation<T: Into<Point2Builder>>(translation: T) -> Transform2Builder {
        let mut trs = TRS2::new();
        trs.translation = Some(translation.into().proto).into();
        let mut proto = Transform2::new();
        *proto.mut_trs() = trs;
        Transform2Builder { proto }
    }

    pub fn scale<S: Into<Vector2Builder>>(scale: S) -> Transform2Builder {
        let mut trs = TRS2::new();
        trs.scale = Some(scale.into().proto).into();
        let mut proto = Transform2::new();
        *proto.mut_trs() = trs;
        Transform2Builder { proto }
    }

    pub fn from_trs<T: Into<Point2Builder>, R: Into<NumberBuilder>, S: Into<Vector2Builder>>(
        translation: T,
        rotation: R,
        scale: S,
    ) -> Transform2Builder {
        Transform2Builder::trs(&translation.into(), &rotation.into(), &scale.into())
    }
}