gitea_sdk_rs/options/org/
core.rs1use crate::pagination::{ListOptions, QueryEncode};
6use crate::types::enums::VisibleType;
7use crate::{Deserialize, Serialize};
8
9use super::percent_encode;
10
11#[derive(Debug, Clone, Default)]
14pub struct ListOrgsOptions {
15 pub list_options: ListOptions,
16}
17
18impl QueryEncode for ListOrgsOptions {
19 fn query_encode(&self) -> String {
20 self.list_options.query_encode()
21 }
22}
23
24#[derive(Debug, Clone, Default, Serialize, Deserialize)]
25pub struct CreateOrgOption {
26 #[serde(rename = "username")]
27 pub name: String,
28 #[serde(rename = "full_name", skip_serializing_if = "Option::is_none")]
29 pub full_name: Option<String>,
30 #[serde(skip_serializing_if = "Option::is_none")]
31 pub email: Option<String>,
32 #[serde(skip_serializing_if = "Option::is_none")]
33 pub description: Option<String>,
34 #[serde(skip_serializing_if = "Option::is_none")]
35 pub website: Option<String>,
36 #[serde(skip_serializing_if = "Option::is_none")]
37 pub location: Option<String>,
38 #[serde(skip_serializing_if = "Option::is_none")]
39 pub visibility: Option<VisibleType>,
40 #[serde(
41 rename = "repo_admin_change_team_access",
42 skip_serializing_if = "Option::is_none"
43 )]
44 pub repo_admin_change_team_access: Option<bool>,
45}
46
47impl CreateOrgOption {
48 pub fn validate(&self) -> crate::Result<()> {
49 if self.name.is_empty() {
50 return Err(crate::Error::Validation("org name is required".to_string()));
51 }
52 if let Some(vis) = &self.visibility
53 && !matches!(
54 vis,
55 VisibleType::Public | VisibleType::Limited | VisibleType::Private
56 )
57 {
58 return Err(crate::Error::Validation(
59 "invalid visibility option".to_string(),
60 ));
61 }
62 Ok(())
63 }
64}
65
66#[derive(Debug, Clone, Default, Serialize, Deserialize)]
67pub struct EditOrgOption {
68 #[serde(rename = "full_name", skip_serializing_if = "Option::is_none")]
69 pub full_name: Option<String>,
70 #[serde(skip_serializing_if = "Option::is_none")]
71 pub email: Option<String>,
72 #[serde(skip_serializing_if = "Option::is_none")]
73 pub description: Option<String>,
74 #[serde(skip_serializing_if = "Option::is_none")]
75 pub website: Option<String>,
76 #[serde(skip_serializing_if = "Option::is_none")]
77 pub location: Option<String>,
78 #[serde(skip_serializing_if = "Option::is_none")]
79 pub visibility: Option<VisibleType>,
80 #[serde(
81 rename = "repo_admin_change_team_access",
82 skip_serializing_if = "Option::is_none"
83 )]
84 pub repo_admin_change_team_access: Option<bool>,
85}
86
87impl EditOrgOption {
88 pub fn validate(&self) -> crate::Result<()> {
89 if let Some(vis) = &self.visibility
90 && !matches!(
91 vis,
92 VisibleType::Public | VisibleType::Limited | VisibleType::Private
93 )
94 {
95 return Err(crate::Error::Validation(
96 "invalid visibility option".to_string(),
97 ));
98 }
99 Ok(())
100 }
101}
102
103#[derive(Debug, Clone, Serialize, Deserialize)]
106pub struct RenameOrgOption {
107 #[serde(rename = "new_name")]
108 pub new_name: String,
109}
110
111#[derive(Debug, Clone, Default)]
112pub struct ListOrgActivityFeedsOptions {
113 pub list_options: ListOptions,
114 pub date: Option<String>,
115}
116
117impl QueryEncode for ListOrgActivityFeedsOptions {
118 fn query_encode(&self) -> String {
119 let mut out = self.list_options.query_encode();
120 if let Some(date) = &self.date {
121 out.push_str(&format!("&date={}", percent_encode(date)));
122 }
123 out
124 }
125}
126
127#[derive(Debug, Clone, Default)]
128pub struct ListTeamActivityFeedsOptions {
129 pub list_options: ListOptions,
130 pub date: Option<String>,
131}
132
133impl QueryEncode for ListTeamActivityFeedsOptions {
134 fn query_encode(&self) -> String {
135 let mut out = self.list_options.query_encode();
136 if let Some(date) = &self.date {
137 out.push_str(&format!("&date={}", percent_encode(date)));
138 }
139 out
140 }
141}
142
143#[cfg(test)]
144mod tests {
145 use super::*;
146 use crate::types::enums::VisibleType;
147
148 #[test]
149 fn test_create_org_option_validate_success() {
150 let opt = CreateOrgOption {
151 name: "myorg".to_string(),
152 ..Default::default()
153 };
154 assert!(opt.validate().is_ok());
155 }
156
157 #[test]
158 fn test_create_org_option_validate_empty_name() {
159 let opt = CreateOrgOption {
160 name: String::new(),
161 ..Default::default()
162 };
163 assert!(opt.validate().is_err());
164 }
165
166 #[test]
167 fn test_create_org_option_validate_invalid_visibility() {
168 let opt = CreateOrgOption {
169 name: "myorg".to_string(),
170 visibility: Some(VisibleType::Unknown),
171 ..Default::default()
172 };
173 assert!(opt.validate().is_err());
174 }
175
176 #[test]
177 fn test_edit_org_option_validate_success() {
178 let opt = EditOrgOption {
179 visibility: Some(VisibleType::Public),
180 ..Default::default()
181 };
182 assert!(opt.validate().is_ok());
183 }
184
185 #[test]
186 fn test_edit_org_option_validate_invalid_visibility() {
187 let opt = EditOrgOption {
188 visibility: Some(VisibleType::Unknown),
189 ..Default::default()
190 };
191 assert!(opt.validate().is_err());
192 }
193}