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}