l3d_rs 0.2.3

L3D (Luminaire 3D) file parser for Rust - parse 3D luminaire geometry with transformation matrices, designed for WASM/WebGL rendering
Documentation
// src/geometry.rs

use super::lightemitting::{LightEmittingObjects, LightEmittingSurfaces};
use super::structure::{Joints, Vec3f};
use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Deserialize, Serialize)]
#[serde(rename_all = "PascalCase")]
pub struct GeometryDefinitions {
    pub geometry_file_definition: Vec<GeometryFileDefinition>,
}

#[derive(Debug, Clone, Deserialize, Serialize)]
pub struct GeometryFileDefinition {
    #[serde(rename = "@id")]
    pub id: String,
    #[serde(rename = "@filename")]
    pub filename: String,
    #[serde(rename = "@units")]
    pub units: String,
}

#[derive(Debug, Clone, Deserialize, Serialize)]
#[serde(rename_all = "PascalCase")]
pub struct Geometry {
    #[serde(rename = "@partName")]
    pub part_name: String,
    pub position: Vec3f,
    pub rotation: Vec3f,
    pub geometry_reference: GeometryReference,
    pub joints: Option<Joints>,
    pub light_emitting_objects: Option<LightEmittingObjects>,
    pub light_emitting_surfaces: Option<LightEmittingSurfaces>,
}

#[derive(Debug, Clone, Deserialize, Serialize)]
pub struct GeometryReference {
    #[serde(rename = "@geometryId")]
    pub geometry_id: String,
}

#[derive(Debug, Clone, Deserialize, Serialize)]
pub struct Geometries {
    #[serde(rename = "Geometry")]
    pub geometry: Vec<Geometry>,
}