From 341d889f1064199b7a0fe31703dea518c8aef8e4 Mon Sep 17 00:00:00 2001
From: Ben Boeckel <ben.boeckel@kitware.com>
Date: Mon, 17 Mar 2025 19:31:53 +0100
Subject: [PATCH] api/projects/runners: support project names for
 enable/disable

---
 CHANGELOG.md                        |  9 +++++++++
 src/api/projects/runners/disable.rs | 14 ++++++++------
 src/api/projects/runners/enable.rs  | 14 ++++++++------
 3 files changed, 25 insertions(+), 12 deletions(-)

diff --git a/CHANGELOG.md b/CHANGELOG.md
index f1d3d531..469c7ec7 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,12 @@
+# v0.1709.3 (unreleased)
+
+## Changes
+
+  * `DisableProjectRunner` and `EnableProjectRunner` now accept project names
+    as well. A slight break as the types are now lifetime-aware, but this only
+    affects code that needed to name the endpoint types across an API boundary
+    (which should be rare).
+
 # v0.1709.2
 
 ## Changes
diff --git a/src/api/projects/runners/disable.rs b/src/api/projects/runners/disable.rs
index 8022008a..cdeac16f 100644
--- a/src/api/projects/runners/disable.rs
+++ b/src/api/projects/runners/disable.rs
@@ -6,25 +6,27 @@
 
 use derive_builder::Builder;
 
+use crate::api::common::NameOrId;
 use crate::api::endpoint_prelude::*;
 
 /// Disable a runner on a project.
 #[derive(Debug, Builder, Clone)]
-pub struct DisableProjectRunner {
+pub struct DisableProjectRunner<'a> {
     /// The ID or URL-encoded path of the project.
-    project: u64,
+    #[builder(setter(into))]
+    project: NameOrId<'a>,
     /// The ID of the runner.
     runner: u64,
 }
 
-impl DisableProjectRunner {
+impl<'a> DisableProjectRunner<'a> {
     /// Create a builder for the endpoint.
-    pub fn builder() -> DisableProjectRunnerBuilder {
+    pub fn builder() -> DisableProjectRunnerBuilder<'a> {
         DisableProjectRunnerBuilder::default()
     }
 }
 
-impl Endpoint for DisableProjectRunner {
+impl Endpoint for DisableProjectRunner<'_> {
     fn method(&self) -> Method {
         Method::DELETE
     }
@@ -60,7 +62,7 @@ mod tests {
     #[test]
     fn runner_is_required() {
         let err = DisableProjectRunner::builder()
-            .project(1)
+            .project("project/example")
             .build()
             .unwrap_err();
         crate::test::assert_missing_field!(err, DisableProjectRunnerBuilderError, "runner");
diff --git a/src/api/projects/runners/enable.rs b/src/api/projects/runners/enable.rs
index b058ed16..3e2e1b77 100644
--- a/src/api/projects/runners/enable.rs
+++ b/src/api/projects/runners/enable.rs
@@ -6,25 +6,27 @@
 
 use derive_builder::Builder;
 
+use crate::api::common::NameOrId;
 use crate::api::endpoint_prelude::*;
 
 /// Enable a runner on a project.
 #[derive(Debug, Builder, Clone)]
-pub struct EnableProjectRunner {
+pub struct EnableProjectRunner<'a> {
     /// The ID or URL-encoded path of the project.
-    project: u64,
+    #[builder(setter(into))]
+    project: NameOrId<'a>,
     /// The ID of the runner.
     runner: u64,
 }
 
-impl EnableProjectRunner {
+impl<'a> EnableProjectRunner<'a> {
     /// Create a builder for the endpoint.
-    pub fn builder() -> EnableProjectRunnerBuilder {
+    pub fn builder() -> EnableProjectRunnerBuilder<'a> {
         EnableProjectRunnerBuilder::default()
     }
 }
 
-impl Endpoint for EnableProjectRunner {
+impl Endpoint for EnableProjectRunner<'_> {
     fn method(&self) -> Method {
         Method::POST
     }
@@ -68,7 +70,7 @@ mod tests {
     #[test]
     fn runner_is_required() {
         let err = EnableProjectRunner::builder()
-            .project(1)
+            .project("project/example")
             .build()
             .unwrap_err();
         crate::test::assert_missing_field!(err, EnableProjectRunnerBuilderError, "runner");
-- 
GitLab