diff --git a/src/GitHub.hs b/src/GitHub.hs
index da5e9f2b..b1f4849b 100644
--- a/src/GitHub.hs
+++ b/src/GitHub.hs
@@ -177,6 +177,7 @@ module GitHub (
membersOfWithR,
isMemberOfR,
orgInvitationsR,
+ orgMembershipR,
-- ** Outside Collaborators
-- | See
--
diff --git a/src/GitHub/Data/Definitions.hs b/src/GitHub/Data/Definitions.hs
index 0d56171b..9753436e 100644
--- a/src/GitHub/Data/Definitions.hs
+++ b/src/GitHub/Data/Definitions.hs
@@ -238,6 +238,63 @@ type QueryString = [(BS.ByteString, Maybe BS.ByteString)]
-- | Count of elements
type Count = Int
+
+
+data MembershipRole
+ = MembershipRoleMember
+ | MembershipRoleAdmin
+ | MembershipRoleBillingManager
+ deriving
+ (Eq, Ord, Show, Enum, Bounded, Generic, Typeable, Data)
+
+instance NFData MembershipRole where rnf = genericRnf
+instance Binary MembershipRole
+
+instance FromJSON MembershipRole where
+ parseJSON = withText "MembershipRole" $ \t -> case T.toLower t of
+ "member" -> pure MembershipRoleMember
+ "admin" -> pure MembershipRoleAdmin
+ "billing_manager" -> pure MembershipRoleBillingManager
+ _ -> fail $ "Unknown MembershipRole: " <> T.unpack t
+
+data MembershipState
+ = MembershipPending
+ | MembershipActive
+ deriving (Show, Data, Typeable, Eq, Ord, Generic)
+
+instance NFData MembershipState where rnf = genericRnf
+instance Binary MembershipState
+
+instance FromJSON MembershipState where
+ parseJSON = withText "MembershipState" $ \t -> case T.toLower t of
+ "active" -> pure MembershipActive
+ "pending" -> pure MembershipPending
+ _ -> fail $ "Unknown MembershipState: " <> T.unpack t
+
+
+data Membership = Membership
+ { membershipUrl :: !URL
+ , membershipState :: !MembershipState
+ , membershipRole :: !MembershipRole
+ , membershipOrganizationUrl :: !URL
+ , membershipOrganization :: !SimpleOrganization
+ , membershipUser :: !SimpleUser
+ }
+ deriving (Show, Data, Typeable, Eq, Ord, Generic)
+
+instance NFData Membership where rnf = genericRnf
+instance Binary Membership
+
+instance FromJSON Membership where
+ parseJSON = withObject "Membership" $ \o -> Membership
+ <$> o .: "url"
+ <*> o .: "state"
+ <*> o .: "role"
+ <*> o .: "organization_url"
+ <*> o .: "organization"
+ <*> o .: "user"
+
+
-------------------------------------------------------------------------------
-- IssueNumber
-------------------------------------------------------------------------------
diff --git a/src/GitHub/Endpoints/Organizations/Members.hs b/src/GitHub/Endpoints/Organizations/Members.hs
index 26a8f4c4..9b41cc13 100644
--- a/src/GitHub/Endpoints/Organizations/Members.hs
+++ b/src/GitHub/Endpoints/Organizations/Members.hs
@@ -10,6 +10,7 @@ module GitHub.Endpoints.Organizations.Members (
membersOfWithR,
isMemberOfR,
orgInvitationsR,
+ orgMembershipR,
module GitHub.Data,
) where
@@ -51,3 +52,10 @@ isMemberOfR user org =
-- See
orgInvitationsR :: Name Organization -> FetchCount -> Request 'RA (Vector Invitation)
orgInvitationsR org = pagedQuery ["orgs", toPathPart org, "invitations"] []
+
+-- | Get user membership information in an organization
+--
+-- See
+orgMembershipR :: Name User -> Name Organization -> Request 'RA Membership
+orgMembershipR user org =
+ Query [ "orgs", toPathPart org, "memberships", toPathPart user ] []
\ No newline at end of file