summaryrefslogtreecommitdiff
path: root/makima/src/daemon/api/contract.rs
diff options
context:
space:
mode:
Diffstat (limited to 'makima/src/daemon/api/contract.rs')
-rw-r--r--makima/src/daemon/api/contract.rs33
1 files changed, 33 insertions, 0 deletions
diff --git a/makima/src/daemon/api/contract.rs b/makima/src/daemon/api/contract.rs
index f7fa696..955fe41 100644
--- a/makima/src/daemon/api/contract.rs
+++ b/makima/src/daemon/api/contract.rs
@@ -51,12 +51,39 @@ pub struct UpdateContractRequest {
pub description: Option<String>,
}
+/// Request to create a new contract.
+#[derive(Serialize)]
+#[serde(rename_all = "camelCase")]
+pub struct CreateContractRequest {
+ pub name: String,
+ #[serde(skip_serializing_if = "Option::is_none")]
+ pub description: Option<String>,
+ #[serde(skip_serializing_if = "Option::is_none")]
+ pub contract_type: Option<String>,
+ #[serde(skip_serializing_if = "Option::is_none")]
+ pub initial_phase: Option<String>,
+ #[serde(skip_serializing_if = "Option::is_none")]
+ pub autonomous_loop: Option<bool>,
+ #[serde(skip_serializing_if = "Option::is_none")]
+ pub phase_guard: Option<bool>,
+}
+
impl ApiClient {
/// List all contracts for the authenticated user.
pub async fn list_contracts(&self) -> Result<JsonValue, ApiError> {
self.get("/api/v1/contracts").await
}
+ /// Create a new contract.
+ pub async fn create_contract(&self, req: CreateContractRequest) -> Result<JsonValue, ApiError> {
+ self.post("/api/v1/contracts", &req).await
+ }
+
+ /// Get a contract with its tasks, files, and repositories.
+ pub async fn get_contract(&self, contract_id: Uuid) -> Result<JsonValue, ApiError> {
+ self.get(&format!("/api/v1/contracts/{}", contract_id)).await
+ }
+
/// Delete a contract.
pub async fn delete_contract(&self, contract_id: Uuid) -> Result<(), ApiError> {
self.delete(&format!("/api/v1/contracts/{}", contract_id))
@@ -191,4 +218,10 @@ impl ApiClient {
self.post(&format!("/api/v1/contracts/{}/daemon/files", contract_id), &req)
.await
}
+
+ /// Get task output history.
+ pub async fn get_task_output(&self, task_id: Uuid) -> Result<JsonValue, ApiError> {
+ self.get(&format!("/api/v1/mesh/tasks/{}/output", task_id))
+ .await
+ }
}