11//! Functionality related to deleting a crate.
22
3- use std:: sync:: Arc ;
4-
53use chrono:: { Duration , Utc } ;
64use diesel:: dsl:: count_star;
75
@@ -11,16 +9,17 @@ use crate::schema::*;
119use crate :: util:: errors:: internal;
1210use crate :: views:: { EncodableCrate , GoodCrate , PublishWarnings } ;
1311
14- use super :: { extract_crate_name_and_semver , version_and_crate} ;
12+ use super :: version_and_crate;
1513
1614/// Handles the `DELETE /crates/:crate_id/:version` route.
1715///
1816/// 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) ?;
2423
2524 if Utc :: now ( )
2625 . naive_utc ( )
@@ -54,10 +53,10 @@ pub fn delete(req: &mut dyn RequestExt) -> EndpointResult {
5453 let uploader = app. config . uploader ( ) ;
5554 uploader
5655 . 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}" ) ) ) ?;
5857 }
5958
60- Ok ( req . json ( & GoodCrate {
59+ Ok ( Json ( GoodCrate {
6160 krate : EncodableCrate :: from_minimal ( krate, Some ( & top_versions) , None , true , None ) ,
6261 warnings : PublishWarnings {
6362 invalid_categories : vec ! [ ] ,
0 commit comments