gitea_sdk/api/repos/contents/
create_file.rs1use build_it::Builder;
2use serde::{Deserialize, Serialize};
3
4use crate::{
5 model::repos::{CommitDateOptions, EntryMutation, Identity},
6 Result,
7};
8
9#[derive(Debug, Serialize, Deserialize, Builder)]
10#[build_it(into)]
11pub struct CreateFileRepoBuilder {
12 #[skip]
14 #[serde(skip)]
15 owner: String,
16 #[skip]
18 #[serde(skip)]
19 repo: String,
20 #[skip]
22 #[serde(skip)]
23 filepath: String,
24 #[serde(skip_serializing_if = "Option::is_none")]
26 author: Option<Identity>,
27 #[serde(skip_serializing_if = "Option::is_none")]
29 branch: Option<String>,
30 #[serde(skip_serializing_if = "Option::is_none")]
32 committer: Option<Identity>,
33 #[skip]
35 content: String,
36 dates: Option<CommitDateOptions>,
38 message: Option<String>,
40 new_branch: Option<String>,
42 signoff: Option<bool>,
44}
45
46impl CreateFileRepoBuilder {
47 pub fn new(
48 owner: impl ToString,
49 repo: impl ToString,
50 filepath: impl ToString,
51 content: impl ToString,
52 ) -> Self {
53 Self {
54 owner: owner.to_string(),
55 repo: repo.to_string(),
56 filepath: filepath.to_string(),
57 author: None,
58 branch: None,
59 committer: None,
60 content: content.to_string(),
61 dates: None,
62 message: None,
63 new_branch: None,
64 signoff: None,
65 }
66 }
67
68 pub async fn send(&self, client: &crate::Client) -> Result<EntryMutation> {
70 let owner = &self.owner;
71 let repo = &self.repo;
72 let filepath = &self.filepath;
73
74 let req = client
75 .post(format!("repos/{owner}/{repo}/contents/{filepath}"))
76 .json(self)
77 .build()?;
78
79 let res = client.make_request(req).await?;
80
81 client.parse_response(res).await
82 }
83}