use super::*;
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(tag = "action", rename_all = "snake_case")]
pub enum WorkspacePatchOperation {
Create {
path: String,
content: String,
},
Delete {
path: String,
},
Update {
path: String,
#[serde(default, skip_serializing_if = "Option::is_none")]
move_to: Option<String>,
#[serde(default)]
changes: Vec<WorkspaceTextReplacement>,
},
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct WorkspaceTextReplacement {
pub old: String,
pub new: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct WorkspaceChangeSetRequest {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub conversation_id: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub idempotency_key: Option<String>,
#[serde(default)]
pub base_version: u64,
pub operations: Vec<WorkspacePatchOperation>,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "snake_case")]
pub enum WorkspaceFileChangeKind {
Created,
Updated,
Deleted,
Moved,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct WorkspaceFileChange {
pub file_id: String,
pub path: String,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub previous_path: Option<String>,
pub kind: WorkspaceFileChangeKind,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub before: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub after: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub before_revision: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub after_revision: Option<String>,
pub additions: usize,
pub deletions: usize,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct WorkspaceChangeSummary {
pub files: usize,
pub additions: usize,
pub deletions: usize,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "snake_case")]
pub enum WorkspaceChangeSetStatus {
Applied,
Reverted,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct WorkspaceChangeSet {
pub schema_version: u32,
pub id: String,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub conversation_id: Option<String>,
pub status: WorkspaceChangeSetStatus,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub reverts_change_set_id: Option<String>,
pub summary: WorkspaceChangeSummary,
pub files: Vec<WorkspaceFileChange>,
pub created_at_ms: u64,
#[serde(default)]
pub workspace_version: u64,
}