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)