Copyright | (c) Naoto Shimazaki 20172018 |
---|---|
License | MIT (see the file LICENSE) |
Maintainer | https://github.com/nshimaza |
Stability | experimental |
Safe Haskell | None |
Language | Haskell2010 |
This module provides types and functions for accessing Cisco Webex Teams REST API.
The module is designed to improve type safety over the API. Each entity is separately typed. JSON messages contained in REST responses are decoded into appropriate type of Haskell record. JSON messages sent in REST requests are encoded only from correct type of record.
Some Webex Teams REST API return list of objects. Those APIs require HTTP Link Header based pagination. Haskell functions for those APIs automatically request subsequent pages as needed.
Examples
-- Sending a message to a room. let auth = Authorization "your authorization token" roomId = RoomId "Room ID your message to be sent" messageText = MessageText "your message" message = CreateMessage (Just roomId) Nothing Nothing (Just messageText) Nothing Nothing createEntity auth def createMessage >>= print . getResponseBody -- Obtaining detail of a user. let personId = PersonId "your person ID" getDetail auth def personId >>= print . getResponseBody -- Obtaining membership of a room as stream of object representing each membership relation. let filter = MembershipFilter yourRoomId Nothing Nothing runConduit $ streamListWithFilter auth def filter .| takeC 200 .| mapM_C print -- Create a room. let createRoom = CreateRoom "Title of the new room" Nothing createEntity auth def createRoom >>= print . getResponseBody -- Delete a room. deleteRoom auth def roomId >>= print . getResponseBody
List and steaming
The WebexTeams
module doesn't provide streaming API for REST response returning list of entities.
It is because the author of the package wants to keep it streaming library agnostic. Instead, it provides
ListReader
IO action to read list responses with automatic pagenation. Streaming APIs can be found in
separate packages like webex-teams-pipes or webex-teams-conduit.
Support for Lens
This package provides many of records representing objects communicated via Webex Teams REST API. Those records are designed to allow create lenses by Control.Lens.TH.makeFields.
Following example creates overloaded accessors for Person
, Room
and Team
.
makeFields ''Person makeFields ''Room makeFields ''Team
You can access personId
, roomId
and teamId
via overloaded accessor function id
like this.
let yourPersonId = yourPerson ^. id yourRoomId = yourRoom ^. id yourTeamId = yourTeam ^. id
This package does not provide pre-generated lenses for you because not everyone need it but you can make it by yourself so easily as described.
- class (WebexTeamsApiPath a, WebexTeamsResponse a) => WebexTeamsFilter a
- class FromJSON (ToList i) => WebexTeamsListItem i
- newtype Authorization = Authorization ByteString
- type CiscoSparkRequest = WebexTeamsRequest
- data WebexTeamsRequest = WebexTeamsRequest {}
- newtype Timestamp = Timestamp Text
- newtype ErrorCode = ErrorCode Text
- data ErrorTitle = ErrorTitle {}
- newtype Errors = Errors {}
- data Person = Person {
- personId :: PersonId
- personErrors :: Maybe Errors
- personEmails :: Maybe [Email]
- personDisplayName :: Maybe DisplayName
- personNickName :: Maybe NickName
- personFirstName :: Maybe FirstName
- personLastName :: Maybe LastName
- personAvatar :: Maybe AvatarUrl
- personOrgId :: Maybe OrganizationId
- personRoles :: Maybe [RoleId]
- personLicenses :: Maybe [LicenseId]
- personCreated :: Maybe Timestamp
- personTimezone :: Maybe Timezone
- personLastActivity :: Maybe Timestamp
- personStatus :: Maybe PersonStatus
- personInvitePending :: Maybe Bool
- personLoginEnabled :: Maybe Bool
- personType :: Maybe PersonType
- newtype PersonId = PersonId Text
- newtype Email = Email Text
- newtype DisplayName = DisplayName Text
- newtype NickName = NickName Text
- newtype FirstName = FirstName Text
- newtype LastName = LastName Text
- newtype AvatarUrl = AvatarUrl Text
- newtype Timezone = Timezone Text
- data PersonStatus
- data PersonType
- newtype PersonList = PersonList {
- personListItems :: [Person]
- data PersonFilter = PersonFilter {}
- data CreatePerson = CreatePerson {
- createPersonEmails :: Maybe [Email]
- createPersonDisplayName :: Maybe DisplayName
- createPersonFirstName :: Maybe FirstName
- createPersonLastName :: Maybe LastName
- createPersonAvatar :: Maybe AvatarUrl
- createPersonOrgId :: Maybe OrganizationId
- createPersonRoles :: Maybe [RoleId]
- createPersonLicenses :: Maybe [LicenseId]
- data UpdatePerson = UpdatePerson {}
- data Room = Room {}
- newtype RoomId = RoomId Text
- newtype RoomTitle = RoomTitle Text
- data RoomType
- newtype SipAddr = SipAddr Text
- newtype RoomList = RoomList {
- roomListItems :: [Room]
- data RoomFilter = RoomFilter {}
- data RoomFilterSortBy
- data CreateRoom = CreateRoom {}
- newtype UpdateRoom = UpdateRoom {}
- data Membership = Membership {
- membershipId :: MembershipId
- membershipErrors :: Maybe Errors
- membershipRoomId :: Maybe RoomId
- membershipPersonId :: Maybe PersonId
- membershipPersonEmail :: Maybe Email
- membershipPersonDisplayName :: Maybe DisplayName
- membershipPersonOrgId :: Maybe OrganizationId
- membershipIsModerator :: Maybe Bool
- membershipIsMonitor :: Maybe Bool
- membershipCreated :: Maybe Timestamp
- newtype MembershipId = MembershipId Text
- newtype MembershipList = MembershipList {}
- data MembershipFilter = MembershipFilter {}
- data CreateMembership = CreateMembership {}
- newtype UpdateMembership = UpdateMembership {}
- data Message = Message {
- messageId :: MessageId
- messageErrors :: Maybe Errors
- messageRoomId :: Maybe RoomId
- messageRoomType :: Maybe RoomType
- messageToPersonId :: Maybe PersonId
- messageToPersonEmail :: Maybe Email
- messageText :: Maybe MessageText
- messageHtml :: Maybe MessageHtml
- messageFiles :: Maybe [FileUrl]
- messagePersonId :: Maybe PersonId
- messagePersonEmail :: Maybe Email
- messageCreated :: Maybe Timestamp
- messageMentionedPeople :: Maybe [PersonId]
- newtype MessageId = MessageId Text
- newtype MessageText = MessageText Text
- newtype MessageHtml = MessageHtml Text
- newtype MessageMarkdown = MessageMarkdown Text
- newtype FileUrl = FileUrl Text
- newtype MessageList = MessageList {
- messageListItems :: [Message]
- data MessageFilter = MessageFilter {}
- data MentionedPeople
- data CreateMessage = CreateMessage {}
- newtype TeamName = TeamName Text
- newtype TeamId = TeamId Text
- data Team = Team {}
- newtype TeamList = TeamList {
- teamListItems :: [Team]
- newtype CreateTeam = CreateTeam {}
- newtype UpdateTeam = UpdateTeam {}
- data TeamMembership = TeamMembership {
- teamMembershipId :: TeamMembershipId
- teamMembershipErrors :: Maybe Errors
- teamMembershipTeamId :: Maybe TeamId
- teamMembershipPersonId :: Maybe PersonId
- teamMembershipPersonEmail :: Maybe Email
- teamMembershipPersonDisplayName :: Maybe DisplayName
- teamMembershipPersonOrgId :: Maybe OrganizationId
- teamMembershipIsModerator :: Maybe Bool
- teamMembershipCreated :: Maybe Timestamp
- newtype TeamMembershipId = TeamMembershipId Text
- newtype TeamMembershipList = TeamMembershipList {}
- newtype TeamMembershipFilter = TeamMembershipFilter {}
- data CreateTeamMembership = CreateTeamMembership {}
- newtype UpdateTeamMembership = UpdateTeamMembership {}
- data Organization = Organization {}
- newtype OrganizationId = OrganizationId Text
- newtype OrganizationDisplayName = OrganizationDisplayName Text
- newtype OrganizationList = OrganizationList {}
- data License = License {}
- newtype LicenseId = LicenseId Text
- newtype LicenseName = LicenseName Text
- newtype LicenseUnit = LicenseUnit Integer
- newtype LicenseList = LicenseList {
- licenseListItems :: [License]
- newtype LicenseFilter = LicenseFilter {}
- data Role = Role {}
- newtype RoleId = RoleId Text
- newtype RoleName = RoleName Text
- newtype RoleList = RoleList {
- roleListItems :: [Role]
- getDetail :: (MonadIO m, WebexTeamsDetail key) => Authorization -> WebexTeamsRequest -> key -> m (Response (ToResponse key))
- getDetailEither :: (MonadIO m, WebexTeamsDetail key) => Authorization -> WebexTeamsRequest -> key -> m (Response (Either JSONException (ToResponse key)))
- type ListReader a = IO [a]
- getListWithFilter :: (MonadIO m, WebexTeamsFilter filter, WebexTeamsListItem (ToResponse filter)) => Authorization -> WebexTeamsRequest -> filter -> m (ListReader (ToResponse filter))
- getTeamList :: MonadIO m => Authorization -> WebexTeamsRequest -> m (ListReader Team)
- getOrganizationList :: MonadIO m => Authorization -> WebexTeamsRequest -> m (ListReader Organization)
- getRoleList :: MonadIO m => Authorization -> WebexTeamsRequest -> m (ListReader Role)
- streamEntityWithFilter :: (MonadIO m, WebexTeamsFilter filter, WebexTeamsListItem (ToResponse filter)) => Authorization -> WebexTeamsRequest -> filter -> ConduitT () (ToResponse filter) m ()
- streamTeamList :: MonadIO m => Authorization -> WebexTeamsRequest -> ConduitT () Team m ()
- streamOrganizationList :: MonadIO m => Authorization -> WebexTeamsRequest -> ConduitT () Organization m ()
- streamRoleList :: MonadIO m => Authorization -> WebexTeamsRequest -> ConduitT () Role m ()
- createEntity :: (MonadIO m, WebexTeamsCreate createParams) => Authorization -> WebexTeamsRequest -> createParams -> m (Response (ToResponse createParams))
- createEntityEither :: (MonadIO m, WebexTeamsCreate createParams) => Authorization -> WebexTeamsRequest -> createParams -> m (Response (Either JSONException (ToResponse createParams)))
- updateEntity :: (MonadIO m, WebexTeamsUpdate updateParams) => Authorization -> WebexTeamsRequest -> updateParams -> m (Response (ToResponse updateParams))
- updateEntityEither :: (MonadIO m, WebexTeamsUpdate updateParams) => Authorization -> WebexTeamsRequest -> updateParams -> m (Response (Either JSONException (ToResponse updateParams)))
- defaultMessageFilter :: RoomId -> MessageFilter
- defaultTeamMembershipFilter :: TeamId -> TeamMembershipFilter
- deleteRoom :: MonadIO m => Authorization -> WebexTeamsRequest -> RoomId -> m (Response ())
- deleteMembership :: MonadIO m => Authorization -> WebexTeamsRequest -> MembershipId -> m (Response ())
- deleteMessage :: MonadIO m => Authorization -> WebexTeamsRequest -> MessageId -> m (Response ())
- deleteTeam :: MonadIO m => Authorization -> WebexTeamsRequest -> TeamId -> m (Response ())
- deleteTeamMembership :: MonadIO m => Authorization -> WebexTeamsRequest -> TeamMembershipId -> m (Response ())
Types
Class and Type Families
class (WebexTeamsApiPath a, WebexTeamsResponse a) => WebexTeamsFilter a Source #
Convert given filter condition parameter in a concrete type to HTTP query strings.
WebexTeamsFilter PersonFilter Source # | User can list people with filter parameter. |
WebexTeamsFilter TeamMembershipFilter Source # | User can list team membership with filter parameter. |
WebexTeamsFilter RoomFilter Source # | User can list rooms with filter parameter. |
WebexTeamsFilter MembershipFilter Source # | User can list memberships with filter parameter. |
WebexTeamsFilter MessageFilter Source # | User can list messages with filter parameter. |
WebexTeamsFilter LicenseFilter Source # | User can list licenses with filter parameter. |
WebexTeamsFilter WebhookRoomFilter Source # | User can filter Webhook events from room. |
WebexTeamsFilter WebhookMessageFilter Source # | User can filter Webhook events from message. |
WebexTeamsFilter WebhookMembershipFilter Source # | User can filter Webhook events from membership. |
class FromJSON (ToList i) => WebexTeamsListItem i Source #
WebexTeamsListItem is a type class grouping types with following common usage.
- It is used for return value of get-detail APIs.
- It is used for element of return value of list APIs.
WebexTeamsListItem also associates the above type to wrapping list type (e.g. associates Person
to PersonList
).
Wrapping type (PersonList in this case) is necessary for parsing JSON from REST API but what we are
interested in is bare list such like [Person]. Type family association defined in this class
is used for type translation from type of items to type of wrapper.
Common Types
newtype Authorization Source #
Authorization string against Webex Teams API to be contained in HTTP Authorization header of every request.
type CiscoSparkRequest = WebexTeamsRequest Source #
Type synonym for backward compatibility.
data WebexTeamsRequest Source #
Wrapping Request
in order to provide easy default value specifically for Webex Teams public API.
WebexTeamsRequest | |
|
Show WebexTeamsRequest Source # | |
Default WebexTeamsRequest Source # | Default parameters for HTTP request to Webex Teams REST API. |
Type representing timestamp. For now, it is just copied from API response JSON.
Error code for element level error potentially contained in List API responses.
data ErrorTitle Source #
ErrorTitle
represent concrete error code and reason. It appears in Errors
.
ErrorTitle | |
|
Eq ErrorTitle Source # | |
Show ErrorTitle Source # | |
ToJSON ErrorTitle Source # | |
FromJSON ErrorTitle Source # |
|
Errors
is used for element level error in List API.
When list API failed to retrieve an element, it returns this object for the element
and response API status as successful instead of failing entire API request.
Refer to API Document for more detail.
People related types
Person
is detail description of Webex Teams user or bot.
Person is decoded from response JSON of Get Person Details REST call.
It is also element type of response of List People call.
Person | |
|
Identifying Person
describing detail of Webex Teams user or bot.
Eq PersonId Source # | |
Show PersonId Source # | |
Generic PersonId Source # | |
ToJSON PersonId Source # | |
FromJSON PersonId Source # | |
WebexTeamsDetail PersonId Source # | User can get detail of a person. |
WebexTeamsResponse PersonId Source # | Get detail for a person API uses "PersonId' and responses |
WebexTeamsApiPath PersonId Source # | Get detail for a person API uses |
type Rep PersonId Source # | |
type ToResponse PersonId Source # | |
Email address of user.
newtype DisplayName Source #
Display name of user.
Nickname of user.
First name of user.
Last name of user.
URL pointing to image file of Avatar.
Timezone in timezone name.
data PersonStatus Source #
Current status of Person
.
It can be updated automatically by recent activity or explicitly updated by user's operation
or propagated from vacation setting on email system.
PersonStatusActive | The |
PersonStatusInactive | The |
PersonStatusOutOfOffice | Email system of the |
PersonStatusDoNotDisturb | The |
PersonStatusUnknown | The status of the |
Eq PersonStatus Source # | |
Show PersonStatus Source # | |
Generic PersonStatus Source # | |
ToJSON PersonStatus Source # |
|
FromJSON PersonStatus Source # |
|
type Rep PersonStatus Source # | |
data PersonType Source #
PersonType
indicates whether the Person is real human or bot.
PersonTypePerson | The |
PersonTypeBot | The |
Eq PersonType Source # | |
Show PersonType Source # | |
ToJSON PersonType Source # | |
FromJSON PersonType Source # |
|
newtype PersonList Source #
PersonList
is decoded from response JSON of List People REST call. It is list of Person
.
Eq PersonList Source # | |
Show PersonList Source # | |
ToJSON PersonList Source # | |
FromJSON PersonList Source # |
|
data PersonFilter Source #
Optional query strings for people list API.
PersonFilter | |
|
Eq PersonFilter Source # | |
Show PersonFilter Source # | |
Generic PersonFilter Source # | |
Default PersonFilter Source # | |
WebexTeamsFilter PersonFilter Source # | User can list people with filter parameter. |
WebexTeamsResponse PersonFilter Source # | List people API uses |
WebexTeamsApiPath PersonFilter Source # | List people API uses |
type Rep PersonFilter Source # | |
type ToResponse PersonFilter Source # | |
data CreatePerson Source #
CreatePerson
is encoded to request body JSON of Create a Person REST call.
CreatePerson | |
|
Eq CreatePerson Source # | |
Show CreatePerson Source # | |
ToJSON CreatePerson Source # | |
FromJSON CreatePerson Source # |
|
WebexTeamsCreate CreatePerson Source # | User can create a person. |
WebexTeamsResponse CreatePerson Source # | Create person API uses "CreatePerson' and responses |
WebexTeamsApiPath CreatePerson Source # | Create person API uses |
type ToResponse CreatePerson Source # | |
data UpdatePerson Source #
UpdatePerson
is encoded to request body JSON of Update a Person REST call.
UpdatePerson | |
|
Eq UpdatePerson Source # | |
Show UpdatePerson Source # | |
ToJSON UpdatePerson Source # | |
FromJSON UpdatePerson Source # |
|
WebexTeamsUpdate UpdatePerson Source # | User can update a person. |
WebexTeamsResponse UpdatePerson Source # | Update person API uses "UpdatePerson' and responses |
WebexTeamsApiPath UpdatePerson Source # | Update person API uses |
type ToResponse UpdatePerson Source # | |
Room related types
Room
is communication space in Webex Teams and called "Space" on UI.
Historically it was called Room on UI too but UI has been changed to "Space" in order to avoid
confusion with the concept "Room" associated to hardware facility of video conferencing on Webex Teams.
The name of Room is kept unchanged for backward compatibility.
Room is decoded from response JSON of Get Room Details REST call. It is also element type of response of List Rooms call.
Room | |
|
Identifying Room
.
Eq RoomId Source # | |
Show RoomId Source # | |
Generic RoomId Source # | |
ToJSON RoomId Source # | |
FromJSON RoomId Source # | |
WebexTeamsDetail RoomId Source # | User can get detail of a room. |
WebexTeamsResponse RoomId Source # | Get detail for a room API uses "RoomId' and responses |
WebexTeamsApiPath RoomId Source # | Get detail for a room API uses |
type Rep RoomId Source # | |
type ToResponse RoomId Source # | |
Title text of Room
.
RoomTypeDirect | The Room is for 1:1. Decoded from "direct". |
RoomTypeGroup | The Room is for group. Decoded from "group". |
SIP address.
RoomList | |
|
data RoomFilter Source #
Optional query strings for room list API
RoomFilter | |
|
Eq RoomFilter Source # | |
Show RoomFilter Source # | |
Generic RoomFilter Source # | |
Default RoomFilter Source # | |
WebexTeamsFilter RoomFilter Source # | User can list rooms with filter parameter. |
WebexTeamsResponse RoomFilter Source # | List rooms API uses |
WebexTeamsApiPath RoomFilter Source # | List rooms API uses |
type Rep RoomFilter Source # | |
type ToResponse RoomFilter Source # | |
data RoomFilterSortBy Source #
Sorting option for room list API.
data CreateRoom Source #
CreateRoom
is encoded to request body JSON of Create a Room REST call.
CreateRoom | |
|
Eq CreateRoom Source # | |
Show CreateRoom Source # | |
ToJSON CreateRoom Source # | |
FromJSON CreateRoom Source # |
|
WebexTeamsCreate CreateRoom Source # | User can create a room. |
WebexTeamsResponse CreateRoom Source # | Create room API uses "CreateRoom' and responses |
WebexTeamsApiPath CreateRoom Source # | Create room API uses |
type ToResponse CreateRoom Source # | |
newtype UpdateRoom Source #
UpdateRoom
is encoded to request body JSON of Update a Room REST call.
Eq UpdateRoom Source # | |
Show UpdateRoom Source # | |
ToJSON UpdateRoom Source # | |
FromJSON UpdateRoom Source # |
|
WebexTeamsUpdate UpdateRoom Source # | User can update a room. |
WebexTeamsResponse UpdateRoom Source # | Update room API uses "UpdateRoom' and responses |
WebexTeamsApiPath UpdateRoom Source # | Update room API uses |
type ToResponse UpdateRoom Source # | |
Membership related types
data Membership Source #
Membership
is association between Room
and Person
.
It can be N:N relation. A Person can belong to multiple Room.
Membership is decoded from response JSON of Get Membership Details REST call.
It is also element type of response of List Memberships call.
Membership | |
|
Eq Membership Source # | |
Show Membership Source # | |
ToJSON Membership Source # | |
FromJSON Membership Source # |
|
WebexTeamsListItem Membership Source # |
|
type ToList Membership Source # | |
newtype MembershipId Source #
Identifying Membership
.
Eq MembershipId Source # | |
Show MembershipId Source # | |
Generic MembershipId Source # | |
ToJSON MembershipId Source # | |
FromJSON MembershipId Source # | |
WebexTeamsDetail MembershipId Source # | User can get detail of a membership. |
WebexTeamsResponse MembershipId Source # | Get detail for a membership API uses "MembershipId' and responses |
WebexTeamsApiPath MembershipId Source # | Get detail for a membership API uses |
type Rep MembershipId Source # | |
type ToResponse MembershipId Source # | |
newtype MembershipList Source #
MembershipList
is decoded from response JSON of List Memberships REST call. It is list of Membership
.
Eq MembershipList Source # | |
Show MembershipList Source # | |
ToJSON MembershipList Source # | |
FromJSON MembershipList Source # |
|
data MembershipFilter Source #
Optional query strings for room membership list API
MembershipFilter | |
|
Eq MembershipFilter Source # | |
Show MembershipFilter Source # | |
Generic MembershipFilter Source # | |
Default MembershipFilter Source # | |
WebexTeamsFilter MembershipFilter Source # | User can list memberships with filter parameter. |
WebexTeamsResponse MembershipFilter Source # | List memberships API uses |
WebexTeamsApiPath MembershipFilter Source # | List memberships API uses |
type Rep MembershipFilter Source # | |
type ToResponse MembershipFilter Source # | |
data CreateMembership Source #
CreateMembership
is encoded to request body JSON of Create a Membership REST call.
CreateMembership | |
|
Eq CreateMembership Source # | |
Show CreateMembership Source # | |
ToJSON CreateMembership Source # | |
FromJSON CreateMembership Source # |
|
WebexTeamsCreate CreateMembership Source # | User can create a membership. |
WebexTeamsResponse CreateMembership Source # | Create membership API uses "CreateMembership' and responses |
WebexTeamsApiPath CreateMembership Source # | Create membership API uses |
type ToResponse CreateMembership Source # | |
newtype UpdateMembership Source #
UpdateMembership
is encoded to request body JSON of Update a Membership REST call.
Eq UpdateMembership Source # | |
Show UpdateMembership Source # | |
ToJSON UpdateMembership Source # | |
FromJSON UpdateMembership Source # |
|
WebexTeamsUpdate UpdateMembership Source # | User can update a membership. |
WebexTeamsResponse UpdateMembership Source # | Update membership API uses "UpdateMembership' and responses |
WebexTeamsApiPath UpdateMembership Source # | Update membership API uses |
type ToResponse UpdateMembership Source # | |
Message related types
Message
is a message posted to a Room
by some Person
.
Room is decoded from response JSON of Get Message Details REST call.
It is also element type of response of List Messages call.
Message | |
|
Identifying Message
.
Eq MessageId Source # | |
Show MessageId Source # | |
Generic MessageId Source # | |
ToJSON MessageId Source # | |
FromJSON MessageId Source # | |
WebexTeamsDetail MessageId Source # | User can get detail of a message. |
WebexTeamsResponse MessageId Source # | Get detail for a message API uses "MessageId' and responses |
WebexTeamsApiPath MessageId Source # | Get detail for message API uses |
type Rep MessageId Source # | |
type ToResponse MessageId Source # | |
newtype MessageText Source #
Body of message in plain text.
newtype MessageHtml Source #
Body of message in html.
newtype MessageMarkdown Source #
Body of message in markdown.
URL pointing attached file of message.
newtype MessageList Source #
MessageList
is decoded from response JSON of List Messages REST call. It is list of Message
.
Eq MessageList Source # | |
Show MessageList Source # | |
ToJSON MessageList Source # | |
FromJSON MessageList Source # |
|
data MessageFilter Source #
Optional query strings for message list API
MessageFilter | |
|
Eq MessageFilter Source # | |
Show MessageFilter Source # | |
WebexTeamsFilter MessageFilter Source # | User can list messages with filter parameter. |
WebexTeamsResponse MessageFilter Source # | List messages API uses |
WebexTeamsApiPath MessageFilter Source # | List messages API uses |
type ToResponse MessageFilter Source # | |
data MentionedPeople Source #
Sum type for mentionedPeople query string. It can be "me" or PersonId
.
data CreateMessage Source #
CreateMessage
is encoded to request body JSON of Create a Message REST call.
CreateMessage | |
|
Eq CreateMessage Source # | |
Show CreateMessage Source # | |
ToJSON CreateMessage Source # | |
FromJSON CreateMessage Source # |
|
WebexTeamsCreate CreateMessage Source # | User can create a message. |
WebexTeamsResponse CreateMessage Source # | Create message API uses "CreateMessage' and responses |
WebexTeamsApiPath CreateMessage Source # | Create message API uses |
type ToResponse CreateMessage Source # | |
Team related types
Name of Team
Identifying Team.
Eq TeamId Source # | |
Show TeamId Source # | |
Generic TeamId Source # | |
ToJSON TeamId Source # | |
FromJSON TeamId Source # | |
WebexTeamsDetail TeamId Source # | User can get detail of a team. |
WebexTeamsResponse TeamId Source # | Get detail for a team API uses "TeamId' and responses |
WebexTeamsApiPath TeamId Source # | Get detail for a team API uses |
type Rep TeamId Source # | |
type ToResponse TeamId Source # | |
Team
is group of Person
and group of Room
.
A Person can belong to multiple Team but a Room can belong to at most one Team.
Team is decoded from response JSON of Get Team Details REST call.
It is also element type of response of List Teams call.
Team | |
|
TeamList | |
|
newtype CreateTeam Source #
CreateTeam
is encoded to request body JSON of Create a Team REST call.
Eq CreateTeam Source # | |
Show CreateTeam Source # | |
ToJSON CreateTeam Source # | |
FromJSON CreateTeam Source # |
|
WebexTeamsCreate CreateTeam Source # | User can create a team. |
WebexTeamsResponse CreateTeam Source # | Create team API uses "CreateTeam' and responses |
WebexTeamsApiPath CreateTeam Source # | Create team API uses |
type ToResponse CreateTeam Source # | |
newtype UpdateTeam Source #
UpdateTeam
is encoded to request body JSON of Update a Team REST call.
Eq UpdateTeam Source # | |
Show UpdateTeam Source # | |
ToJSON UpdateTeam Source # | |
FromJSON UpdateTeam Source # |
|
WebexTeamsUpdate UpdateTeam Source # | User can update a team. |
WebexTeamsResponse UpdateTeam Source # | Update team API uses "UpdateTeam' and responses |
WebexTeamsApiPath UpdateTeam Source # | Update team API uses |
type ToResponse UpdateTeam Source # | |
Team Membership related types
data TeamMembership Source #
TeamMembership
is association between Team
and Person
.
It can be N:N relation. A Person can belong to multiple Team.
TeamMembership is decoded from response JSON of Get Team Membership Details REST call.
It is also element type of response of List Team Memberships call.
TeamMembership | |
|
Eq TeamMembership Source # | |
Show TeamMembership Source # | |
ToJSON TeamMembership Source # | |
FromJSON TeamMembership Source # |
|
WebexTeamsListItem TeamMembership Source # | |
type ToList TeamMembership Source # | |
newtype TeamMembershipId Source #
Identifying TeamMembership.
Eq TeamMembershipId Source # | |
Show TeamMembershipId Source # | |
Generic TeamMembershipId Source # | |
ToJSON TeamMembershipId Source # | |
FromJSON TeamMembershipId Source # | |
WebexTeamsDetail TeamMembershipId Source # | User can get detail of a team membership. |
WebexTeamsResponse TeamMembershipId Source # | Get detail for a team membership API uses "TeamMembershipId' and responses |
WebexTeamsApiPath TeamMembershipId Source # | Get detail for a team membership API uses |
type Rep TeamMembershipId Source # | |
type ToResponse TeamMembershipId Source # | |
newtype TeamMembershipList Source #
TeamMembershipList
is decoded from response JSON of List Team Memberships REST call. It is list of TeamMembership
.
Eq TeamMembershipList Source # | |
Show TeamMembershipList Source # | |
ToJSON TeamMembershipList Source # | |
FromJSON TeamMembershipList Source # |
|
newtype TeamMembershipFilter Source #
Optional query strings for team membership list API
TeamMembershipFilter | |
|
Eq TeamMembershipFilter Source # | |
Show TeamMembershipFilter Source # | |
WebexTeamsFilter TeamMembershipFilter Source # | User can list team membership with filter parameter. |
WebexTeamsResponse TeamMembershipFilter Source # | List team memberships API uses |
WebexTeamsApiPath TeamMembershipFilter Source # | List team memberships API uses |
type ToResponse TeamMembershipFilter Source # | |
data CreateTeamMembership Source #
CreateTeamMembership
is encoded to request body JSON of Create a Team Membership REST call.
CreateTeamMembership | |
|
Eq CreateTeamMembership Source # | |
Show CreateTeamMembership Source # | |
ToJSON CreateTeamMembership Source # | |
FromJSON CreateTeamMembership Source # |
|
WebexTeamsCreate CreateTeamMembership Source # | User can create a teamMembership. |
WebexTeamsResponse CreateTeamMembership Source # | Create teamMembership API uses "CreateTeamMembership' and responses |
WebexTeamsApiPath CreateTeamMembership Source # | Create teamMembership API uses |
type ToResponse CreateTeamMembership Source # | |
newtype UpdateTeamMembership Source #
UpdateTeamMembership
is encoded to request body JSON of Update a Team Membership REST call.
Eq UpdateTeamMembership Source # | |
Show UpdateTeamMembership Source # | |
ToJSON UpdateTeamMembership Source # | |
FromJSON UpdateTeamMembership Source # |
|
WebexTeamsUpdate UpdateTeamMembership Source # | User can update a teamMembership. |
WebexTeamsResponse UpdateTeamMembership Source # | Update teamMembership API uses "UpdateTeamMembership' and responses |
WebexTeamsApiPath UpdateTeamMembership Source # | Update teamMembership API uses |
type ToResponse UpdateTeamMembership Source # | |
Organization related types
data Organization Source #
Organization
is an administrative group of Webex Teams users.
Each Person
belongs to one Organization.
Organization is decoded from response JSON of Get Organization Details REST call.
It is also element type of response of List Organizations call.
Organization | |
|
Eq Organization Source # | |
Show Organization Source # | |
ToJSON Organization Source # | |
FromJSON Organization Source # |
|
WebexTeamsListItem Organization Source # |
|
type ToList Organization Source # | |
newtype OrganizationId Source #
Organization
identifier which user or team belongs to.
Eq OrganizationId Source # | |
Show OrganizationId Source # | |
Generic OrganizationId Source # | |
ToJSON OrganizationId Source # | |
FromJSON OrganizationId Source # | |
WebexTeamsDetail OrganizationId Source # | User can get detail of a organization. |
WebexTeamsResponse OrganizationId Source # | Get detail for a organization API uses "OrganizationId' and responses |
WebexTeamsApiPath OrganizationId Source # | Get detail for organization API uses |
type Rep OrganizationId Source # | |
type ToResponse OrganizationId Source # | |
newtype OrganizationDisplayName Source #
Display name of Organization
newtype OrganizationList Source #
OrganizationList
is decoded from response JSON of List Organizations REST call. It is list of Organization
.
Eq OrganizationList Source # | |
Show OrganizationList Source # | |
ToJSON OrganizationList Source # | |
FromJSON OrganizationList Source # |
|
License related types
License
is allowance for features and services of Webex Teams subscription.
License is decoded from response JSON of Get License Details REST call.
It is also element type of response of List Licenses call.
License | |
|
Eq LicenseId Source # | |
Show LicenseId Source # | |
Generic LicenseId Source # | |
ToJSON LicenseId Source # | |
FromJSON LicenseId Source # | |
WebexTeamsDetail LicenseId Source # | User can get detail of a license. |
WebexTeamsResponse LicenseId Source # | Get detail for a license API uses "LicenseId' and responses |
WebexTeamsApiPath LicenseId Source # | Get detail for license API uses |
type Rep LicenseId Source # | |
type ToResponse LicenseId Source # | |
newtype LicenseName Source #
Display name of License
newtype LicenseUnit Source #
Counting number of granted or consumed License
newtype LicenseList Source #
LicenseList
is decoded from response JSON of List Licenses REST call. It is list of License
.
Eq LicenseList Source # | |
Show LicenseList Source # | |
ToJSON LicenseList Source # | |
FromJSON LicenseList Source # |
|
newtype LicenseFilter Source #
Optional query strings for license list API
LicenseFilter | |
|
Eq LicenseFilter Source # | |
Show LicenseFilter Source # | |
Generic LicenseFilter Source # | |
Default LicenseFilter Source # | |
WebexTeamsFilter LicenseFilter Source # | User can list licenses with filter parameter. |
WebexTeamsResponse LicenseFilter Source # | List licenses API uses |
WebexTeamsApiPath LicenseFilter Source # | List licenses API uses |
type Rep LicenseFilter Source # | |
type ToResponse LicenseFilter Source # | |
Role related types
A persona for an authenticated user, corresponding to a set of privileges within an organization. Role is decoded from response JSON of Get Role Details REST call. It is also element type of response of List Roles call.
Eq RoleId Source # | |
Show RoleId Source # | |
Generic RoleId Source # | |
ToJSON RoleId Source # | |
FromJSON RoleId Source # | |
WebexTeamsDetail RoleId Source # | User can get detail of a role. |
WebexTeamsResponse RoleId Source # | Get detail for a role API uses "RoleId' and responses |
WebexTeamsApiPath RoleId Source # | Get detail for role API uses |
type Rep RoleId Source # | |
type ToResponse RoleId Source # | |
Name of Role
.
RoleList | |
|
Functions
Getting detail of an entity
:: (MonadIO m, WebexTeamsDetail key) | |
=> Authorization | Authorization string against Webex Teams API. |
-> WebexTeamsRequest | Predefined part of |
-> key | One of PersonId, RoomId, MembershipId, MessageId, TeamId, TeamMembershipId, OrganizationId, LicenseId and RoleId. |
-> m (Response (ToResponse key)) |
Get details of a Webex Teams entity.
Obtaining detail of an entity identified by key. The key can be a value in one of
following types: PersonId
, RoomId
, MembershipId
, MessageId
, TeamId
, TeamMembershipId
,
OrganizationId
, LicenseId
, RoleId
. API is automatically selected by type of the key.
A JSONException runtime exception will be thrown on an JSON parse errors.
getDetailEither :: (MonadIO m, WebexTeamsDetail key) => Authorization -> WebexTeamsRequest -> key -> m (Response (Either JSONException (ToResponse key))) Source #
Get details of a Webex Teams entity. A Left value will be returned on an JSON parse errors.
Streaming response of List API with auto pagenation
type ListReader a = IO [a] Source #
ListReader
is IO action returned by functions for list API (getListWithFilter
, getTeamList
etc).
It is containing URL inside to be accessed. When you call the IO action, it accesses to Webex Teams REST API,
parse next page URL if available, then return new IO action. The new IO action contains list of responded items and
new URL for next page so you can call the new IO action to get the next page.
Following example demonstrates how you can get all items into single list.
readAllList :: ListReader i -> IO [i] readAllList reader = go [] where go xs = reader >>= chunk -> case chunk of [] -> pure xs ys -> go (xs <> ys)
Note that this example is only for explaining how ListReader
works. Practically you should not do the above
because it eagerly creates entire list. You should use streaming APIs instead. Streaming APIs are available via
webex-teams-conduit and webex-teams-pipes package.
getListWithFilter :: (MonadIO m, WebexTeamsFilter filter, WebexTeamsListItem (ToResponse filter)) => Authorization -> WebexTeamsRequest -> filter -> m (ListReader (ToResponse filter)) Source #
Get list with query parameter.
getTeamList :: MonadIO m => Authorization -> WebexTeamsRequest -> m (ListReader Team) Source #
Return ListReader
for Team
.
getOrganizationList :: MonadIO m => Authorization -> WebexTeamsRequest -> m (ListReader Organization) Source #
Return ListReader
for Team
.
getRoleList :: MonadIO m => Authorization -> WebexTeamsRequest -> m (ListReader Role) Source #
Return ListReader
for Team
.
streamEntityWithFilter :: (MonadIO m, WebexTeamsFilter filter, WebexTeamsListItem (ToResponse filter)) => Authorization -> WebexTeamsRequest -> filter -> ConduitT () (ToResponse filter) m () Source #
Deprecated: Use getListWithFilter or streamListWithFilter of webex-teams-conduit
Get list of entities with query parameter and stream it into Conduit pipe. It automatically performs pagination.
streamTeamList :: MonadIO m => Authorization -> WebexTeamsRequest -> ConduitT () Team m () Source #
Deprecated: Use getTeamList or streamTeamList of webex-teams-conduit
List of Team
and stream it into Conduit pipe. It automatically performs pagination.
streamOrganizationList :: MonadIO m => Authorization -> WebexTeamsRequest -> ConduitT () Organization m () Source #
Deprecated: Use getOrganizationList or streamOrganizationList of webex-teams-conduit
Filter list of Organization
and stream it into Conduit pipe. It automatically performs pagination.
streamRoleList :: MonadIO m => Authorization -> WebexTeamsRequest -> ConduitT () Role m () Source #
Deprecated: Use getRoleList or streamRoleList of webex-teams-conduit
List of Role
and stream it into Conduit pipe. It automatically performs pagination.
Creating an entity
:: (MonadIO m, WebexTeamsCreate createParams) | |
=> Authorization | Authorization string against Webex Teams API. |
-> WebexTeamsRequest | Predefined part of |
-> createParams | One of |
-> m (Response (ToResponse createParams)) |
Create a Webex Teams entity with given parameters.
Creating a new entity of Webex Teams such as space, team, membership or message. REST API path is automatically selected by type of createParams. A JSONException runtime exception will be thrown on an JSON parse errors.
createEntityEither :: (MonadIO m, WebexTeamsCreate createParams) => Authorization -> WebexTeamsRequest -> createParams -> m (Response (Either JSONException (ToResponse createParams))) Source #
Create a Webex Teams entity with given parameters. A Left value will be returned on an JSON parse errors.
Updating an entity
:: (MonadIO m, WebexTeamsUpdate updateParams) | |
=> Authorization | Authorization string against Webex Teams API. |
-> WebexTeamsRequest | Predefined part of |
-> updateParams | One of |
-> m (Response (ToResponse updateParams)) |
Update a Webex Teams entity with given parameters.
Creating a new entity of Webex Teams such as space, team, or membership. REST API path is automatically selected by type of updateParams. A JSONException runtime exception will be thrown on an JSON parse errors.
updateEntityEither :: (MonadIO m, WebexTeamsUpdate updateParams) => Authorization -> WebexTeamsRequest -> updateParams -> m (Response (Either JSONException (ToResponse updateParams))) Source #
Update a Webex Teams entity with given parameters. A Left value will be returned on an JSON parse errors.
Creating default filter spec from mandatory field
defaultMessageFilter :: RoomId -> MessageFilter Source #
Default value of query strings for message list API.
Because RoomId
is mandatory, user have to supply it in order to get rest of defaults.
defaultTeamMembershipFilter :: TeamId -> TeamMembershipFilter Source #
Default value of query strings for team membership list API.
Because TeamId
is mandatory, user have to supply it in order to get rest of defaults.
As of writing, there is no filter parameter other than TeamId but TeamMembershipFilter
is
used for providing consistent API like streamEntityWithFilter
.
Deleting an entity
:: MonadIO m | |
=> Authorization | Authorization string against Webex Teams API. |
-> WebexTeamsRequest | Predefined part of |
-> RoomId | Identifier of a space to be deleted. |
-> m (Response ()) |
Deletes a room, by ID.
:: MonadIO m | |
=> Authorization | Authorization string against Webex Teams API. |
-> WebexTeamsRequest | Predefined part of |
-> MembershipId | Identifier of a space to be deleted. |
-> m (Response ()) |
Deletes a membership, by ID.
:: MonadIO m | |
=> Authorization | Authorization string against Webex Teams API. |
-> WebexTeamsRequest | Predefined part of |
-> MessageId | Identifier of a space to be deleted. |
-> m (Response ()) |
Deletes a message, by ID.
:: MonadIO m | |
=> Authorization | Authorization string against Webex Teams API. |
-> WebexTeamsRequest | Predefined part of |
-> TeamId | Identifier of a space to be deleted. |
-> m (Response ()) |
Deletes a team, by ID.
:: MonadIO m | |
=> Authorization | Authorization string against Webex Teams API. |
-> WebexTeamsRequest | Predefined part of |
-> TeamMembershipId | Identifier of a space to be deleted. |
-> m (Response ()) |
Deletes a teamMembership, by ID.