use axum::Json; use axum::extract::State; use export::rest::{AppResponseData, NoData}; use session::Session; use crate::errors::{ApiError, GitApiError}; use crate::handler::ensure_caller; use crate::service::GitService; #[derive(Debug, Clone, serde::Deserialize, utoipa::ToSchema)] pub struct PipelineCancelBody { pub job_id: String, } #[utoipa::path( post, path = "/repos/_/pipelines/cancel", tag = "pipelines", request_body = PipelineCancelBody, responses( (status = 200, description = "cancel pipeline job", body = AppResponseData) ) )] pub async fn cancel( State(service): State, session: Session, Json(body): Json, ) -> Result, ApiError> { ensure_caller(&session)?; service .pipeline_cancel(body.job_id) .await .map_err(GitApiError::from)?; Ok(AppResponseData::ok(NoData)) }