Skip to main content

ephemeris_forge_forgejo/api/operations/
access.rs

1use ephemeris_forge::{RepoRef, TeamName, UserName};
2
3use crate::Permission;
4use crate::api::error::ForgeError;
5use crate::api::model::{Collaborator, Team};
6
7/// The access operations of the Forgejo API.
8pub trait AccessApi {
9    /// `PUT /repos/{owner}/{repo}/collaborators/{collaborator}`.
10    fn add_collaborator(
11        &self,
12        repo: &RepoRef,
13        user: &UserName,
14        permission: Permission,
15    ) -> impl Future<Output = Result<(), ForgeError>> + Send;
16
17    /// `PUT /repos/{owner}/{repo}/teams/{team}`.
18    fn add_team(
19        &self,
20        repo: &RepoRef,
21        team: &TeamName,
22        permission: Permission,
23    ) -> impl Future<Output = Result<(), ForgeError>> + Send;
24
25    /// `GET /repos/{owner}/{repo}/collaborators`, every page, then
26    /// `GET /repos/{owner}/{repo}/collaborators/{collaborator}/permission`
27    /// for each user.
28    fn collaborators(
29        &self,
30        repo: &RepoRef,
31    ) -> impl Future<Output = Result<Vec<Collaborator>, ForgeError>> + Send;
32
33    /// `GET /user`, the login of the authenticated user.
34    fn current_user(&self) -> impl Future<Output = Result<String, ForgeError>> + Send;
35
36    /// `GET /orgs/{org}/teams`, every page.
37    fn organization_teams(
38        &self,
39        organization: &str,
40    ) -> impl Future<Output = Result<Vec<Team>, ForgeError>> + Send;
41
42    /// `DELETE /repos/{owner}/{repo}/collaborators/{collaborator}`.
43    fn remove_collaborator(
44        &self,
45        repo: &RepoRef,
46        user: &str,
47    ) -> impl Future<Output = Result<(), ForgeError>> + Send;
48
49    /// `DELETE /repos/{owner}/{repo}/teams/{team}`.
50    fn remove_team(
51        &self,
52        repo: &RepoRef,
53        team: &str,
54    ) -> impl Future<Output = Result<(), ForgeError>> + Send;
55
56    /// `GET /repos/{owner}/{repo}/teams`.
57    fn teams(&self, repo: &RepoRef) -> impl Future<Output = Result<Vec<Team>, ForgeError>> + Send;
58
59    /// `GET /user/teams`, every page.
60    fn user_teams(&self) -> impl Future<Output = Result<Vec<Team>, ForgeError>> + Send;
61}