delete_blob.rs
1 use rocket::State; 2 use sqlx::Pool; 3 4 use crate::api::container_spec::Auth; 5 use crate::registry_error::RegistryError; 6 use crate::services::delete_blob_service; 7 use crate::{config::Config, db::DB}; 8 9 #[derive(Responder)] 10 pub enum DeleteBlobResponse { 11 #[response(status = 202)] 12 Success(()), 13 #[response(status = 404)] 14 NotFound(()), 15 #[response(status = 500)] 16 Failure(()), 17 } 18 19 #[delete("/v2/<name>/blobs/<digest>")] 20 pub async fn delete_blob( 21 db_pool: &State<Pool<DB>>, 22 config: &State<Config>, 23 _auth: Auth, 24 name: &str, 25 digest: &str, 26 ) -> DeleteBlobResponse { 27 if let Err(err) = delete_blob_service::delete_blob(db_pool, config, name, digest).await { 28 match err { 29 RegistryError::BlobNotFound => { 30 warn!("Request to delete blob that could not be found {name} ({digest})"); 31 return DeleteBlobResponse::NotFound(()); 32 } 33 err => { 34 error!("Failed to delete blob, err: {err:?}"); 35 return DeleteBlobResponse::Failure(()); 36 } 37 } 38 } 39 40 DeleteBlobResponse::Success(()) 41 }