@@ -38,7 +38,8 @@ impl FromStr for Assembly {
3838 type Err = String ;
3939
4040 fn from_str ( s : & str ) -> Result < Self , Self :: Err > {
41- match s. to_lowercase ( ) . replace ( ".p" , "p" ) . as_str ( ) {
41+ let normalized = s. trim ( ) . to_lowercase ( ) . replace ( ".p" , "p" ) ;
42+ match normalized. as_str ( ) {
4243 "grch37" => Ok ( Assembly :: Grch37 ) ,
4344 "grch37p10" => Ok ( Assembly :: Grch37p10 ) ,
4445 "grch38" => Ok ( Assembly :: Grch38 ) ,
@@ -90,6 +91,7 @@ lazy_static::lazy_static! {
9091#[ cfg( test) ]
9192mod test {
9293 use pretty_assertions:: assert_eq;
94+ use std:: str:: FromStr ;
9395
9496 use crate :: assemblies:: { Assembly , ASSEMBLY_INFOS } ;
9597
@@ -99,6 +101,22 @@ mod test {
99101 assert_eq ! ( ASSEMBLY_INFOS [ Assembly :: Grch37p10 ] . sequences. len( ) , 275 ) ;
100102 assert_eq ! ( ASSEMBLY_INFOS [ Assembly :: Grch38 ] . sequences. len( ) , 455 ) ;
101103 }
104+
105+ #[ test]
106+ fn parse_assembly_from_str ( ) {
107+ assert_eq ! ( Assembly :: from_str( "GRCh37" ) . unwrap( ) , Assembly :: Grch37 ) ;
108+ assert_eq ! (
109+ Assembly :: from_str( "grch37.p10" ) . unwrap( ) ,
110+ Assembly :: Grch37p10
111+ ) ;
112+ assert_eq ! ( Assembly :: from_str( "gRcH38" ) . unwrap( ) , Assembly :: Grch38 ) ;
113+ assert ! ( Assembly :: from_str( "hg19" ) . is_err( ) ) ;
114+ }
115+
116+ #[ test]
117+ fn parse_assembly_try_from_str ( ) {
118+ assert_eq ! ( Assembly :: try_from( "GRCh38" ) . unwrap( ) , Assembly :: Grch38 ) ;
119+ }
102120}
103121
104122// <LICENSE>
0 commit comments