rcgal 0.2.2

Rust Computational Geometry Algorithms Library.
Documentation
use crate::{
    kernel::util_enum::Segment2Type,
    wasm::kernel::{
        arc_segment_2::ArcSegment2, circle_segment_2::CircleSegment2, line_segment_2::LineSegment2,
    },
};

use wasm_bindgen::prelude::*;

#[wasm_bindgen]
pub struct Segment2 {
    pub segment_type: Segment2Type,
    pub line_segment_2: Option<LineSegment2>,
    pub circle_segment_2: Option<CircleSegment2>,
    pub arc_segment_2: Option<ArcSegment2>,
}

pub enum Segment2Value {
    LineSegment2(LineSegment2),
    CircleSegment2(CircleSegment2),
    ArcSegment2(ArcSegment2),
}

#[wasm_bindgen]
impl Segment2 {
    #[wasm_bindgen(constructor)]
    pub fn new(
        segment_type: Segment2Type,
        line_segment_2: Option<LineSegment2>,
        circle_segment_2: Option<CircleSegment2>,
        arc_segment_2: Option<ArcSegment2>,
    ) -> Segment2 {
        Segment2 {
            segment_type,
            line_segment_2,
            circle_segment_2,
            arc_segment_2,
        }
    }
}

pub fn get_segment_value(segment: &Segment2) -> Segment2Value {
    match segment.segment_type {
        Segment2Type::LineSegment2 => Segment2Value::LineSegment2(segment.line_segment_2.unwrap()),
        Segment2Type::CircleSegment2 => {
            Segment2Value::CircleSegment2(segment.circle_segment_2.unwrap())
        }
        Segment2Type::ArcSegment2 => Segment2Value::ArcSegment2(segment.arc_segment_2.unwrap()),
    }
}