Skip to main content

opencode_sdk/types/
file.rs

1//! File types for opencode_rs.
2
3use serde::{Deserialize, Serialize};
4
5/// A file in the project.
6#[derive(Debug, Clone, Serialize, Deserialize)]
7#[serde(rename_all = "camelCase")]
8pub struct FileInfo {
9    /// File path relative to project root.
10    pub path: String,
11    /// File size in bytes.
12    #[serde(default, skip_serializing_if = "Option::is_none")]
13    pub size: Option<u64>,
14    /// Whether this is a directory.
15    #[serde(default)]
16    pub is_directory: bool,
17    /// Last modified timestamp.
18    #[serde(default, skip_serializing_if = "Option::is_none")]
19    pub modified: Option<i64>,
20}
21
22/// File content response.
23#[derive(Debug, Clone, Serialize, Deserialize)]
24#[serde(rename_all = "camelCase")]
25pub struct FileContent {
26    /// File path.
27    pub path: String,
28    /// File content.
29    pub content: String,
30    /// MIME type.
31    #[serde(default, skip_serializing_if = "Option::is_none")]
32    pub mime: Option<String>,
33    /// Encoding (e.g., "utf-8", "base64").
34    #[serde(default, skip_serializing_if = "Option::is_none")]
35    pub encoding: Option<String>,
36}
37
38/// File status in VCS.
39#[derive(Debug, Clone, Serialize, Deserialize)]
40#[serde(rename_all = "camelCase")]
41pub struct FileStatus {
42    /// File path.
43    pub path: String,
44    /// VCS status (added, modified, deleted, etc.).
45    pub status: String,
46    /// Whether the file is staged.
47    #[serde(default)]
48    pub staged: bool,
49}
50
51/// Request to list files.
52#[derive(Debug, Clone, Default, Serialize, Deserialize)]
53#[serde(rename_all = "camelCase")]
54pub struct ListFilesRequest {
55    /// Directory to list (relative to project root).
56    #[serde(default, skip_serializing_if = "Option::is_none")]
57    pub path: Option<String>,
58    /// Whether to recurse into subdirectories.
59    #[serde(default)]
60    pub recursive: bool,
61    /// Maximum number of files to return.
62    #[serde(default, skip_serializing_if = "Option::is_none")]
63    pub limit: Option<u32>,
64}
65
66/// Request to read file content.
67#[derive(Debug, Clone, Serialize, Deserialize)]
68#[serde(rename_all = "camelCase")]
69pub struct ReadFileRequest {
70    /// File path to read.
71    pub path: String,
72    /// Start line (1-indexed).
73    #[serde(default, skip_serializing_if = "Option::is_none")]
74    pub start_line: Option<u32>,
75    /// End line (1-indexed, inclusive).
76    #[serde(default, skip_serializing_if = "Option::is_none")]
77    pub end_line: Option<u32>,
78}