use serde::{Deserialize, Serialize};
use crate::primitive::PrimitiveShape;
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
#[serde(rename_all = "snake_case")]
pub enum RuntimeMesh {
Primitive(PrimitiveShape),
Glb,
}
pub const MESH_GLB_EXTENSION: &str = "glb";
pub fn mesh_glb_filename(asset_id: crate::AssetId) -> String {
format!("{}.{}", asset_id.0, MESH_GLB_EXTENSION)
}
#[cfg(test)]
mod tests {
use super::*;
use crate::AssetId;
#[test]
fn runtime_mesh_round_trips() {
let prim = RuntimeMesh::Primitive(PrimitiveShape::Sphere {
radius: 0.5,
segments_long: 16,
segments_lat: 12,
});
for rm in [prim, RuntimeMesh::Glb] {
let json = serde_json::to_string(&rm).unwrap();
assert_eq!(serde_json::from_str::<RuntimeMesh>(&json).unwrap(), rm);
}
}
#[test]
fn glb_filename_uses_id() {
let id = AssetId::new();
assert_eq!(mesh_glb_filename(id), format!("{}.glb", id.0));
}
}