@@ -2,15 +2,15 @@ use core::str::FromStr;
22
33#[ cfg( test) ]
44use quickcheck:: { Arbitrary , Gen } ;
5+ use serde:: { Deserialize , Serialize } ;
56
67use super :: chars;
78
89macro_rules! make_language {
910 ( $( $language: tt) , +) => {
10- #[ derive( Debug , PartialEq , Eq , Hash , Clone , Copy ) ]
11+ #[ derive( Debug , PartialEq , Eq , Hash , Clone , Copy , Serialize , Deserialize , PartialOrd , Ord ) ]
1112 pub enum Language {
1213 $( $language) ,+,
13- Other ,
1414 }
1515 impl From <whatlang:: Lang > for Language {
1616 fn from( other: whatlang:: Lang ) -> Language {
@@ -24,27 +24,19 @@ macro_rules! make_language {
2424 fn from( other: Language ) -> whatlang:: Lang {
2525 match other {
2626 $( Language :: $language => whatlang:: Lang :: $language) , +,
27- _other => whatlang:: Lang :: Eng ,
2827 }
2928 }
3029 }
3130
32- impl Default for Language {
33- fn default ( ) -> Self {
34- Self :: Other
35- }
36- }
37-
3831 impl Language {
39- pub fn name ( & self ) -> & ' static str {
32+ pub fn code ( & self ) -> & ' static str {
4033 match self {
4134 $( Language :: $language => whatlang:: Lang :: $language. code( ) ) , +,
42- _other => "other" ,
4335 }
4436 }
4537
46- pub fn from_name <S : AsRef <str >>( code: S ) -> Language {
47- whatlang:: Lang :: from_code( code. as_ref( ) ) . map( Language :: from) . unwrap_or_default ( )
38+ pub fn from_code <S : AsRef <str >>( code: S ) -> Option < Language > {
39+ whatlang:: Lang :: from_code( code. as_ref( ) ) . map( Language :: from)
4840 }
4941 }
5042 } ;
@@ -124,7 +116,7 @@ make_language! {
124116
125117macro_rules! make_script {
126118 ( $( $script: tt) , +) => {
127- #[ derive( Debug , PartialEq , Eq , Hash , Clone , Copy ) ]
119+ #[ derive( Debug , PartialEq , Eq , Hash , Clone , Copy , Serialize , Deserialize , PartialOrd , Ord ) ]
128120 pub enum Script {
129121 $( $script) ,+,
130122 Cj ,
@@ -361,12 +353,12 @@ mod test {
361353
362354 #[ test]
363355 fn from_into_language ( ) {
364- assert_eq ! ( Language :: Eng . name ( ) , "eng" ) ;
365- assert_eq ! ( Language :: from_name ( "eng" ) , Language :: Eng ) ;
366- assert_eq ! ( Language :: Jpn . name ( ) , "jpn" ) ;
367- assert_eq ! ( Language :: from_name ( "jpn" ) , Language :: Jpn ) ;
368- assert_eq ! ( Language :: Cmn . name ( ) , "cmn" ) ;
369- assert_eq ! ( Language :: from_name ( "cmn" ) , Language :: Cmn ) ;
356+ assert_eq ! ( Language :: Eng . code ( ) , "eng" ) ;
357+ assert_eq ! ( Language :: from_code ( "eng" ) , Some ( Language :: Eng ) ) ;
358+ assert_eq ! ( Language :: Jpn . code ( ) , "jpn" ) ;
359+ assert_eq ! ( Language :: from_code ( "jpn" ) , Some ( Language :: Jpn ) ) ;
360+ assert_eq ! ( Language :: Cmn . code ( ) , "cmn" ) ;
361+ assert_eq ! ( Language :: from_code ( "cmn" ) , Some ( Language :: Cmn ) ) ;
370362 }
371363
372364 #[ test]
0 commit comments