use partial_date::models::{self, ComponentOrder, Config, DateComponent};
fn main() {
println!("Example: Country-Based Config");
println!("============================\n");
let south_african_user_1 = User {
name: "Albie Sachs".to_string(),
date_input: "13/10/94".to_string(),
country: Country::SouthAfrica,
};
let south_african_user_2 = User {
name: "Robert Sobukwe".to_string(),
date_input: "02/06".to_string(),
country: Country::SouthAfrica,
};
let liberian_user = User {
name: "Leymah Gbowee".to_string(),
date_input: "02/12/24".to_string(),
country: Country::Liberia,
};
let liberian_user_2 = User {
name: "George Weah".to_string(),
date_input: "02/06".to_string(),
country: Country::Liberia,
};
let all_users = vec![
south_african_user_1,
south_african_user_2,
liberian_user,
liberian_user_2,
];
for user in all_users {
let config = user.country.get_config();
let input = models::Input {
utterance: user.date_input.clone(),
config: Some(config),
};
let result = partial_date::extract::extract(input);
println!(
"User: {} from {:?} input: '{}'",
user.name, user.country, user.date_input
);
println!(" Parsed Day: {:?}", result.day.value);
println!(" Parsed Month: {:?}", result.month.number);
println!(" Parsed Year: {:?}\n", result.year.value);
}
}
struct User {
name: String,
date_input: String,
country: Country,
}
#[derive(Debug)]
pub enum Country {
SouthAfrica,
Liberia,
}
impl Country {
pub fn get_config(&self) -> Config {
match self {
Country::SouthAfrica => Config {
component_order: ComponentOrder {
first: DateComponent::Day,
second: DateComponent::Month,
third: DateComponent::Year,
},
..Default::default()
},
Country::Liberia => Config {
component_order: ComponentOrder {
first: DateComponent::Month,
second: DateComponent::Day,
third: DateComponent::Year,
},
..Default::default()
},
}
}
}