@@ -108,9 +108,9 @@ impl Crate {
108
108
let mut license = license. as_ref ( ) . map ( |s| & s[ ..] ) ;
109
109
let license_file = license_file. as_ref ( ) . map ( |s| & s[ ..] ) ;
110
110
let keywords = keywords. connect ( "," ) ;
111
- try!( validate_url ( homepage) ) ;
112
- try!( validate_url ( documentation) ) ;
113
- try!( validate_url ( repository) ) ;
111
+ try!( validate_url ( homepage, "homepage" ) ) ;
112
+ try!( validate_url ( documentation, "documentation" ) ) ;
113
+ try!( validate_url ( repository, "repository" ) ) ;
114
114
115
115
match license {
116
116
// If a license is given, validate it to make sure it's actually a
@@ -178,23 +178,24 @@ impl Crate {
178
178
& [ & ret. id , & user_id, & now] ) ) ;
179
179
return Ok ( ret) ;
180
180
181
- fn validate_url ( url : Option < & str > ) -> CargoResult < ( ) > {
181
+ fn validate_url ( url : Option < & str > , field : & str ) -> CargoResult < ( ) > {
182
182
let url = match url {
183
183
Some ( s) => s,
184
184
None => return Ok ( ( ) )
185
185
} ;
186
- let url = match Url :: parse ( url) {
187
- Ok ( url) => url,
188
- Err ( ..) => return Err ( human ( format ! ( "not a valid url: {}" , url) ) )
189
- } ;
186
+ let url = try!( Url :: parse ( url) . map_err ( |_| {
187
+ human ( format ! ( "`{}` is not a valid url: `{}`" , field, url) )
188
+ } ) ) ;
190
189
match & url. scheme [ ..] {
191
190
"http" | "https" => { }
192
- _ => return Err ( human ( format ! ( "not a valid url scheme: {}" , url) ) )
191
+ s => return Err ( human ( format ! ( "`{}` has an invalid url \
192
+ scheme: `{}`", field, s) ) )
193
193
}
194
194
match url. scheme_data {
195
195
url:: SchemeData :: Relative ( ..) => { }
196
196
url:: SchemeData :: NonRelative ( ..) => {
197
- return Err ( human ( format ! ( "not a valid url scheme: {}" , url) ) )
197
+ return Err ( human ( format ! ( "`{}` must have relative scheme \
198
+ data: {}", field, url) ) )
198
199
}
199
200
}
200
201
Ok ( ( ) )
0 commit comments