File tree Expand file tree Collapse file tree 1 file changed +30
-0
lines changed
Expand file tree Collapse file tree 1 file changed +30
-0
lines changed Original file line number Diff line number Diff line change @@ -37,6 +37,32 @@ impl Division {
3737 } )
3838 }
3939
40+ /// Searches administrative division by its code in all revision
41+ pub fn search ( code : & str ) -> Option < Self > {
42+ fn parse_rev_year ( rev : & str ) -> u32 {
43+ let parts: Vec < & str > = rev. split ( '-' ) . collect ( ) ;
44+ if parts. len ( ) == 2 {
45+ parts[ 1 ] . parse ( ) . unwrap ( )
46+ } else {
47+ rev. parse ( ) . unwrap ( )
48+ }
49+ }
50+
51+ let mut revisions = Self :: revisions ( ) ;
52+ revisions. sort_unstable_by ( |a, b| {
53+ let year_a = parse_rev_year ( a) ;
54+ let year_b = parse_rev_year ( b) ;
55+ year_b. cmp ( & year_a)
56+ } ) ;
57+ for rev in revisions {
58+ let division = Self :: get_by_revision ( code, rev) ;
59+ if division. is_some ( ) {
60+ return division;
61+ }
62+ }
63+ None
64+ }
65+
4066 /// List all revisions supported by GB2260
4167 pub fn revisions ( ) -> Vec < & ' static str > {
4268 DIVISIONS . keys ( ) . cloned ( ) . collect ( )
@@ -126,5 +152,9 @@ mod tests {
126152 assert ! ( !division. is_prefecture( ) ) ;
127153 assert ! ( division. is_county( ) ) ;
128154 assert_eq ! ( division. stack( ) . len( ) , 3 ) ;
155+
156+ let division_search = Division :: search ( "110000" ) . unwrap ( ) ;
157+ let division_get = Division :: get ( "110000" ) . unwrap ( ) ;
158+ assert_eq ! ( division_search, division_get) ;
129159 }
130160}
You can’t perform that action at this time.
0 commit comments