Skip to main content

codebridge_cli/
models.rs

1use serde::{Deserialize, Serialize};
2
3#[derive(Debug, Deserialize)]
4#[serde(tag = "type", content = "params", rename_all = "camelCase")]
5pub enum Action {
6    ReadFile(ReadFileParams),
7    WriteFile(WriteFileParams),
8    DeleteFile(DeleteFileParams),
9    CreateDirectory(CreateDirectoryParams),
10    ListDirectory(ListDirectoryParams),
11    GitStatus,
12    GitAdd(GitAddParams),
13    GitCommit(GitCommitParams),
14    GitPush(GitPushParams),
15    GitDiff(GitDiffParams),
16    GitInit,
17    RunScript(RunScriptParams),
18    // NEW worktree actions
19    GitWorktreeAdd(WorktreeAddParams),
20    GitWorktreeList,
21    GitWorktreeRemove(WorktreeRemoveParams),
22    GitWorktreeMerge(WorktreeMergeParams),
23}
24
25// NEW worktree parameter structs
26#[derive(Debug, Deserialize)]
27#[serde(rename_all = "camelCase")]
28pub struct WorktreeAddParams {
29    pub branch: String,
30    pub new_branch: bool,
31}
32
33#[derive(Debug, Deserialize)]
34#[serde(rename_all = "camelCase")]
35pub struct WorktreeRemoveParams {
36    pub path: String,
37    pub force: bool,
38}
39
40#[derive(Debug, Deserialize)]
41#[serde(rename_all = "camelCase")]
42pub struct WorktreeMergeParams {
43    pub path: String,
44    pub branch: String,
45
46    pub preview: Option<bool>,
47    #[allow(dead_code)]
48    pub resolved: Option<bool>,
49
50    #[allow(dead_code)]
51    pub resolution: Option<String>,
52}
53
54// NEW worktree info for listing
55#[derive(Debug, Serialize, Deserialize, Clone)]
56#[serde(rename_all = "camelCase")]
57pub struct WorktreeInfo {
58    pub path: String,
59    pub branch: String,
60    pub head: String,
61    pub is_main: bool,
62}
63
64// ... rest of existing types remain the same
65#[derive(Debug, Deserialize)]
66#[serde(rename_all = "camelCase")]
67pub struct RunScriptParams {
68    pub language: String,
69    pub code: String,
70    #[serde(default)]
71    pub args: Vec<String>,
72    pub timeout: Option<u64>,
73}
74
75#[derive(Debug, Deserialize)]
76#[serde(rename_all = "camelCase")]
77pub struct ReadFileParams {
78    pub path: String,
79}
80
81#[derive(Debug, Deserialize)]
82#[serde(rename_all = "camelCase")]
83pub struct WriteFileParams {
84    pub path: String,
85    pub content: String,
86}
87
88#[derive(Debug, Deserialize)]
89#[serde(rename_all = "camelCase")]
90pub struct DeleteFileParams {
91    pub path: String,
92}
93
94#[derive(Debug, Deserialize)]
95#[serde(rename_all = "camelCase")]
96pub struct CreateDirectoryParams {
97    pub path: String,
98}
99
100#[derive(Debug, Deserialize)]
101#[serde(rename_all = "camelCase")]
102pub struct ListDirectoryParams {
103    pub path: String,
104}
105
106#[derive(Debug, Deserialize)]
107#[serde(rename_all = "camelCase")]
108pub struct GitAddParams {
109    pub files: Vec<String>,
110}
111
112#[derive(Debug, Deserialize)]
113#[serde(rename_all = "camelCase")]
114pub struct GitCommitParams {
115    pub message: String,
116}
117
118#[derive(Debug, Deserialize)]
119#[serde(rename_all = "camelCase")]
120pub struct GitPushParams {
121    #[serde(skip_serializing_if = "Option::is_none")]
122    pub remote: Option<String>,
123    #[serde(skip_serializing_if = "Option::is_none")]
124    pub branch: Option<String>,
125}
126
127#[derive(Debug, Deserialize)]
128#[serde(rename_all = "camelCase")]
129pub struct GitDiffParams {
130    #[serde(skip_serializing_if = "Option::is_none")]
131    pub target: Option<String>,
132}
133
134#[derive(Debug, Serialize, Deserialize)]
135#[serde(rename_all = "camelCase")]
136pub struct ActionResult {
137    pub success: bool,
138    #[serde(skip_serializing_if = "Option::is_none")]
139    pub content: Option<String>,
140    #[serde(skip_serializing_if = "Option::is_none")]
141    pub error: Option<String>,
142    #[serde(skip_serializing_if = "Option::is_none")]
143    pub path: Option<String>,
144}
145
146#[derive(Debug, Serialize, Deserialize)]
147#[serde(rename_all = "camelCase")]
148pub struct FileEntry {
149    pub name: String,
150    pub path: String,
151    pub is_dir: bool,
152    #[serde(skip_serializing_if = "Option::is_none")]
153    pub size: Option<u64>,
154}
155
156#[derive(Debug, Deserialize)]
157#[serde(rename_all = "camelCase")]
158pub struct ListFilesQuery {
159    pub project_id: String,
160}
161
162#[derive(Debug, Serialize, Deserialize, Clone)]
163#[serde(rename_all = "camelCase")]
164pub struct BuildOutput {
165    pub success: bool,
166    pub errors: Vec<Diagnostic>,
167    pub warnings: Vec<Diagnostic>,
168    pub raw_output: String,
169}
170
171#[derive(Debug, Serialize, Deserialize, Clone)]
172#[serde(rename_all = "camelCase")]
173pub struct Diagnostic {
174    pub file: Option<String>,
175    pub line: Option<usize>,
176    pub column: Option<usize>,
177    pub message: String,
178    pub level: String,
179}
180
181#[derive(Debug, Serialize, Deserialize)]
182#[serde(rename_all = "camelCase")]
183pub struct ExecuteResponse {
184    pub action_results: Vec<ActionResult>,
185    pub build_output: Option<BuildOutput>,
186    pub continue_loop: bool,
187}
188
189#[derive(Debug, Deserialize)]
190#[serde(rename_all = "camelCase")]
191pub struct FileContentQuery {
192    pub project_id: String,
193    pub path: String,
194}
195
196#[derive(Debug, Deserialize)]
197#[serde(rename_all = "camelCase")]
198pub struct ExecuteRequest {
199    pub project_id: String,
200    pub actions: Vec<Action>,
201}
202#[derive(Debug, Deserialize)]
203pub struct OpenEditorRequest {
204    pub path: String,
205    pub editor: String,
206    pub line: Option<u32>,
207    pub column: Option<u32>,
208}