1
1
//! Functionality related to deleting a crate.
2
2
3
- use std:: sync:: Arc ;
4
-
5
3
use chrono:: { Duration , Utc } ;
6
4
use diesel:: dsl:: count_star;
7
5
@@ -11,16 +9,17 @@ use crate::schema::*;
11
9
use crate :: util:: errors:: internal;
12
10
use crate :: views:: { EncodableCrate , GoodCrate , PublishWarnings } ;
13
11
14
- use super :: { extract_crate_name_and_semver , version_and_crate} ;
12
+ use super :: version_and_crate;
15
13
16
14
/// Handles the `DELETE /crates/:crate_id/:version` route.
17
15
///
18
16
/// Actually deletion is allowed only in the first 24 hours from creation
19
- pub fn delete ( req : & mut dyn RequestExt ) -> EndpointResult {
20
- let app = Arc :: clone ( req. app ( ) ) ;
21
- let ( crate_name, semver) = extract_crate_name_and_semver ( req) ?;
22
- let conn = req. db_read ( ) ?;
23
- let ( version, krate) = version_and_crate ( & conn, crate_name, semver) ?;
17
+ pub async fn delete (
18
+ app : AppState ,
19
+ Path ( ( crate_name, semver) ) : Path < ( String , String ) > ,
20
+ ) -> AppResult < Json < GoodCrate > > {
21
+ let conn = app. db_read ( ) ?;
22
+ let ( version, krate) = version_and_crate ( & conn, & crate_name, & semver) ?;
24
23
25
24
if Utc :: now ( )
26
25
. naive_utc ( )
@@ -54,10 +53,10 @@ pub fn delete(req: &mut dyn RequestExt) -> EndpointResult {
54
53
let uploader = app. config . uploader ( ) ;
55
54
uploader
56
55
. delete_index ( app. http_client ( ) , & krate. name )
57
- . map_err ( |e| internal ( & format_args ! ( "failed to delete crate: {}" , e ) ) ) ?;
56
+ . map_err ( |e| internal ( format_args ! ( "failed to delete crate: {e}" ) ) ) ?;
58
57
}
59
58
60
- Ok ( req . json ( & GoodCrate {
59
+ Ok ( Json ( GoodCrate {
61
60
krate : EncodableCrate :: from_minimal ( krate, Some ( & top_versions) , None , true , None ) ,
62
61
warnings : PublishWarnings {
63
62
invalid_categories : vec ! [ ] ,
0 commit comments