diff --git a/crates/worker/src/feature/builtin/manage_workdir.rs b/crates/worker/src/feature/builtin/manage_workdir.rs index 69f22d9b..677a7721 100644 --- a/crates/worker/src/feature/builtin/manage_workdir.rs +++ b/crates/worker/src/feature/builtin/manage_workdir.rs @@ -21,6 +21,8 @@ use workdir::{ }; use workspace_api::{ + WorkingDirectoryCreateRequest as WorkdirCreateRequest, + WorkingDirectoryCreateResponse as WorkdirCreateResponse, WorkingDirectoryDetailResponse as WorkdirDetailResponse, WorkingDirectoryListResponse as WorkdirListResponse, }; @@ -421,9 +423,9 @@ impl WorkspaceHttpWorkdirBackend { runtime_id: runtime_id.map(str::to_string), repository_id: repository_id.to_string(), selector, - operation_id, + operation_id: Some(operation_id), }; - let response = self.execute_json::(WorkspaceRequest::json( + let response = self.execute_json::(WorkspaceRequest::json( WorkspaceRequestMethod::Post, format!("/api/w/{workspace_id}/working-directories"), serde_json::to_string(&request).map_err(decode_error)?, @@ -702,16 +704,6 @@ struct WorkdirCreateInput { selector: Option, } -#[derive(Debug, Serialize)] -struct WorkdirCreateRequest { - #[serde(skip_serializing_if = "Option::is_none")] - runtime_id: Option, - repository_id: String, - #[serde(skip_serializing_if = "Option::is_none")] - selector: Option, - operation_id: String, -} - #[derive(Debug, Deserialize)] #[serde(deny_unknown_fields)] struct WorkdirAttachInput { diff --git a/crates/workspace-api/src/lib.rs b/crates/workspace-api/src/lib.rs index 8170db95..37b33cf5 100644 --- a/crates/workspace-api/src/lib.rs +++ b/crates/workspace-api/src/lib.rs @@ -209,12 +209,12 @@ pub struct WorkingDirectorySummary { #[cfg_attr(feature = "typescript", ts(optional_fields = nullable))] #[serde(deny_unknown_fields)] pub struct WorkingDirectoryCreateRequest { - #[serde(default)] + #[serde(default, skip_serializing_if = "Option::is_none")] pub runtime_id: Option, pub repository_id: String, - #[serde(default)] + #[serde(default, skip_serializing_if = "Option::is_none")] pub selector: Option, - #[serde(default)] + #[serde(default, skip_serializing_if = "Option::is_none")] pub operation_id: Option, } @@ -765,6 +765,9 @@ mod tests { assert_eq!(request.runtime_id, None); assert_eq!(request.selector, None); assert_eq!(request.operation_id, None); + + let serialized = serde_json::to_value(request).expect("serialize create request"); + assert_eq!(serialized, serde_json::json!({"repository_id": "main"})); } #[test]