// @generated by libremetaverse-codegen; DO NOT EDIT. // Regenerate: cargo run -p libremetaverse-codegen -- generate // Generator: foliage // Source: codegen/inputs/trees.xml sha256=f54e626b00bd2c4fec9f59a574a45860f209e4440bbb02b81d27050b9df8ffba license=CC-BY-SA-3.0 // Source: codegen/inputs/grass.xml sha256=90015f9768afe3cfee761d04239bf9e284b2739b095b7ab8331966fa1fbfcb4e license=CC-BY-SA-3.0 #![allow(clippy::missing_errors_doc, clippy::must_use_candidate, clippy::too_many_lines)] use std::sync::OnceLock; #[derive(Clone, Debug, PartialEq)] pub struct TreeDefinition { name: String, species_id: i32, texture_id: libremetaverse_types::UUID, droop: f32, twist: f32, branches: f32, depth: i32, scale_step: f32, trunk_depth: f32, branch_length: f32, trunk_length: f32, leaf_scale: f32, billboard_scale: f32, billboard_ratio: f32, trunk_aspect: f32, branch_aspect: f32, leaf_rotate: f32, noise_mag: f32, noise_scale: f32, taper: f32, repeat_z: i32, } impl TreeDefinition { pub fn name(&self) -> String { self.name.clone() } pub fn set_name(&mut self, value: String) { self.name = value; } pub fn species_id(&self) -> i32 { self.species_id } pub fn set_species_id(&mut self, value: i32) { self.species_id = value; } pub fn texture_id(&self) -> libremetaverse_types::UUID { self.texture_id } pub fn set_texture_id(&mut self, value: libremetaverse_types::UUID) { self.texture_id = value; } pub fn droop(&self) -> f32 { self.droop } pub fn set_droop(&mut self, value: f32) { self.droop = value; } pub fn twist(&self) -> f32 { self.twist } pub fn set_twist(&mut self, value: f32) { self.twist = value; } pub fn branches(&self) -> f32 { self.branches } pub fn set_branches(&mut self, value: f32) { self.branches = value; } pub fn scale_step(&self) -> f32 { self.scale_step } pub fn set_scale_step(&mut self, value: f32) { self.scale_step = value; } pub fn trunk_depth(&self) -> f32 { self.trunk_depth } pub fn set_trunk_depth(&mut self, value: f32) { self.trunk_depth = value; } pub fn branch_length(&self) -> f32 { self.branch_length } pub fn set_branch_length(&mut self, value: f32) { self.branch_length = value; } pub fn trunk_length(&self) -> f32 { self.trunk_length } pub fn set_trunk_length(&mut self, value: f32) { self.trunk_length = value; } pub fn leaf_scale(&self) -> f32 { self.leaf_scale } pub fn set_leaf_scale(&mut self, value: f32) { self.leaf_scale = value; } pub fn billboard_scale(&self) -> f32 { self.billboard_scale } pub fn set_billboard_scale(&mut self, value: f32) { self.billboard_scale = value; } pub fn billboard_ratio(&self) -> f32 { self.billboard_ratio } pub fn set_billboard_ratio(&mut self, value: f32) { self.billboard_ratio = value; } pub fn trunk_aspect(&self) -> f32 { self.trunk_aspect } pub fn set_trunk_aspect(&mut self, value: f32) { self.trunk_aspect = value; } pub fn branch_aspect(&self) -> f32 { self.branch_aspect } pub fn set_branch_aspect(&mut self, value: f32) { self.branch_aspect = value; } pub fn leaf_rotate(&self) -> f32 { self.leaf_rotate } pub fn set_leaf_rotate(&mut self, value: f32) { self.leaf_rotate = value; } pub fn noise_mag(&self) -> f32 { self.noise_mag } pub fn set_noise_mag(&mut self, value: f32) { self.noise_mag = value; } pub fn noise_scale(&self) -> f32 { self.noise_scale } pub fn set_noise_scale(&mut self, value: f32) { self.noise_scale = value; } pub fn taper(&self) -> f32 { self.taper } pub fn set_taper(&mut self, value: f32) { self.taper = value; } pub fn depth(&self) -> i32 { self.depth } pub fn set_depth(&mut self, value: i32) { self.depth = value; } pub fn repeat_z(&self) -> i32 { self.repeat_z } pub fn set_repeat_z(&mut self, value: i32) { self.repeat_z = value; } } fn generated_trees() -> &'static [TreeDefinition] { static TREES: OnceLock> = OnceLock::new(); TREES .get_or_init(|| { vec![ TreeDefinition { name : "Pine 1".to_owned(), species_id : 0, texture_id : libremetaverse_types::UUID::parse("0187babf-6c0d-5891-ebed-4ecab1426683" .to_owned()).expect("validated tree UUID"), droop : 60.0_f32, twist : 5.0_f32, branches : 5.0_f32, depth : 1, scale_step : 0.7_f32, trunk_depth : 6.0_f32, branch_length : 8.0_f32, trunk_length : 11.5_f32, leaf_scale : 22.0_f32, billboard_scale : 39.5_f32, billboard_ratio : 1.1_f32, trunk_aspect : 0.1_f32, branch_aspect : 0.05_f32, leaf_rotate : 20.0_f32, noise_mag : 0.5_f32, noise_scale : 2.5_f32, taper : 0.8_f32, repeat_z : 3 }, TreeDefinition { name : "Oak".to_owned(), species_id : 1, texture_id : libremetaverse_types::UUID::parse("8a515889-eac9-fb55-8eba-d2dc09eb32c8" .to_owned()).expect("validated tree UUID"), droop : 35.0_f32, twist : 3.0_f32, branches : 4.0_f32, depth : 3, scale_step : 0.7_f32, trunk_depth : 0.0_f32, branch_length : 3.0_f32, trunk_length : 3.8_f32, leaf_scale : 7.0_f32, billboard_scale : 10.25_f32, billboard_ratio : 1.0_f32, trunk_aspect : 0.15_f32, branch_aspect : 0.07_f32, leaf_rotate : 0.0_f32, noise_mag : 1.2_f32, noise_scale : 4.0_f32, taper : 0.3_f32, repeat_z : 4 }, TreeDefinition { name : "Tropical Bush 1".to_owned(), species_id : 2, texture_id : libremetaverse_types::UUID::parse("5bc11cd6-2f40-071e-a8da-0903394204f9" .to_owned()).expect("validated tree UUID"), droop : 10.0_f32, twist : 0.0_f32, branches : 6.0_f32, depth : 1, scale_step : 0.5_f32, trunk_depth : 1.0_f32, branch_length : 0.5_f32, trunk_length : 0.15_f32, leaf_scale : 7.5_f32, billboard_scale : 5.0_f32, billboard_ratio : 1.25_f32, trunk_aspect : 1.0_f32, branch_aspect : 0.08_f32, leaf_rotate : 0.0_f32, noise_mag : 1.0_f32, noise_scale : 1.0_f32, taper : 0.2_f32, repeat_z : 1 }, TreeDefinition { name : "Palm 1".to_owned(), species_id : 3, texture_id : libremetaverse_types::UUID::parse("ca4e8c27-473c-eb1c-2f5d-50ee3f07d85c" .to_owned()).expect("validated tree UUID"), droop : 0.0_f32, twist : 0.0_f32, branches : 3.0_f32, depth : 1, scale_step : 0.5_f32, trunk_depth : 0.0_f32, branch_length : 0.7_f32, trunk_length : 9.0_f32, leaf_scale : 10.0_f32, billboard_scale : 13.25_f32, billboard_ratio : 1.0_f32, trunk_aspect : 0.035_f32, branch_aspect : 0.03_f32, leaf_rotate : 0.0_f32, noise_mag : 0.2_f32, noise_scale : 6.0_f32, taper : 0.7_f32, repeat_z : 10 }, TreeDefinition { name : "Dogwood".to_owned(), species_id : 4, texture_id : libremetaverse_types::UUID::parse("64367bd1-697e-b3e6-0b65-3f862a577366" .to_owned()).expect("validated tree UUID"), droop : 30.0_f32, twist : 0.0_f32, branches : 3.0_f32, depth : 2, scale_step : 0.7_f32, trunk_depth : 1.0_f32, branch_length : 2.75_f32, trunk_length : 4.0_f32, leaf_scale : 5.5_f32, billboard_scale : 10.0_f32, billboard_ratio : 1.0_f32, trunk_aspect : 0.06_f32, branch_aspect : 0.05_f32, leaf_rotate : 0.0_f32, noise_mag : 1.5_f32, noise_scale : 2.0_f32, taper : 0.8_f32, repeat_z : 3 }, TreeDefinition { name : "Tropical Bush 2".to_owned(), species_id : 5, texture_id : libremetaverse_types::UUID::parse("cdd9a9fc-6d0b-f90d-8416-c72b6019bca8" .to_owned()).expect("validated tree UUID"), droop : 10.0_f32, twist : 0.0_f32, branches : 3.0_f32, depth : 1, scale_step : 0.5_f32, trunk_depth : 1.0_f32, branch_length : 0.5_f32, trunk_length : 0.15_f32, leaf_scale : 6.0_f32, billboard_scale : 4.5_f32, billboard_ratio : 0.9_f32, trunk_aspect : 1.0_f32, branch_aspect : 0.08_f32, leaf_rotate : 0.0_f32, noise_mag : 1.0_f32, noise_scale : 1.0_f32, taper : 0.2_f32, repeat_z : 1 }, TreeDefinition { name : "Palm 2".to_owned(), species_id : 6, texture_id : libremetaverse_types::UUID::parse("2d784476-d0db-9979-0cff-9408745a7cf3" .to_owned()).expect("validated tree UUID"), droop : 0.0_f32, twist : 0.0_f32, branches : 3.0_f32, depth : 1, scale_step : 0.5_f32, trunk_depth : 0.0_f32, branch_length : 0.7_f32, trunk_length : 10.0_f32, leaf_scale : 7.5_f32, billboard_scale : 13.5_f32, billboard_ratio : 1.0_f32, trunk_aspect : 0.035_f32, branch_aspect : 0.03_f32, leaf_rotate : 0.0_f32, noise_mag : 0.2_f32, noise_scale : 6.0_f32, taper : 0.6_f32, repeat_z : 12 }, TreeDefinition { name : "Cypress 1".to_owned(), species_id : 7, texture_id : libremetaverse_types::UUID::parse("fb2ae204-3fd1-df33-594f-c9f882830e66" .to_owned()).expect("validated tree UUID"), droop : 30.0_f32, twist : 0.0_f32, branches : 3.0_f32, depth : 4, scale_step : 0.5_f32, trunk_depth : 0.0_f32, branch_length : 10.0_f32, trunk_length : 10.0_f32, leaf_scale : 70.0_f32, billboard_scale : 22.5_f32, billboard_ratio : 1.0_f32, trunk_aspect : 0.05_f32, branch_aspect : 0.03_f32, leaf_rotate : 0.0_f32, noise_mag : 1.2_f32, noise_scale : 1.0_f32, taper : 0.5_f32, repeat_z : 6 }, TreeDefinition { name : "Cypress 2".to_owned(), species_id : 8, texture_id : libremetaverse_types::UUID::parse("30047cec-269d-408e-0c30-b2603b887268" .to_owned()).expect("validated tree UUID"), droop : 30.0_f32, twist : 0.0_f32, branches : 3.0_f32, depth : 4, scale_step : 0.6_f32, trunk_depth : 3.0_f32, branch_length : 7.5_f32, trunk_length : 10.0_f32, leaf_scale : 35.0_f32, billboard_scale : 25.0_f32, billboard_ratio : 0.8_f32, trunk_aspect : 0.05_f32, branch_aspect : 0.04_f32, leaf_rotate : 0.0_f32, noise_mag : 1.2_f32, noise_scale : 1.0_f32, taper : 0.5_f32, repeat_z : 5 }, TreeDefinition { name : "Pine 2".to_owned(), species_id : 9, texture_id : libremetaverse_types::UUID::parse("d691a01c-13b7-578d-57c0-5caef0b4e7e1" .to_owned()).expect("validated tree UUID"), droop : 50.0_f32, twist : 7.5_f32, branches : 4.0_f32, depth : 2, scale_step : 0.7_f32, trunk_depth : 6.0_f32, branch_length : 6.0_f32, trunk_length : 10.0_f32, leaf_scale : 15.5_f32, billboard_scale : 33.0_f32, billboard_ratio : 1.35_f32, trunk_aspect : 0.1_f32, branch_aspect : 0.08_f32, leaf_rotate : 5.0_f32, noise_mag : 0.5_f32, noise_scale : 2.5_f32, taper : 0.7_f32, repeat_z : 3 }, TreeDefinition { name : "Plumeria".to_owned(), species_id : 10, texture_id : libremetaverse_types::UUID::parse("6de37e4e-7029-61f5-54b8-f5e63f983f58" .to_owned()).expect("validated tree UUID"), droop : 8.0_f32, twist : 7.0_f32, branches : 3.0_f32, depth : 2, scale_step : 0.6_f32, trunk_depth : 0.0_f32, branch_length : 3.0_f32, trunk_length : 0.1_f32, leaf_scale : 20.0_f32, billboard_scale : 10.0_f32, billboard_ratio : 1.35_f32, trunk_aspect : 0.1_f32, branch_aspect : 0.075_f32, leaf_rotate : 0.0_f32, noise_mag : 0.0_f32, noise_scale : 0.0_f32, taper : 0.85_f32, repeat_z : 2 }, TreeDefinition { name : "Winter Pine 1".to_owned(), species_id : 11, texture_id : libremetaverse_types::UUID::parse("10d2a01a-0818-84b9-4b96-c2eb63256519" .to_owned()).expect("validated tree UUID"), droop : 90.0_f32, twist : 2.5_f32, branches : 6.0_f32, depth : 1, scale_step : 0.66_f32, trunk_depth : 8.0_f32, branch_length : 0.0_f32, trunk_length : 4.0_f32, leaf_scale : 6.75_f32, billboard_scale : 12.5_f32, billboard_ratio : 0.6_f32, trunk_aspect : 0.1_f32, branch_aspect : 0.05_f32, leaf_rotate : 0.0_f32, noise_mag : 0.0_f32, noise_scale : 2.5_f32, taper : 0.85_f32, repeat_z : 2 }, TreeDefinition { name : "Winter Aspen".to_owned(), species_id : 12, texture_id : libremetaverse_types::UUID::parse("7c0cf89b-44b1-1ce2-dd74-07102a98ac2a" .to_owned()).expect("validated tree UUID"), droop : 85.0_f32, twist : 3.0_f32, branches : 5.0_f32, depth : 1, scale_step : 0.6_f32, trunk_depth : 8.0_f32, branch_length : 3.0_f32, trunk_length : 4.5_f32, leaf_scale : 8.0_f32, billboard_scale : 12.0_f32, billboard_ratio : 0.675_f32, trunk_aspect : 0.06_f32, branch_aspect : 0.05_f32, leaf_rotate : 0.0_f32, noise_mag : 0.75_f32, noise_scale : 2.5_f32, taper : 0.8_f32, repeat_z : 2 }, TreeDefinition { name : "Winter Pine 2".to_owned(), species_id : 13, texture_id : libremetaverse_types::UUID::parse("67931331-0c02-4876-1255-28770896c6a2" .to_owned()).expect("validated tree UUID"), droop : 140.0_f32, twist : 5.0_f32, branches : 6.0_f32, depth : 1, scale_step : 0.6_f32, trunk_depth : 7.0_f32, branch_length : 0.0_f32, trunk_length : 3.0_f32, leaf_scale : 5.0_f32, billboard_scale : 7.5_f32, billboard_ratio : 0.5_f32, trunk_aspect : 0.1_f32, branch_aspect : 0.05_f32, leaf_rotate : 0.0_f32, noise_mag : 0.75_f32, noise_scale : 2.5_f32, taper : 0.5_f32, repeat_z : 2 }, TreeDefinition { name : "Eucalyptus".to_owned(), species_id : 14, texture_id : libremetaverse_types::UUID::parse("a6162133-724b-54df-a12f-51cd070ad6f3" .to_owned()).expect("validated tree UUID"), droop : 20.0_f32, twist : 5.0_f32, branches : 3.6_f32, depth : 4, scale_step : 0.6_f32, trunk_depth : 0.0_f32, branch_length : 12.0_f32, trunk_length : 8.0_f32, leaf_scale : 33.0_f32, billboard_scale : 24.0_f32, billboard_ratio : 1.3_f32, trunk_aspect : 0.15_f32, branch_aspect : 0.08_f32, leaf_rotate : 0.0_f32, noise_mag : 0.0_f32, noise_scale : 0.0_f32, taper : 0.675_f32, repeat_z : 3 }, TreeDefinition { name : "Fern".to_owned(), species_id : 15, texture_id : libremetaverse_types::UUID::parse("8872f2b8-31db-42d8-580a-b3e4a91262de" .to_owned()).expect("validated tree UUID"), droop : 12.0_f32, twist : 0.0_f32, branches : 7.0_f32, depth : 1, scale_step : 0.5_f32, trunk_depth : 0.1_f32, branch_length : 0.01_f32, trunk_length : 0.0_f32, leaf_scale : 4.0_f32, billboard_scale : 3.5_f32, billboard_ratio : 0.85_f32, trunk_aspect : 1.0_f32, branch_aspect : 0.08_f32, leaf_rotate : 0.0_f32, noise_mag : 1.0_f32, noise_scale : 1.0_f32, taper : 0.2_f32, repeat_z : 1 }, TreeDefinition { name : "Eelgrass".to_owned(), species_id : 16, texture_id : libremetaverse_types::UUID::parse("96b4de31-f4fa-337d-ec78-451e3609769e" .to_owned()).expect("validated tree UUID"), droop : 0.0_f32, twist : 0.0_f32, branches : 5.0_f32, depth : 1, scale_step : 0.5_f32, trunk_depth : 1.0_f32, branch_length : 0.5_f32, trunk_length : 0.15_f32, leaf_scale : 5.0_f32, billboard_scale : 3.0_f32, billboard_ratio : 1.0_f32, trunk_aspect : 1.0_f32, branch_aspect : 0.08_f32, leaf_rotate : 0.0_f32, noise_mag : 1.0_f32, noise_scale : 1.0_f32, taper : 0.2_f32, repeat_z : 1 }, TreeDefinition { name : "Sea Sword".to_owned(), species_id : 17, texture_id : libremetaverse_types::UUID::parse("5894e2e7-ab8d-edfa-e61c-18cf16854ba3" .to_owned()).expect("validated tree UUID"), droop : 0.0_f32, twist : 0.0_f32, branches : 6.0_f32, depth : 1, scale_step : 0.7_f32, trunk_depth : 1.0_f32, branch_length : 0.0_f32, trunk_length : 0.0_f32, leaf_scale : 2.0_f32, billboard_scale : 2.0_f32, billboard_ratio : 1.0_f32, trunk_aspect : 1.0_f32, branch_aspect : 1.0_f32, leaf_rotate : 0.0_f32, noise_mag : 0.5_f32, noise_scale : 0.0_f32, taper : 0.0_f32, repeat_z : 1 }, TreeDefinition { name : "Kelp 1".to_owned(), species_id : 18, texture_id : libremetaverse_types::UUID::parse("2caf1179-7861-6ff3-4b7d-46e17780bdfa" .to_owned()).expect("validated tree UUID"), droop : - 15.0_f32, twist : 0.0_f32, branches : 1.0_f32, depth : 1, scale_step : 1.0_f32, trunk_depth : 3.0_f32, branch_length : 2.5_f32, trunk_length : 0.75_f32, leaf_scale : 1.85_f32, billboard_scale : 4.9_f32, billboard_ratio : 1.0_f32, trunk_aspect : 0.04_f32, branch_aspect : 0.05_f32, leaf_rotate : 0.0_f32, noise_mag : 1.0_f32, noise_scale : 2.0_f32, taper : 0.8_f32, repeat_z : 2 }, TreeDefinition { name : "Beach Grass 1".to_owned(), species_id : 19, texture_id : libremetaverse_types::UUID::parse("18fb888b-e8f1-dce7-7da7-321d651ea6b0" .to_owned()).expect("validated tree UUID"), droop : 0.0_f32, twist : 0.0_f32, branches : 4.0_f32, depth : 1, scale_step : 0.7_f32, trunk_depth : 1.0_f32, branch_length : 0.0_f32, trunk_length : 0.0_f32, leaf_scale : 4.0_f32, billboard_scale : 2.5_f32, billboard_ratio : 1.2_f32, trunk_aspect : 1.0_f32, branch_aspect : 1.0_f32, leaf_rotate : 0.0_f32, noise_mag : 0.5_f32, noise_scale : 0.0_f32, taper : 0.0_f32, repeat_z : 1 }, TreeDefinition { name : "Kelp 2".to_owned(), species_id : 20, texture_id : libremetaverse_types::UUID::parse("2a4880b6-b7a3-690a-2049-bfbe38eafb9f" .to_owned()).expect("validated tree UUID"), droop : - 15.0_f32, twist : 0.0_f32, branches : 1.0_f32, depth : 1, scale_step : 1.0_f32, trunk_depth : 3.0_f32, branch_length : 2.5_f32, trunk_length : 1.35_f32, leaf_scale : 2.0_f32, billboard_scale : 4.9_f32, billboard_ratio : 1.0_f32, trunk_aspect : 0.025_f32, branch_aspect : 0.05_f32, leaf_rotate : 0.0_f32, noise_mag : 1.0_f32, noise_scale : 2.0_f32, taper : 0.8_f32, repeat_z : 2 }, ] }) .as_slice() } pub struct TreeDefinitions; impl TreeDefinitions { pub fn all() -> Vec { generated_trees().to_vec() } pub fn get(species: crate::Tree) -> Result { generated_trees().get(species as usize).cloned().ok_or(crate::Error::Argument) } } #[derive(Clone, Debug, PartialEq)] pub struct GrassDefinition { name: String, species_id: i32, texture_id: libremetaverse_types::UUID, blade_size_x: f32, blade_size_y: f32, } impl GrassDefinition { pub fn name(&self) -> String { self.name.clone() } pub fn set_name(&mut self, value: String) { self.name = value; } pub fn species_id(&self) -> i32 { self.species_id } pub fn set_species_id(&mut self, value: i32) { self.species_id = value; } pub fn texture_id(&self) -> libremetaverse_types::UUID { self.texture_id } pub fn set_texture_id(&mut self, value: libremetaverse_types::UUID) { self.texture_id = value; } pub fn blade_size_x(&self) -> f32 { self.blade_size_x } pub fn set_blade_size_x(&mut self, value: f32) { self.blade_size_x = value; } pub fn blade_size_y(&self) -> f32 { self.blade_size_y } pub fn set_blade_size_y(&mut self, value: f32) { self.blade_size_y = value; } } fn generated_grasses() -> &'static [GrassDefinition] { static GRASSES: OnceLock> = OnceLock::new(); GRASSES .get_or_init(|| { vec![ GrassDefinition { name : "Grass 0".to_owned(), species_id : 0, texture_id : libremetaverse_types::UUID::parse("6c4727b8-ac79-ba44-3b81-f9aa887b47eb" .to_owned()).expect("validated grass UUID"), blade_size_x : 1.35_f32, blade_size_y : 1.35_f32 }, GrassDefinition { name : "Grass 1".to_owned(), species_id : 1, texture_id : libremetaverse_types::UUID::parse("79504bf5-c3ec-0763-6563-d843de66d0a1" .to_owned()).expect("validated grass UUID"), blade_size_x : 1.0_f32, blade_size_y : 0.66_f32 }, GrassDefinition { name : "Grass 2".to_owned(), species_id : 2, texture_id : libremetaverse_types::UUID::parse("6c4727b8-ac79-ba44-3b81-f9aa887b47eb" .to_owned()).expect("validated grass UUID"), blade_size_x : 1.8_f32, blade_size_y : 1.8_f32 }, GrassDefinition { name : "Grass 3".to_owned(), species_id : 3, texture_id : libremetaverse_types::UUID::parse("99bd60a2-3250-efc9-2e39-2fbcadefbecc" .to_owned()).expect("validated grass UUID"), blade_size_x : 1.0_f32, blade_size_y : 1.0_f32 }, GrassDefinition { name : "Grass 4".to_owned(), species_id : 4, texture_id : libremetaverse_types::UUID::parse("7a2b3a4a-53c2-53ac-5716-aac7d743c020" .to_owned()).expect("validated grass UUID"), blade_size_x : 2.25_f32, blade_size_y : 2.25_f32 }, GrassDefinition { name : "undergrowth_1" .to_owned(), species_id : 5, texture_id : libremetaverse_types::UUID::parse("8f458549-173b-23ff-d4ff-bfaa5ea2371b" .to_owned()).expect("validated grass UUID"), blade_size_x : 2.0_f32, blade_size_y : 2.0_f32 }, ] }) .as_slice() } pub struct GrassDefinitions; impl GrassDefinitions { pub fn all() -> Vec { generated_grasses().to_vec() } pub fn get(species: crate::Grass) -> Result { grass_by_id(species as u8) } } pub(crate) fn grass_by_id(species: u8) -> Result { generated_grasses().get(usize::from(species)).cloned().ok_or(crate::Error::Argument) } #[cfg(test)] mod tests { use super::*; #[test] fn golden_foliage_shape_and_values() { let trees = TreeDefinitions::all(); assert_eq!(trees.len(), 21); assert_eq!(trees[0].name(), "Pine 1"); assert_eq!(trees[0].species_id(), crate ::Tree::Pine1 as i32); assert_eq!(trees[20].name(), "Kelp 2"); assert_eq!(TreeDefinitions::get(crate ::Tree::Oak).unwrap(), trees[1]); let grass = GrassDefinitions::all(); assert_eq!(grass.len(), 6); assert_eq!(grass[5].name(), "undergrowth_1"); assert_eq!( GrassDefinitions::get(crate ::Grass::Undergrowth1).unwrap(), grass[5] ); } }