gitea_sdk/api/repos/contents/
mod.rs

1use crate::api::repos::contents;
2
3pub mod create_file;
4pub mod delete_file;
5pub mod get;
6pub mod update_file;
7
8pub struct Contents {
9    pub(crate) owner: String,
10    pub(crate) repo: String,
11}
12
13impl Contents {
14    /// Gets the metadata and contents (if a file) of an entry in a repository, or a list of entries if a dir
15    /// This will return a list of all [Entry](crate::model::repos::Entry) objects
16    ///
17    /// # Example
18    /// ```
19    /// # use gitea_sdk::{Client, Auth};
20    /// # async fn fetch_repo_content() {
21    /// let client = Client::new(
22    ///     "https://gitea.example.com",
23    ///     Auth::Token("your-token")
24    /// );
25    /// let src_entries = client
26    ///     .repos("repo-owner", "repo-name")
27    ///     .contents()
28    ///     .get("src")
29    ///     .send(&client)
30    ///     .await
31    ///     .unwrap();
32    ///
33    /// let main_file_entry = client
34    ///     .repos("repo-owner", "repo-name")
35    ///     .contents()
36    ///     .get("src/main.rs")
37    ///     .send(&client)
38    ///     .await
39    ///     .unwrap();
40    /// # }
41    /// ```
42    pub fn get(&self, filepath: impl ToString) -> contents::get::GetContentsRepoBuilder {
43        contents::get::GetContentsRepoBuilder::new(self.owner.clone(), self.repo.clone(), filepath)
44    }
45
46    /// Create a file in a repository
47    /// This will return [EntryMutation](crate::model::repos::EntryMutation) object
48    ///
49    /// # Example
50    /// ```
51    /// # use base64::{Engine, prelude::BASE64_STANDARD};
52    /// # use gitea_sdk::{Client, Auth};
53    /// # async fn create_new_file() {
54    /// let client = Client::new(
55    ///     "https://gitea.example.com",
56    ///     Auth::Token("your-token")
57    /// );
58    /// let new_entry = client
59    ///    .repos("repo-owner", "repo-name")
60    ///    .contents()
61    ///    .create_file("test/server.yml", BASE64_STANDARD.encode(b"port: 80"))
62    ///    .send(&client)
63    ///    .await
64    ///    .unwrap();
65    /// # }
66    /// ```
67    pub fn create_file(
68        &self,
69        filepath: impl ToString,
70        content: impl ToString,
71    ) -> contents::create_file::CreateFileRepoBuilder {
72        contents::create_file::CreateFileRepoBuilder::new(
73            self.owner.clone(),
74            self.repo.clone(),
75            filepath,
76            content,
77        )
78    }
79
80    /// Update a file in a repository
81    /// This will return [EntryMutation](crate::model::repos::EntryMutation) object
82    ///
83    /// # Example
84    /// ```
85    /// # use base64::{Engine, prelude::BASE64_STANDARD};
86    /// # use gitea_sdk::{Client, Auth};
87    /// # async fn update_file() {
88    ///
89    /// let client = Client::new(
90    ///     "https://gitea.example.com",
91    ///     Auth::Token("your-token")
92    /// );
93    ///
94    /// let entries = client
95    ///     .repos("repo-owner", "repo-name")
96    ///     .contents()
97    ///     .get("test/server.yml")
98    ///     .send(&client)
99    ///     .await
100    ///     .unwrap();
101    ///
102    /// let server_entry = &entries[0];
103    ///
104    /// let entry_mutation = client
105    ///     .repos("repo-owner", "repo-name")
106    ///     .contents()
107    ///     .update_file(
108    ///         "test/server.yml",
109    ///         BASE64_STANDARD.encode(b"port: 8080"),
110    ///         server_entry.sha.clone(),
111    ///     )
112    ///     .send(&client)
113    ///     .await
114    ///     .unwrap();
115    /// # }
116    /// ```
117    pub fn update_file(
118        &self,
119        filepath: impl ToString,
120        content: impl ToString,
121        sha: impl ToString,
122    ) -> contents::update_file::UpdateFileRepoBuilder {
123        contents::update_file::UpdateFileRepoBuilder::new(
124            self.owner.clone(),
125            self.repo.clone(),
126            filepath,
127            content,
128            sha,
129        )
130    }
131
132    /// Delete a file in a repository
133    /// This will return [EntryMutation](crate::model::repos::EntryMutation) object
134    ///
135    /// # Example
136    /// ```
137    /// # use base64::{Engine, prelude::BASE64_STANDARD};
138    /// # use gitea_sdk::{Client, Auth};
139    /// # async fn delete_file() {
140    ///
141    /// let client = Client::new(
142    ///     "https://gitea.example.com",
143    ///     Auth::Token("your-token")
144    /// );
145    ///
146    /// let entries = client
147    ///     .repos("repo-owner", "repo-name")
148    ///     .contents()
149    ///     .get("test/server.yml")
150    ///     .send(&client)
151    ///     .await
152    ///     .unwrap();
153    ///
154    /// let server_entry = &entries[0];
155    ///
156    /// let entry_mutation = client
157    ///     .repos("repo-owner", "repo-name")
158    ///     .contents()
159    ///     .delete_file("test/server.yml", server_entry.sha.clone())
160    ///     .send(&client)
161    ///     .await
162    ///     .unwrap();
163    /// # }
164    /// ```
165    pub fn delete_file(
166        &self,
167        filepath: impl ToString,
168        sha: impl ToString,
169    ) -> contents::delete_file::DeleteFileRepoBuilder {
170        contents::delete_file::DeleteFileRepoBuilder::new(
171            self.owner.clone(),
172            self.repo.clone(),
173            filepath,
174            sha,
175        )
176    }
177}