Skip to content

Commit affa80f

Browse files
domenkozarandreasabel
authored andcommitted
Implement organization membership endpoint
1 parent c54e7d6 commit affa80f

File tree

3 files changed

+66
-0
lines changed

3 files changed

+66
-0
lines changed

src/GitHub.hs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -173,6 +173,7 @@ module GitHub (
173173
membersOfWithR,
174174
isMemberOfR,
175175
orgInvitationsR,
176+
orgMembershipR,
176177
-- ** Outside Collaborators
177178
-- | See <https://developer.github.com/v3/orgs/outside_collaborators/>
178179
--

src/GitHub/Data/Definitions.hs

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -233,6 +233,63 @@ type QueryString = [(BS.ByteString, Maybe BS.ByteString)]
233233
-- | Count of elements
234234
type Count = Int
235235

236+
237+
238+
data MembershipRole
239+
= MembershipRoleMember
240+
| MembershipRoleAdmin
241+
| MembershipRoleBillingManager
242+
deriving
243+
(Eq, Ord, Show, Enum, Bounded, Generic, Typeable, Data)
244+
245+
instance NFData MembershipRole where rnf = genericRnf
246+
instance Binary MembershipRole
247+
248+
instance FromJSON MembershipRole where
249+
parseJSON = withText "MembershipRole" $ \t -> case T.toLower t of
250+
"member" -> pure MembershipRoleMember
251+
"admin" -> pure MembershipRoleAdmin
252+
"billing_manager" -> pure MembershipRoleBillingManager
253+
_ -> fail $ "Unknown MembershipRole: " <> T.unpack t
254+
255+
data MembershipState
256+
= MembershipPending
257+
| MembershipActive
258+
deriving (Show, Data, Typeable, Eq, Ord, Generic)
259+
260+
instance NFData MembershipState where rnf = genericRnf
261+
instance Binary MembershipState
262+
263+
instance FromJSON MembershipState where
264+
parseJSON = withText "MembershipState" $ \t -> case T.toLower t of
265+
"active" -> pure MembershipActive
266+
"pending" -> pure MembershipPending
267+
_ -> fail $ "Unknown MembershipState: " <> T.unpack t
268+
269+
270+
data Membership = Membership
271+
{ membershipUrl :: !URL
272+
, membershipState :: !MembershipState
273+
, membershipRole :: !MembershipRole
274+
, membershipOrganizationUrl :: !URL
275+
, membershipOrganization :: !SimpleOrganization
276+
, membershipUser :: !SimpleUser
277+
}
278+
deriving (Show, Data, Typeable, Eq, Ord, Generic)
279+
280+
instance NFData Membership where rnf = genericRnf
281+
instance Binary Membership
282+
283+
instance FromJSON Membership where
284+
parseJSON = withObject "Membership" $ \o -> Membership
285+
<$> o .: "url"
286+
<*> o .: "state"
287+
<*> o .: "role"
288+
<*> o .: "organization_url"
289+
<*> o .: "organization"
290+
<*> o .: "user"
291+
292+
236293
-------------------------------------------------------------------------------
237294
-- IssueNumber
238295
-------------------------------------------------------------------------------

src/GitHub/Endpoints/Organizations/Members.hs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ module GitHub.Endpoints.Organizations.Members (
77
membersOfWithR,
88
isMemberOfR,
99
orgInvitationsR,
10+
orgMembershipR,
1011
module GitHub.Data,
1112
) where
1213

@@ -48,3 +49,10 @@ isMemberOfR user org =
4849
-- See <https://developer.github.com/v3/orgs/members/#list-pending-organization-invitations>
4950
orgInvitationsR :: Name Organization -> FetchCount -> Request 'RA (Vector Invitation)
5051
orgInvitationsR org = pagedQuery ["orgs", toPathPart org, "invitations"] []
52+
53+
-- | Get user membership information in an organization
54+
--
55+
-- See <https://docs.github.com/en/rest/orgs/members#get-organization-membership-for-a-user>
56+
orgMembershipR :: Name User -> Name Organization -> Request 'RA Membership
57+
orgMembershipR user org =
58+
Query [ "orgs", toPathPart org, "memberships", toPathPart user ] []

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy