From 0609d03a278dc8fe94bb04bc395977486c93d78a Mon Sep 17 00:00:00 2001 From: Jaken Herman Date: Tue, 21 Jan 2025 11:47:50 +0000 Subject: [PATCH] Added `HorseBreed` --- Cargo.lock | 2 +- Cargo.toml | 2 +- README.md | 9 +- src/horse.rs | 556 +++++++++++++++++++++++++++++++++++++++++++++++++++ src/lib.rs | 1 + 5 files changed, 566 insertions(+), 4 deletions(-) create mode 100644 src/horse.rs diff --git a/Cargo.lock b/Cargo.lock index b61f770..3d0feec 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -29,7 +29,7 @@ checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" [[package]] name = "livestock-rs" -version = "0.8.0" +version = "0.9.0" dependencies = [ "Inflector", "serde", diff --git a/Cargo.toml b/Cargo.toml index 478295a..2e34b2e 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "livestock-rs" -version = "0.8.0" +version = "0.9.0" edition = "2021" authors = ["Jaken Herman "] license = "MIT" diff --git a/README.md b/README.md index 701b51d..29701f9 100644 --- a/README.md +++ b/README.md @@ -5,7 +5,7 @@ A comprehensive library for managing, identifying, and working with livestock breeds. Designed to support farming and ranching applications, breed registries, and livestock data processing. Features - - 🌱 Support for over 600+ livestock breeds, categorized by species. + - 🌱 Support for over 1,000+ livestock breeds, categorized by species. - 🐄 Includes common cattle breeds like Angus and Brahman. - 🐐 Includes common goat breeds like Alpine and Boer. - 🐑 Includes common sheep breeds like Dorper and St. Croix. @@ -14,6 +14,7 @@ Features - 🦌 Includes common reindeer breeds like Even and Nentsi. - 🐪 Includes common camel breeds like Afar Dromedary and Somali Dromedary. - 🐓 Includes common chicken breeds like Orpington and Rhode Island Red. + - 🐎 Includes common horse breeds like Quarter, Racking, and Appaloosa horses. - 🛠️ Utilities for converting between enum variants and human-readable strings. - 🔒 Serde support for serialization and deserialization. @@ -22,7 +23,7 @@ Add the crate to your `Cargo.toml`: ``` [dependencies] -livestock_rs = "0.8.0" +livestock_rs = "0.9.0" ``` or @@ -69,6 +70,10 @@ println!("{:?}", breed); // prints "Canindé" - Features a wide variety of chicken breeds including popular types like Rhode Island Red, Orpington, and Leghorn. - Regional specialties, including AC, Turken (Naked Neck), Yokohama, and more. +## Horse Breeds +- Features common varieties like Quarter, Racking, and Appaloosa horses. +- Regional specialties, including Schwarzwälder Fuchs, Akhal-Teke, and more. + ## Roadmap - 🗂️ Expand support for other livestock species (e.g., chickens, ducks, geese). - 🌍 Localization support for breed names in multiple languages. diff --git a/src/horse.rs b/src/horse.rs new file mode 100644 index 0000000..36b03e6 --- /dev/null +++ b/src/horse.rs @@ -0,0 +1,556 @@ +use inflector::Inflector; +use serde::{Deserialize, Serialize}; +use std::str::FromStr; + +/// An enum representing the different breeds of,. +/// +/// Initial data from: +/// +/// # Examples +/// ``` rust +/// use livestock_rs::horse::HorseBreed; +/// +/// let breed = HorseBreed::Racking; +/// println!("{:?}", breed); +/// ``` +#[derive(Debug, Deserialize, Eq, PartialEq, Serialize)] +pub enum HorseBreed { + Abyssinian, + AkhalTeke, + Albanian, + Altai, + AmericanCreamDraft, + AmericanCremeandWhite, + AmericanWalking, + Andalusian, + Andravida, + AngloKabarda, + Appaloosa, + Araappaloosa, + Arabian, + Ardennes, + ArgentineCriollo, + Asturian, + AustralianBrumby, + AustralianStock, + Azteca, + Balearic, + Baluchi, + Banker, + Banei, + Barb, + Bashkir, + BashkirCurly, + Basotho, + Belgian, + Bhirum, + Bhotia, + Boer, + BosnianMountain, + Breton, + Buckskin, + Budyonny, + ByelorussianHarness, + Camargue, + Campolina, + Canadian, + Carthusian, + Caspian, + CayuseIndian, + Cheju, + ChileanCorralero, + Chincoteague, + ClevelandBay, + Clydesdale, + ColoradoRanger, + Connemara, + Criollo, // (Uruguay) + Crioulo, + Dales, + Danube, + Dartmoor, + Deliboz, + Djerma, + Dole, + Dongola, + Dulmen, + DutchDraft, + DutchWarmblood, + EastBulgarian, + Egyptian, + Eriskay, + EstonianNative, + Exmoor, + Faeroes, + Falabella, + Fell, + Finnhorses, + Fleuve, + FloridaCracker, + Fouta, + Frederiksborg, + FrenchSaddlebred, + FrenchTrotter, + Friesian, + Galiceno, + Galician, + Gelderlander, + Gidran, + GoldenAmericaSaddlebred, + Gotland, + Groningen, + Guangxi, + Hackney, + Haflinger, + Hanoverian, + Hequ, + Highland, + Hokkaido, + Hucul, + HungarianWarmblood, + Icelandic, + Iomud, + IrishDraught, + Jinzhou, + Jutland, + Kabarda, + Karabair, + Karabakh, + Kazakh, + KerryBog, + KigerMustang, + Kirdi, + KisberFelver, + Kiso, + Kladruby, + Knabstrup, + Kushum, + Kustanai, + Latvian, + LithuanianHeavyDraft, + Lipizzan, + Lokai, + Losino, + Lusitano, + Malopolski, + Mangalarga, + Marwari, + MBayar, + Merens, + Messara, + Miniature, + Misaki, + MissouriFoxTrotting, + Miyako, + Mongolian, + Morab, + Morgan, + Moyle, + Mustang, + Murgese, + NationalShow, + NewForest, + NewKirgiz, + Newfoundland, + Nokota, + Noma, + Nooitgedacht, + Noric, + Nordland, + NortheasternCrioulo, + NorthSwedish, + NorwegianFjord, + Ob, + Oldenburg, + OrlovTrotter, + Paint, + Palomino, + PantaneiroCrioulo, + PasoFino, + Percheron, + PeruvianPaso, + Pindos, + Pinia, + Pintabian, + Pinto, + PolishKonik, + PonyOfTheAmericas, + Pottok, + Przewalski, + PyreneanTarpan, + Qatgani, + Quarab, + Quarter, + Racking, + RockyMountain, + RussianDon, + RussianHeavyDraft, + RussianTrotter, + Saddlebred, + Sanhe, + SchleswigerHeavyDraft, + SchwarzwalderFuchs, + SelleFrancais, + Shagya, + Shetland, + Shire, + SingleFooting, + Skyros, + Somali, + Sorraia, + SovietHeavyDraft, + SpanishBarb, + SpanishMustang, + SpanishNorman, + Standardbred, + SudanCountryBred, + Suffolk, + SwedishWarmblood, + Taishuh, + Tarpan, + Tawleed, + TennesseeWalking, + Tersk, + Thessalian, + Thoroughbred, + Tokara, + Tori, + Trakehner, + UkrainianSaddle, + Vlaamperd, + VladimirHeavyDraft, + Vyatka, + Welara, + WelshPonyAndCob, + WestAfricanBarb, + WesternSudan, + Wielkopolski, + Xilingol, + Yakut, + Yanqi, + Yili, + Yonaguni, + Zaniskari, + Zhemaichu, +} + +impl ToString for HorseBreed { + /// Converts the HorseBreed enum to a human readable string. + /// + /// # Examples + /// ``` rust + /// use livestock_rs::horse::HorseBreed; + /// + /// let racking = HorseBreed::Racking; + /// println!("{}", racking.to_string()); + /// ``` + fn to_string(&self) -> String { + match self { + HorseBreed::AkhalTeke => "Akhal-Teke".to_string(), + HorseBreed::AngloKabarda => "Anglo-Kabarda".to_string(), + HorseBreed::Banei => "Ban-ei".to_string(), + HorseBreed::Criollo => "Criollo (Uruguay)".to_string(), + HorseBreed::Galiceno => "Galiceño".to_string(), + HorseBreed::MBayar => "M'Bayar".to_string(), + HorseBreed::Merens => "Mérens".to_string(), + HorseBreed::NortheasternCrioulo => "Northeastern - Crioulo".to_string(), + HorseBreed::PantaneiroCrioulo => "Pantaneiro - Crioulo".to_string(), + HorseBreed::SchwarzwalderFuchs => "Schwarzwälder Fuchs".to_string(), + HorseBreed::SingleFooting => "Single-Footing".to_string(), + HorseBreed::SpanishNorman => "Spanish-Norman".to_string(), + HorseBreed::SudanCountryBred => "Sudan Country-Bred".to_string(), + HorseBreed::WelshPonyAndCob => "Welsh Pony & Cob".to_string(), + _ => format!("{:?}", self).to_title_case(), + } + } +} + +/// Converts a string to a HorseBreed enum. +/// +/// # Examples +/// ``` rust +/// use livestock_rs::horse::HorseBreed; +/// use std::str::FromStr; +/// +/// let breed = HorseBreed::from_str("racking").unwrap(); +/// println!("{:?}", breed); +/// ``` + +impl FromStr for HorseBreed { + type Err = std::io::Error; + fn from_str(s: &str) -> Result { + match s.to_lowercase().replace("-", " ").as_str() { + "abyssinian" => Ok(HorseBreed::Abyssinian), + "akhal teke" => Ok(HorseBreed::AkhalTeke), + "albanian" => Ok(HorseBreed::Albanian), + "altai" => Ok(HorseBreed::Altai), + "american cream draft" => Ok(HorseBreed::AmericanCreamDraft), + "american creme and white" => Ok(HorseBreed::AmericanCremeandWhite), + "american walking" => Ok(HorseBreed::AmericanWalking), + "andalusian" => Ok(HorseBreed::Andalusian), + "andravida" => Ok(HorseBreed::Andravida), + "anglo kabarda" => Ok(HorseBreed::AngloKabarda), + "appaloosa" => Ok(HorseBreed::Appaloosa), + "araappaloosa" => Ok(HorseBreed::Araappaloosa), + "arabian" => Ok(HorseBreed::Arabian), + "ardennes" => Ok(HorseBreed::Ardennes), + "argentine criollo" => Ok(HorseBreed::ArgentineCriollo), + "asturian" => Ok(HorseBreed::Asturian), + "australian brumby" => Ok(HorseBreed::AustralianBrumby), + "australian stock" => Ok(HorseBreed::AustralianStock), + "azteca" => Ok(HorseBreed::Azteca), + "balearic" => Ok(HorseBreed::Balearic), + "baluchi" => Ok(HorseBreed::Baluchi), + "banker" => Ok(HorseBreed::Banker), + "ban ei" | "banei" => Ok(HorseBreed::Banei), + "barb" => Ok(HorseBreed::Barb), + "bashkir" => Ok(HorseBreed::Bashkir), + "bashkir curly" => Ok(HorseBreed::BashkirCurly), + "basotho" => Ok(HorseBreed::Basotho), + "belgian" => Ok(HorseBreed::Belgian), + "bhirum" => Ok(HorseBreed::Bhirum), + "bhotia" => Ok(HorseBreed::Bhotia), + "boer" => Ok(HorseBreed::Boer), + "bosnian mountain" => Ok(HorseBreed::BosnianMountain), + "breton" => Ok(HorseBreed::Breton), + "buckskin" => Ok(HorseBreed::Buckskin), + "budyonny" => Ok(HorseBreed::Budyonny), + "byelorussian harness" => Ok(HorseBreed::ByelorussianHarness), + "camargue" => Ok(HorseBreed::Camargue), + "campolina" => Ok(HorseBreed::Campolina), + "canadian" => Ok(HorseBreed::Canadian), + "carthusian" => Ok(HorseBreed::Carthusian), + "caspian" => Ok(HorseBreed::Caspian), + "cayuse indian" => Ok(HorseBreed::CayuseIndian), + "cheju" => Ok(HorseBreed::Cheju), + "chilean corralero" => Ok(HorseBreed::ChileanCorralero), + "chincoteague" => Ok(HorseBreed::Chincoteague), + "cleveland bay" => Ok(HorseBreed::ClevelandBay), + "clydesdale" => Ok(HorseBreed::Clydesdale), + "colorado ranger" => Ok(HorseBreed::ColoradoRanger), + "connemara" => Ok(HorseBreed::Connemara), + "criollo" | "criollo (uruguay)" | "uruguay" => Ok(HorseBreed::Criollo), + "crioulo" => Ok(HorseBreed::Crioulo), + "dales" => Ok(HorseBreed::Dales), + "danube" => Ok(HorseBreed::Danube), + "dartmoor" => Ok(HorseBreed::Dartmoor), + "deliboz" => Ok(HorseBreed::Deliboz), + "djerma" => Ok(HorseBreed::Djerma), + "dole" => Ok(HorseBreed::Dole), + "dongola" => Ok(HorseBreed::Dongola), + "dulmen" => Ok(HorseBreed::Dulmen), + "dutch draft" => Ok(HorseBreed::DutchDraft), + "dutch warmblood" => Ok(HorseBreed::DutchWarmblood), + "east bulgarian" => Ok(HorseBreed::EastBulgarian), + "egyptian" => Ok(HorseBreed::Egyptian), + "eriskay" => Ok(HorseBreed::Eriskay), + "estonian native" => Ok(HorseBreed::EstonianNative), + "exmoor" => Ok(HorseBreed::Exmoor), + "faeroes" => Ok(HorseBreed::Faeroes), + "falabella" => Ok(HorseBreed::Falabella), + "fell" => Ok(HorseBreed::Fell), + "finnhorses" => Ok(HorseBreed::Finnhorses), + "fleuve" => Ok(HorseBreed::Fleuve), + "florida cracker" => Ok(HorseBreed::FloridaCracker), + "fouta" => Ok(HorseBreed::Fouta), + "frederiksborg" => Ok(HorseBreed::Frederiksborg), + "french saddlebred" => Ok(HorseBreed::FrenchSaddlebred), + "french trotter" => Ok(HorseBreed::FrenchTrotter), + "friesian" => Ok(HorseBreed::Friesian), + "galiceno" | "galiceño" => Ok(HorseBreed::Galiceno), + "galician" => Ok(HorseBreed::Galician), + "gelderlander" => Ok(HorseBreed::Gelderlander), + "gidran" => Ok(HorseBreed::Gidran), + "golden america saddlebred" => Ok(HorseBreed::GoldenAmericaSaddlebred), + "gotland" => Ok(HorseBreed::Gotland), + "groningen" => Ok(HorseBreed::Groningen), + "guangxi" => Ok(HorseBreed::Guangxi), + "hackney" => Ok(HorseBreed::Hackney), + "haflinger" => Ok(HorseBreed::Haflinger), + "hanoverian" => Ok(HorseBreed::Hanoverian), + "hequ" => Ok(HorseBreed::Hequ), + "highland" => Ok(HorseBreed::Highland), + "hokkaido" => Ok(HorseBreed::Hokkaido), + "hucul" => Ok(HorseBreed::Hucul), + "hungarian warmblood" => Ok(HorseBreed::HungarianWarmblood), + "icelandic" => Ok(HorseBreed::Icelandic), + "iomud" => Ok(HorseBreed::Iomud), + "irish draught" => Ok(HorseBreed::IrishDraught), + "jinzhou" => Ok(HorseBreed::Jinzhou), + "jutland" => Ok(HorseBreed::Jutland), + "kabarda" => Ok(HorseBreed::Kabarda), + "karabair" => Ok(HorseBreed::Karabair), + "karabakh" => Ok(HorseBreed::Karabakh), + "kazakh" => Ok(HorseBreed::Kazakh), + "kerry bog" => Ok(HorseBreed::KerryBog), + "kiger mustang" => Ok(HorseBreed::KigerMustang), + "kirdi" => Ok(HorseBreed::Kirdi), + "kisber felver" => Ok(HorseBreed::KisberFelver), + "kiso" => Ok(HorseBreed::Kiso), + "kladruby" => Ok(HorseBreed::Kladruby), + "knabstrup" => Ok(HorseBreed::Knabstrup), + "kushum" => Ok(HorseBreed::Kushum), + "kustanai" => Ok(HorseBreed::Kustanai), + "latvian" => Ok(HorseBreed::Latvian), + "lithuanian heavy draft" => Ok(HorseBreed::LithuanianHeavyDraft), + "lipizzan" => Ok(HorseBreed::Lipizzan), + "lokai" => Ok(HorseBreed::Lokai), + "losino" => Ok(HorseBreed::Losino), + "lusitano" => Ok(HorseBreed::Lusitano), + "malopolski" => Ok(HorseBreed::Malopolski), + "mangalarga" => Ok(HorseBreed::Mangalarga), + "marwari" => Ok(HorseBreed::Marwari), + "m bayar" | "mbayar" | "m'bayar" => Ok(HorseBreed::MBayar), + "merens" | "mérens" => Ok(HorseBreed::Merens), + "messara" => Ok(HorseBreed::Messara), + "miniature" => Ok(HorseBreed::Miniature), + "misaki" => Ok(HorseBreed::Misaki), + "missouri fox trotting" => Ok(HorseBreed::MissouriFoxTrotting), + "miyako" => Ok(HorseBreed::Miyako), + "mongolian" => Ok(HorseBreed::Mongolian), + "morab" => Ok(HorseBreed::Morab), + "morgan" => Ok(HorseBreed::Morgan), + "moyle" => Ok(HorseBreed::Moyle), + "mustang" => Ok(HorseBreed::Mustang), + "murgese" => Ok(HorseBreed::Murgese), + "national show" => Ok(HorseBreed::NationalShow), + "new forest" => Ok(HorseBreed::NewForest), + "new kirgiz" => Ok(HorseBreed::NewKirgiz), + "newfoundland" => Ok(HorseBreed::Newfoundland), + "nokota" => Ok(HorseBreed::Nokota), + "noma" => Ok(HorseBreed::Noma), + "nooitgedacht" => Ok(HorseBreed::Nooitgedacht), + "noric" => Ok(HorseBreed::Noric), + "nordland" => Ok(HorseBreed::Nordland), + "northeastern crioulo" | "northeastern crioulo" => Ok(HorseBreed::NortheasternCrioulo), + "north swedish" => Ok(HorseBreed::NorthSwedish), + "norwegian fjord" => Ok(HorseBreed::NorwegianFjord), + "ob" => Ok(HorseBreed::Ob), + "oldenburg" => Ok(HorseBreed::Oldenburg), + "orlov trotter" => Ok(HorseBreed::OrlovTrotter), + "paint" => Ok(HorseBreed::Paint), + "palomino" => Ok(HorseBreed::Palomino), + "pantaneiro crioulo" | "pantaneiro crioulo" => Ok(HorseBreed::PantaneiroCrioulo), + "paso fino" => Ok(HorseBreed::PasoFino), + "percheron" => Ok(HorseBreed::Percheron), + "peruvian paso" => Ok(HorseBreed::PeruvianPaso), + "pindos" => Ok(HorseBreed::Pindos), + "pinia" => Ok(HorseBreed::Pinia), + "pintabian" => Ok(HorseBreed::Pintabian), + "pinto" => Ok(HorseBreed::Pinto), + "polish konik" => Ok(HorseBreed::PolishKonik), + "pony of the americas" => Ok(HorseBreed::PonyOfTheAmericas), + "pottok" => Ok(HorseBreed::Pottok), + "przewalski" => Ok(HorseBreed::Przewalski), + "pyrenean tarpan" => Ok(HorseBreed::PyreneanTarpan), + "qatgani" => Ok(HorseBreed::Qatgani), + "quarab" => Ok(HorseBreed::Quarab), + "quarter" => Ok(HorseBreed::Quarter), + "racking" => Ok(HorseBreed::Racking), + "rocky mountain" => Ok(HorseBreed::RockyMountain), + "russian don" => Ok(HorseBreed::RussianDon), + "russian heavy draft" => Ok(HorseBreed::RussianHeavyDraft), + "russian trotter" => Ok(HorseBreed::RussianTrotter), + "saddlebred" => Ok(HorseBreed::Saddlebred), + "sanhe" => Ok(HorseBreed::Sanhe), + "schleswiger heavy draft" => Ok(HorseBreed::SchleswigerHeavyDraft), + "schwarzwalder fuchs" | "schwarzwälder fuchs" => Ok(HorseBreed::SchwarzwalderFuchs), + "selle francais" => Ok(HorseBreed::SelleFrancais), + "shagya" => Ok(HorseBreed::Shagya), + "shetland" => Ok(HorseBreed::Shetland), + "shire" => Ok(HorseBreed::Shire), + "single footing" => Ok(HorseBreed::SingleFooting), + "skyros" => Ok(HorseBreed::Skyros), + "somali" => Ok(HorseBreed::Somali), + "sorraia" => Ok(HorseBreed::Sorraia), + "soviet heavy draft" => Ok(HorseBreed::SovietHeavyDraft), + "spanish barb" => Ok(HorseBreed::SpanishBarb), + "spanish mustang" => Ok(HorseBreed::SpanishMustang), + "spanish norman" => Ok(HorseBreed::SpanishNorman), + "standardbred" => Ok(HorseBreed::Standardbred), + "sudan country bred" => Ok(HorseBreed::SudanCountryBred), + "suffolk" => Ok(HorseBreed::Suffolk), + "swedish warmblood" => Ok(HorseBreed::SwedishWarmblood), + "taishuh" => Ok(HorseBreed::Taishuh), + "tarpan" => Ok(HorseBreed::Tarpan), + "tawleed" => Ok(HorseBreed::Tawleed), + "tennessee walking" => Ok(HorseBreed::TennesseeWalking), + "tersk" => Ok(HorseBreed::Tersk), + "thessalian" => Ok(HorseBreed::Thessalian), + "thoroughbred" => Ok(HorseBreed::Thoroughbred), + "tokara" => Ok(HorseBreed::Tokara), + "tori" => Ok(HorseBreed::Tori), + "trakehner" => Ok(HorseBreed::Trakehner), + "ukrainian saddle" => Ok(HorseBreed::UkrainianSaddle), + "vlaamperd" => Ok(HorseBreed::Vlaamperd), + "vladimir heavy draft" => Ok(HorseBreed::VladimirHeavyDraft), + "vyatka" => Ok(HorseBreed::Vyatka), + "welara" => Ok(HorseBreed::Welara), + "welsh pony and cob" | "welsh pony & cob" => Ok(HorseBreed::WelshPonyAndCob), + "west african barb" => Ok(HorseBreed::WestAfricanBarb), + "western sudan" => Ok(HorseBreed::WesternSudan), + "wielkopolski" => Ok(HorseBreed::Wielkopolski), + "xilingol" => Ok(HorseBreed::Xilingol), + "yakut" => Ok(HorseBreed::Yakut), + "yanqi" => Ok(HorseBreed::Yanqi), + "yili" => Ok(HorseBreed::Yili), + "yonaguni" => Ok(HorseBreed::Yonaguni), + "zaniskari" => Ok(HorseBreed::Zaniskari), + "zhemaichu" => Ok(HorseBreed::Zhemaichu), + _ => Err(std::io::Error::new(std::io::ErrorKind::InvalidInput, "Invalid horse breed")), + } + } +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn test_to_string_special_cases() { + let breeds = [ + (HorseBreed::AkhalTeke, "Akhal-Teke"), + (HorseBreed::AngloKabarda, "Anglo-Kabarda"), + (HorseBreed::Banei, "Ban-ei"), + (HorseBreed::Criollo, "Criollo (Uruguay)"), + (HorseBreed::Galiceno, "Galiceño"), + (HorseBreed::MBayar, "M'Bayar"), + (HorseBreed::Merens, "Mérens"), + (HorseBreed::NortheasternCrioulo, "Northeastern - Crioulo"), + (HorseBreed::PantaneiroCrioulo, "Pantaneiro - Crioulo"), + (HorseBreed::SchwarzwalderFuchs, "Schwarzwälder Fuchs"), + (HorseBreed::SingleFooting, "Single-Footing"), + (HorseBreed::SpanishNorman, "Spanish-Norman"), + (HorseBreed::SudanCountryBred, "Sudan Country-Bred"), + (HorseBreed::WelshPonyAndCob, "Welsh Pony & Cob"), + ]; + + for (breed, expected) in breeds.iter() { + assert_eq!(breed.to_string(), *expected); + } + } + + #[test] + fn test_from_string_special_cases() { + let breeds = [ + ("akhal-teke", HorseBreed::AkhalTeke), + ("anglo-kabarda", HorseBreed::AngloKabarda), + ("ban-ei", HorseBreed::Banei), + ("criollo", HorseBreed::Criollo), + ("galiceño", HorseBreed::Galiceno), + ("m'bayar", HorseBreed::MBayar), + ("mérens", HorseBreed::Merens), + ("northeastern - crioulo", HorseBreed::NortheasternCrioulo), + ("pantaneiro - crioulo", HorseBreed::PantaneiroCrioulo), + ("schwarzwälder fuchs", HorseBreed::SchwarzwalderFuchs), + ("single-footing", HorseBreed::SingleFooting), + ("spanish-norman", HorseBreed::SpanishNorman), + ("sudan country-bred", HorseBreed::SudanCountryBred), + ("welsh pony & cob", HorseBreed::WelshPonyAndCob) + ]; + + for (breed, expected) in breeds.iter() { + assert_eq!(HorseBreed::from_str(*breed).unwrap(), *expected); + } + } +} diff --git a/src/lib.rs b/src/lib.rs index a0673fc..c3cbf11 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -3,6 +3,7 @@ pub mod cattle; pub mod chicken; pub mod donkey; pub mod goat; +pub mod horse; pub mod reindeer; pub mod sheep; pub mod swine; \ No newline at end of file