1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
use super::OrgHandler;
use crate::models::orgs::orgs_extensions::{
OrgImmutableReleasesRepositoriesResponse, OrgImmutableReleasesSettings,
};
use crate::Result;
/// Handler for GitHub's Organization Immutable Releases API.
///
/// Created with [`OrgHandler::immutable_releases`].
pub struct OrgImmutableReleasesHandler<'octo, 'r> {
handler: &'r OrgHandler<'octo>,
}
impl<'octo, 'r> OrgImmutableReleasesHandler<'octo, 'r> {
pub(crate) fn new(handler: &'r OrgHandler<'octo>) -> Self {
Self { handler }
}
/// Get immutable releases settings for an organization.
///
/// See: [GitHub API Documentation](https://docs.github.com/en/rest/orgs/organization-settings?apiVersion=2022-11-28#get-immutable-releases-settings-for-an-organization)
pub async fn get_settings(&self) -> Result<OrgImmutableReleasesSettings> {
let route = format!(
"/orgs/{org}/settings/immutable-releases",
org = self.handler.owner
);
self.handler.crab.get(route, None::<&()>).await
}
/// Set immutable releases settings for an organization.
///
/// See: [GitHub API Documentation](https://docs.github.com/en/rest/orgs/organization-settings?apiVersion=2022-11-28#set-immutable-releases-settings-for-an-organization)
pub async fn set_settings(&self, settings: &impl serde::Serialize) -> Result<()> {
let route = format!(
"/orgs/{org}/settings/immutable-releases",
org = self.handler.owner
);
let response = self.handler.crab._put(route, Some(settings)).await?;
if !response.status().is_success() {
return Err(crate::map_github_error(response).await.unwrap_err());
}
Ok(())
}
/// List selected repositories for immutable releases enforcement.
///
/// See: [GitHub API Documentation](https://docs.github.com/en/rest/orgs/organization-settings?apiVersion=2022-11-28#list-selected-repositories-for-immutable-releases-enforcement)
pub async fn list_repositories(&self) -> Result<OrgImmutableReleasesRepositoriesResponse> {
let route = format!(
"/orgs/{org}/settings/immutable-releases/repositories",
org = self.handler.owner
);
self.handler.crab.get(route, None::<&()>).await
}
/// Set selected repositories for immutable releases enforcement.
///
/// See: [GitHub API Documentation](https://docs.github.com/en/rest/orgs/organization-settings?apiVersion=2022-11-28#set-selected-repositories-for-immutable-releases-enforcement)
pub async fn set_repositories(&self, repositories: &impl serde::Serialize) -> Result<()> {
let route = format!(
"/orgs/{org}/settings/immutable-releases/repositories",
org = self.handler.owner
);
let response = self.handler.crab._put(route, Some(repositories)).await?;
if !response.status().is_success() {
return Err(crate::map_github_error(response).await.unwrap_err());
}
Ok(())
}
/// Enable a selected repository for immutable releases in an organization.
///
/// See: [GitHub API Documentation](https://docs.github.com/en/rest/orgs/organization-settings?apiVersion=2022-11-28#enable-a-selected-repository-for-immutable-releases-in-an-organization)
pub async fn enable_repository(&self, repository_id: u64) -> Result<()> {
let route = format!(
"/orgs/{org}/settings/immutable-releases/repositories/{repository_id}",
org = self.handler.owner
);
let response = self.handler.crab._put(route, None::<&()>).await?;
if !response.status().is_success() {
return Err(crate::map_github_error(response).await.unwrap_err());
}
Ok(())
}
/// Disable a selected repository for immutable releases in an organization.
///
/// See: [GitHub API Documentation](https://docs.github.com/en/rest/orgs/organization-settings?apiVersion=2022-11-28#disable-a-selected-repository-for-immutable-releases-in-an-organization)
pub async fn disable_repository(&self, repository_id: u64) -> Result<()> {
let route = format!(
"/orgs/{org}/settings/immutable-releases/repositories/{repository_id}",
org = self.handler.owner
);
let response = self.handler.crab._delete(route, None::<&()>).await?;
if !response.status().is_success() {
return Err(crate::map_github_error(response).await.unwrap_err());
}
Ok(())
}
}