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 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131
//! The Organization API. mod list_repos; use crate::Octocrab; pub use self::list_repos::ListReposBuilder; /// A client to GitHub's organization API. /// /// Created with [`Octocrab::orgs`]. /// /// [`Octocrab::orgs`]: ../struct.Octocrab.html#method.orgs pub struct OrgHandler<'octo> { crab: &'octo Octocrab, owner: String, } impl<'octo> OrgHandler<'octo> { pub(crate) fn new(crab: &'octo Octocrab, owner: String) -> Self { Self { crab, owner } } /// Add or update organization membership /// /// **Note** /// - Only authenticated organization owners can add a member to the /// organization or update the member's role. /// - If the authenticated user is adding a member to the organization, the /// invited user will receive an email inviting them to the organization. /// The user's membership status will be pending until they accept /// the invitation. /// - Authenticated users can update a user's membership by passing the role /// parameter. If the authenticated user changes a member's role to admin, /// the affected user will receive an email notifying them that they've /// been made an organization owner. If the authenticated user changes an /// owner's role to member, no email will be sent. /// ```no_run /// # async fn run() -> octocrab::Result<()> { /// # let octocrab = octocrab::Octocrab::default(); /// let invitation = octocrab.orgs("owner").add_or_update_membership("ferris", None).await?; /// # Ok(()) /// # } /// ``` pub async fn add_or_update_membership( &self, username: impl AsRef<str>, role: Option<crate::params::orgs::Role>, ) -> crate::Result<crate::models::orgs::MembershipInvitation> { let url = format!( "/orgs/{org}/memberships/{username}", org = self.owner, username = username.as_ref(), ); let body = role.map(|role| serde_json::json!({ "role": role })); self.crab.post(url, body.as_ref()).await } /// Check if a user is, publicly or privately, a member of the organization. /// /// ```no_run /// # async fn run() -> octocrab::Result<()> { /// # let octocrab = octocrab::Octocrab::default(); /// assert!(octocrab.orgs("owner").check_membership("ferris").await?); /// # Ok(()) /// # } /// ``` pub async fn check_membership(&self, username: impl AsRef<str>) -> crate::Result<bool> { let url = format!( "/orgs/{org}/members/{username}", org = self.owner, username = username.as_ref(), ); let response = self .crab ._get(self.crab.absolute_url(url)?, None::<&()>) .await?; let status = response.status(); Ok(status == 204 || status == 301) } /// Get an organization /// /// To see many of the organization response values, you need to be an /// authenticated organization owner with the `admin:org` scope. When the /// value of `two_factor_requirement_enabled` is true, the organization /// requires all members, billing managers, and outside collaborators to /// enable two-factor authentication. /// ```no_run /// # async fn run() -> octocrab::Result<()> { /// # let octocrab = octocrab::Octocrab::default(); /// let org = octocrab.orgs("owner").get().await?; /// # Ok(()) /// # } /// ``` pub async fn get(&self) -> crate::Result<crate::models::orgs::Organization> { let route = format!("/orgs/{org}", org = self.owner); self.crab.get(route, None::<&()>).await } /// List repos for the specified organization. /// /// ```no_run /// # async fn run() -> octocrab::Result<()> { /// use octocrab::params; /// /// // Get the least active repos belonging to `owner`. /// let page = octocrab::instance() /// .orgs("owner") /// .list_repos() /// // Optional Parameters /// .repo_type(params::repos::Type::Sources) /// .sort(params::repos::Sort::Pushed) /// .direction(params::Direction::Descending) /// .per_page(25) /// .page(5u32) /// // Send the request. /// .send() /// .await?; /// # Ok(()) /// # } /// ``` pub fn list_repos(&self) -> list_repos::ListReposBuilder { list_repos::ListReposBuilder::new(self) } }