use chrono::NaiveDate;
use serde::{Deserialize, Serialize};
use uuid::Uuid;
const VALID_STATES: &[&str] = &[
"AL", "AK", "AZ", "AR", "CA", "CO", "CT", "DE", "FL", "GA",
"HI", "ID", "IL", "IN", "IA", "KS", "KY", "LA", "ME", "MD",
"MA", "MI", "MN", "MS", "MO", "MT", "NE", "NV", "NH", "NJ",
"NM", "NY", "NC", "ND", "OH", "OK", "OR", "PA", "RI", "SC",
"SD", "TN", "TX", "UT", "VT", "VA", "WA", "WV", "WI", "WY",
"DC", "PR", "VI", "GU", "AS", "MP",
];
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
pub enum GovernmentLevel {
Federal,
State,
County,
Municipal,
SpecialDistrict,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
pub enum Branch {
Executive,
Legislative,
Judicial,
}
#[derive(Debug, Deserialize, Serialize)]
#[cfg_attr(feature = "postgres", derive(sqlx::FromRow))]
pub struct Official {
pub birth: Option<NaiveDate>,
pub first_name: String,
pub id: Uuid,
pub last_name: String,
pub middle_name: Option<String>,
}
impl Official {
pub fn get_full_name(&self) -> String {
let middle_name_string = match &self.middle_name {
Some(name) => {
format!("{0} ", name)
},
None => String::from(""),
};
format!("{0} {1}{2}",
self.first_name,
middle_name_string,
self.last_name
)
}
pub fn new(first_name: &str, last_name: &str) -> Self {
Official {
birth: None,
first_name: String::from(first_name),
id: Uuid::new_v4(),
last_name: String::from(last_name),
middle_name: None,
}
} }
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_official_get_full_name() {
let official = Official {
birth: Some(NaiveDate::from_ymd_opt(1997, 8, 6).unwrap()),
first_name: String::from("Austin"),
id: Uuid::new_v4(),
last_name: String::from("Farrell"),
middle_name: Some(String::from("Michael")),
};
assert_eq!(official.get_full_name(), String::from("Austin Michael Farrell"));
let official = Official {
birth: Some(NaiveDate::from_ymd_opt(1997, 8, 6).unwrap()),
first_name: String::from("Austin"),
id: Uuid::new_v4(),
last_name: String::from("Farrell"),
middle_name: None,
};
assert_eq!(official.get_full_name(), String::from("Austin Farrell"));
} }