@@ -82,6 +82,7 @@ pub(crate) type TagBlock = (IPTCTag, bool, ParseFn);
8282
8383pub ( crate ) struct TagsMap {
8484 map : HashMap < String , TagBlock > ,
85+ reverse_map : HashMap < IPTCTag , ( u8 , u8 ) > ,
8586}
8687
8788fn default_parse ( s : String ) -> String {
@@ -202,10 +203,25 @@ impl TagsMap {
202203 . map ( |( k, v) | ( k. to_string ( ) , v) )
203204 . collect ( ) ;
204205
205- TagsMap { map }
206+ // Create reverse map from tag to (record,dataset)
207+ let reverse_map = map
208+ . iter ( )
209+ . map ( |( k, & ( tag, _, _) ) | {
210+ let parts: Vec < & str > = k. split ( ':' ) . collect ( ) ;
211+ let record = parts[ 0 ] . parse :: < u8 > ( ) . unwrap ( ) ;
212+ let dataset = parts[ 1 ] . parse :: < u8 > ( ) . unwrap ( ) ;
213+ ( tag, ( record, dataset) )
214+ } )
215+ . collect ( ) ;
216+
217+ TagsMap { map, reverse_map }
206218 }
207219
208220 pub ( crate ) fn get ( & self , tag : String ) -> Option < TagBlock > {
209221 self . map . get ( & tag) . copied ( )
210222 }
223+
224+ pub ( crate ) fn get_record_dataset ( & self , tag : & IPTCTag ) -> Option < ( u8 , u8 ) > {
225+ self . reverse_map . get ( tag) . copied ( )
226+ }
211227}
0 commit comments