#[derive(Clone, Debug)]
pub struct Region {
name: String,
code: String,
}
impl Region {
pub fn new(name: impl Into<String>, code: impl Into<String>) -> Self {
Region {
name: name.into(),
code: code.into(),
}
}
pub fn eu() -> Self {
Region::new("EU", "EU")
}
pub fn uk() -> Self {
Region::new("UK", "UK")
}
pub fn name(&self) -> &str {
&self.name
}
pub fn code(&self) -> &str {
&self.code
}
}
impl PartialEq for Region {
fn eq(&self, other: &Region) -> bool {
self.name == other.name
}
}
impl Eq for Region {}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn uk_fields_match_quantlib() {
let uk = Region::uk();
assert_eq!(uk.name(), "UK");
assert_eq!(uk.code(), "UK");
}
#[test]
fn eu_fields_match_quantlib() {
let eu = Region::eu();
assert_eq!(eu.name(), "EU");
assert_eq!(eu.code(), "EU");
}
#[test]
fn accessors_round_trip_construction() {
let france = Region::new("France", "FR");
assert_eq!(france.name(), "France");
assert_eq!(france.code(), "FR");
}
#[test]
fn equality_is_by_name() {
assert_eq!(Region::uk(), Region::uk());
assert_ne!(Region::uk(), Region::eu());
let same_name_other_code = Region::new("UK", "GB");
assert_eq!(Region::uk(), same_name_other_code);
}
}