@@ -73,6 +73,23 @@ impl Metadata {
7373 pub fn parse ( content : & [ u8 ] ) -> Result < Self , Error > {
7474 let msg = mailparse:: parse_mail ( content) ?;
7575 let headers = msg. get_headers ( ) ;
76+ let get_first_value = |name| {
77+ headers. get_first_value ( name) . and_then ( |value| {
78+ if value == "UNKNOWN" {
79+ None
80+ } else {
81+ Some ( value)
82+ }
83+ } )
84+ } ;
85+ let get_all_values = |name| {
86+ let values: Vec < String > = headers
87+ . get_all_values ( name)
88+ . into_iter ( )
89+ . filter ( |value| value != "UNKNOWN" )
90+ . collect ( ) ;
91+ values
92+ } ;
7693 let metadata_version = headers
7794 . get_first_value ( "Metadata-Version" )
7895 . ok_or_else ( || Error :: FieldNotFound ( "Metadata-Version" ) ) ?;
@@ -82,32 +99,32 @@ impl Metadata {
8299 let version = headers
83100 . get_first_value ( "Version" )
84101 . ok_or_else ( || Error :: FieldNotFound ( "Version" ) ) ?;
85- let platforms = headers . get_all_values ( "Platform" ) ;
86- let supported_platforms = headers . get_all_values ( "Supported-Platform" ) ;
87- let summary = headers . get_first_value ( "Summary" ) ;
102+ let platforms = get_all_values ( "Platform" ) ;
103+ let supported_platforms = get_all_values ( "Supported-Platform" ) ;
104+ let summary = get_first_value ( "Summary" ) ;
88105 let body = msg. get_body ( ) ?;
89106 let description = if !body. trim ( ) . is_empty ( ) {
90107 Some ( body)
91108 } else {
92- headers . get_first_value ( "Description" )
109+ get_first_value ( "Description" )
93110 } ;
94- let keywords = headers . get_first_value ( "Keywords" ) ;
95- let home_page = headers . get_first_value ( "Home-Page" ) ;
96- let download_url = headers . get_first_value ( "Download-URL" ) ;
97- let author = headers . get_first_value ( "Author" ) ;
98- let author_email = headers . get_first_value ( "Author-email" ) ;
99- let license = headers . get_first_value ( "License" ) ;
100- let classifiers = headers . get_all_values ( "Classifier" ) ;
101- let requires_dist = headers . get_all_values ( "Requires-Dist" ) ;
102- let provides_dist = headers . get_all_values ( "Provides-Dist" ) ;
103- let obsoletes_dist = headers . get_all_values ( "Obsoletes-Dist" ) ;
104- let maintainer = headers . get_first_value ( "Maintainer" ) ;
105- let maintainer_email = headers . get_first_value ( "Maintainer-email" ) ;
106- let requires_python = headers . get_first_value ( "Requires-Python" ) ;
107- let requires_external = headers . get_all_values ( "Requires-External" ) ;
108- let project_urls = headers . get_all_values ( "Project-URL" ) ;
109- let provides_extras = headers . get_all_values ( "Provides-Extra" ) ;
110- let description_content_type = headers . get_first_value ( "Description-Content-Type" ) ;
111+ let keywords = get_first_value ( "Keywords" ) ;
112+ let home_page = get_first_value ( "Home-Page" ) ;
113+ let download_url = get_first_value ( "Download-URL" ) ;
114+ let author = get_first_value ( "Author" ) ;
115+ let author_email = get_first_value ( "Author-email" ) ;
116+ let license = get_first_value ( "License" ) ;
117+ let classifiers = get_all_values ( "Classifier" ) ;
118+ let requires_dist = get_all_values ( "Requires-Dist" ) ;
119+ let provides_dist = get_all_values ( "Provides-Dist" ) ;
120+ let obsoletes_dist = get_all_values ( "Obsoletes-Dist" ) ;
121+ let maintainer = get_first_value ( "Maintainer" ) ;
122+ let maintainer_email = get_first_value ( "Maintainer-email" ) ;
123+ let requires_python = get_first_value ( "Requires-Python" ) ;
124+ let requires_external = get_all_values ( "Requires-External" ) ;
125+ let project_urls = get_all_values ( "Project-URL" ) ;
126+ let provides_extras = get_all_values ( "Provides-Extra" ) ;
127+ let description_content_type = get_first_value ( "Description-Content-Type" ) ;
111128 Ok ( Metadata {
112129 metadata_version,
113130 name,
0 commit comments