Skip to main content

use_ecology/
lib.rs

1#![forbid(unsafe_code)]
2#![doc = include_str!("../README.md")]
3
4pub use use_biodiversity as biodiversity;
5pub use use_biome as biome;
6pub use use_community as community;
7pub use use_conservation_status as conservation_status;
8pub use use_ecosystem as ecosystem;
9pub use use_food_web as food_web;
10pub use use_habitat as habitat;
11pub use use_niche as niche;
12pub use use_population as population;
13pub use use_species_interaction as species_interaction;
14pub use use_trophic_level as trophic_level;
15
16/// Common primitive ecology vocabulary reexports.
17pub mod prelude {
18    pub use use_biodiversity::{
19        BiodiversityMeasure, BiodiversityValueError, DiversityIndex, DiversityIndexKind,
20        DiversityIndexKindParseError, SpeciesRichness,
21    };
22    pub use use_biome::{BiomeClimate, BiomeKind, BiomeKindParseError, BiomeName, BiomeTextError};
23    pub use use_community::{
24        CommunityComposition, CommunityKind, CommunityKindParseError, CommunityName, CommunityRole,
25        CommunityRoleParseError, CommunityTextError,
26    };
27    pub use use_conservation_status::{
28        ConservationStatus, ConservationStatusParseError, ConservationStatusSystem,
29        ConservationTextError, ProtectionStatus, ThreatKind, ThreatKindParseError,
30    };
31    pub use use_ecosystem::{
32        EcosystemComponent, EcosystemKind, EcosystemKindParseError, EcosystemName, EcosystemScale,
33        EcosystemScaleParseError, EcosystemTextError,
34    };
35    pub use use_food_web::{
36        EnergyFlowDirection, EnergyFlowDirectionParseError, FeedingRelation,
37        FeedingRelationParseError, FoodWebLink, FoodWebName, FoodWebTextError,
38    };
39    pub use use_habitat::{
40        HabitatCondition, HabitatConditionParseError, HabitatFeature, HabitatKind,
41        HabitatKindParseError, HabitatName, HabitatTextError,
42    };
43    pub use use_niche::{
44        NicheBreadth, NicheKind, NicheKindParseError, NicheName, NicheTextError, NicheValueError,
45        ResourceUse,
46    };
47    pub use use_population::{
48        PopulationDensity, PopulationId, PopulationName, PopulationSize, PopulationTextError,
49        PopulationTrend, PopulationTrendParseError, PopulationValueError,
50    };
51    pub use use_species_interaction::{
52        InteractionStrength, InteractionStrengthParseError, InteractionTextError,
53        SpeciesInteraction, SpeciesInteractionKind, SpeciesInteractionKindParseError,
54    };
55    pub use use_trophic_level::{
56        TrophicLevel, TrophicLevelParseError, TrophicPosition, TrophicRole, TrophicTextError,
57        TrophicValueError,
58    };
59}
60
61#[cfg(test)]
62mod tests {
63    use super::prelude::{
64        BiodiversityMeasure, BiomeKind, CommunityRole, ConservationStatus, EcosystemKind,
65        FeedingRelation, FoodWebLink, HabitatKind, NicheKind, PopulationSize, SpeciesInteraction,
66        SpeciesInteractionKind, SpeciesRichness, TrophicLevel,
67    };
68
69    #[test]
70    fn facade_composes_ecology_primitives_without_simulation() {
71        let ecosystem = EcosystemKind::Marine;
72        let habitat = HabitatKind::Reef;
73        let population = PopulationSize::new(150).expect("non-negative population");
74        let role = CommunityRole::Keystone;
75        let niche = NicheKind::Trophic;
76        let biome = BiomeKind::Marine;
77        let link = FoodWebLink::new("zooplankton", "anchovy", FeedingRelation::Consumes)
78            .expect("valid food-web link");
79        let interaction =
80            SpeciesInteraction::new("coral", "algae", SpeciesInteractionKind::Mutualism)
81                .expect("valid species interaction");
82        let trophic = TrophicLevel::PrimaryConsumer;
83        let richness = SpeciesRichness::new(128).expect("non-negative richness");
84        let biodiversity = BiodiversityMeasure::SpeciesRichness(richness);
85        let status = ConservationStatus::Vulnerable;
86
87        assert_eq!(ecosystem.to_string(), "marine");
88        assert_eq!(habitat.to_string(), "reef");
89        assert_eq!(population.get(), 150);
90        assert_eq!(role.to_string(), "keystone");
91        assert_eq!(niche.to_string(), "trophic");
92        assert_eq!(biome.to_string(), "marine");
93        assert_eq!(link.to_string(), "zooplankton -[consumes]-> anchovy");
94        assert_eq!(interaction.to_string(), "coral -[mutualism]-> algae");
95        assert_eq!(trophic.to_string(), "primary-consumer");
96        assert_eq!(biodiversity.to_string(), "species-richness: 128");
97        assert_eq!(status.to_string(), "vulnerable");
98    }
99}