use crate::enums::{ApparentGender, ApparentRace, VisibleTrait};
use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct DemandCharacteristics {
age_years: u8,
apparent_gender: ApparentGender,
apparent_race: ApparentRace,
visible_traits: Vec<VisibleTrait>,
}
impl DemandCharacteristics {
#[must_use]
pub fn new(
age_years: u8,
apparent_gender: ApparentGender,
apparent_race: ApparentRace,
visible_traits: Vec<VisibleTrait>,
) -> Self {
DemandCharacteristics {
age_years,
apparent_gender,
apparent_race,
visible_traits,
}
}
#[must_use]
pub fn age_years(&self) -> u8 {
self.age_years
}
#[must_use]
pub fn apparent_gender(&self) -> ApparentGender {
self.apparent_gender
}
#[must_use]
pub fn apparent_race(&self) -> ApparentRace {
self.apparent_race
}
#[must_use]
pub fn visible_traits(&self) -> &[VisibleTrait] {
&self.visible_traits
}
}
impl Default for DemandCharacteristics {
fn default() -> Self {
DemandCharacteristics {
age_years: 0,
apparent_gender: ApparentGender::Unknown,
apparent_race: ApparentRace::Unknown,
visible_traits: Vec::new(),
}
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn demand_characteristics_accessors() {
let demand = DemandCharacteristics::new(
12,
ApparentGender::Female,
ApparentRace::Marginalized,
vec![VisibleTrait::StigmatizedAppearance],
);
assert_eq!(demand.age_years(), 12);
assert_eq!(demand.apparent_gender(), ApparentGender::Female);
assert_eq!(demand.apparent_race(), ApparentRace::Marginalized);
assert_eq!(demand.visible_traits(), &[VisibleTrait::StigmatizedAppearance]);
}
}