{-# LANGUAGE RecordWildCards #-}
{-# LANGUAGE TemplateHaskell #-}

-- This file is part of the Wire Server implementation.
--
-- Copyright (C) 2022 Wire Swiss GmbH <opensource@wire.com>
--
-- This program is free software: you can redistribute it and/or modify it under
-- the terms of the GNU Affero General Public License as published by the Free
-- Software Foundation, either version 3 of the License, or (at your option) any
-- later version.
--
-- This program is distributed in the hope that it will be useful, but WITHOUT
-- ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
-- FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more
-- details.
--
-- You should have received a copy of the GNU Affero General Public License along
-- with this program. If not, see <https://www.gnu.org/licenses/>.

module Wire.API.UserEvent where

import Control.Lens.TH
import Data.Aeson qualified as A
import Data.Aeson.KeyMap qualified as KM
import Data.ByteString.Conversion
import Data.Handle (Handle)
import Data.Id
import Data.Json.Util
import Data.Qualified
import Data.Schema
import Imports
import System.Logger.Message hiding (field, (.=))
import Wire.API.Connection
import Wire.API.Locale
import Wire.API.Properties
import Wire.API.Routes.Version
import Wire.API.User
import Wire.API.User.Client
import Wire.API.User.Client.Prekey

data Event
  = UserEvent !UserEvent
  | ConnectionEvent !ConnectionEvent
  | PropertyEvent !PropertyEvent
  | ClientEvent !ClientEvent
  deriving stock (Event -> Event -> Bool
(Event -> Event -> Bool) -> (Event -> Event -> Bool) -> Eq Event
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: Event -> Event -> Bool
== :: Event -> Event -> Bool
$c/= :: Event -> Event -> Bool
/= :: Event -> Event -> Bool
Eq, Int -> Event -> ShowS
[Event] -> ShowS
Event -> String
(Int -> Event -> ShowS)
-> (Event -> String) -> ([Event] -> ShowS) -> Show Event
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> Event -> ShowS
showsPrec :: Int -> Event -> ShowS
$cshow :: Event -> String
show :: Event -> String
$cshowList :: [Event] -> ShowS
showList :: [Event] -> ShowS
Show)

eventType :: Event -> EventType
eventType :: Event -> EventType
eventType (UserEvent (UserCreated User
_)) = EventType
EventTypeUserCreated
eventType (UserEvent (UserActivated User
_)) = EventType
EventTypeUserActivated
eventType (UserEvent (UserSuspended UserId
_)) = EventType
EventTypeUserSuspended
eventType (UserEvent (UserResumed UserId
_)) = EventType
EventTypeUserResumed
eventType (UserEvent (UserDeleted Qualified UserId
_)) = EventType
EventTypeUserDeleted
eventType (UserEvent (UserUpdated UserUpdatedData
_)) = EventType
EventTypeUserUpdated
eventType (UserEvent (UserIdentityUpdated UserIdentityUpdatedData
_)) = EventType
EventTypeUserUpdated
eventType (UserEvent (UserIdentityRemoved UserIdentityRemovedData
_)) = EventType
EventTypeUserIdentityRemoved
eventType (UserEvent (UserLegalHoldDisabled UserId
_)) = EventType
EventTypeUserLegalholdDisabled
eventType (UserEvent (UserLegalHoldEnabled UserId
_)) = EventType
EventTypeUserLegalholdEnabled
eventType (UserEvent (LegalHoldClientRequested LegalHoldClientRequestedData
_)) = EventType
EventTypeUserLegalholdRequested
eventType (ConnectionEvent ConnectionEvent
_) = EventType
EventTypeConnection
eventType (PropertyEvent (PropertySet PropertyKey
_ Value
_)) = EventType
EventTypePropertiesSet
eventType (PropertyEvent (PropertyDeleted PropertyKey
_)) = EventType
EventTypePropertiesDeleted
eventType (PropertyEvent PropertyEvent
PropertiesCleared) = EventType
EventTypePropertiesCleared
eventType (ClientEvent (ClientAdded Client
_)) = EventType
EventTypeClientAdded
eventType (ClientEvent (ClientRemoved ClientId
_)) = EventType
EventTypeClientRemoved

data EventType
  = EventTypeUserCreated
  | EventTypeUserActivated
  | EventTypeUserUpdated
  | EventTypeUserIdentityRemoved
  | EventTypeUserSuspended
  | EventTypeUserResumed
  | EventTypeUserDeleted
  | EventTypeUserLegalholdEnabled
  | EventTypeUserLegalholdDisabled
  | EventTypeUserLegalholdRequested
  | EventTypePropertiesSet
  | EventTypePropertiesDeleted
  | EventTypePropertiesCleared
  | EventTypeClientAdded
  | EventTypeClientRemoved
  | EventTypeConnection
  deriving stock (EventType -> EventType -> Bool
(EventType -> EventType -> Bool)
-> (EventType -> EventType -> Bool) -> Eq EventType
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: EventType -> EventType -> Bool
== :: EventType -> EventType -> Bool
$c/= :: EventType -> EventType -> Bool
/= :: EventType -> EventType -> Bool
Eq, Int -> EventType
EventType -> Int
EventType -> [EventType]
EventType -> EventType
EventType -> EventType -> [EventType]
EventType -> EventType -> EventType -> [EventType]
(EventType -> EventType)
-> (EventType -> EventType)
-> (Int -> EventType)
-> (EventType -> Int)
-> (EventType -> [EventType])
-> (EventType -> EventType -> [EventType])
-> (EventType -> EventType -> [EventType])
-> (EventType -> EventType -> EventType -> [EventType])
-> Enum EventType
forall a.
(a -> a)
-> (a -> a)
-> (Int -> a)
-> (a -> Int)
-> (a -> [a])
-> (a -> a -> [a])
-> (a -> a -> [a])
-> (a -> a -> a -> [a])
-> Enum a
$csucc :: EventType -> EventType
succ :: EventType -> EventType
$cpred :: EventType -> EventType
pred :: EventType -> EventType
$ctoEnum :: Int -> EventType
toEnum :: Int -> EventType
$cfromEnum :: EventType -> Int
fromEnum :: EventType -> Int
$cenumFrom :: EventType -> [EventType]
enumFrom :: EventType -> [EventType]
$cenumFromThen :: EventType -> EventType -> [EventType]
enumFromThen :: EventType -> EventType -> [EventType]
$cenumFromTo :: EventType -> EventType -> [EventType]
enumFromTo :: EventType -> EventType -> [EventType]
$cenumFromThenTo :: EventType -> EventType -> EventType -> [EventType]
enumFromThenTo :: EventType -> EventType -> EventType -> [EventType]
Enum, EventType
EventType -> EventType -> Bounded EventType
forall a. a -> a -> Bounded a
$cminBound :: EventType
minBound :: EventType
$cmaxBound :: EventType
maxBound :: EventType
Bounded)

instance ToSchema EventType where
  schema :: ValueSchema NamedSwaggerDoc EventType
schema =
    forall v doc a b.
(With v, HasEnum v doc) =>
Text
-> SchemaP [Value] v (Alt Maybe v) a b
-> SchemaP doc Value Value a b
enum @Text Text
"EventType" (SchemaP [Value] Text (Alt Maybe Text) EventType EventType
 -> ValueSchema NamedSwaggerDoc EventType)
-> SchemaP [Value] Text (Alt Maybe Text) EventType EventType
-> ValueSchema NamedSwaggerDoc EventType
forall a b. (a -> b) -> a -> b
$
      [SchemaP [Value] Text (Alt Maybe Text) EventType EventType]
-> SchemaP [Value] Text (Alt Maybe Text) EventType EventType
forall a. Monoid a => [a] -> a
mconcat
        [ Text
-> EventType
-> SchemaP [Value] Text (Alt Maybe Text) EventType EventType
forall a b.
(ToJSON a, Eq a, Eq b) =>
a -> b -> SchemaP [Value] a (Alt Maybe a) b b
element Text
"user.new" EventType
EventTypeUserCreated,
          Text
-> EventType
-> SchemaP [Value] Text (Alt Maybe Text) EventType EventType
forall a b.
(ToJSON a, Eq a, Eq b) =>
a -> b -> SchemaP [Value] a (Alt Maybe a) b b
element Text
"user.activate" EventType
EventTypeUserActivated,
          Text
-> EventType
-> SchemaP [Value] Text (Alt Maybe Text) EventType EventType
forall a b.
(ToJSON a, Eq a, Eq b) =>
a -> b -> SchemaP [Value] a (Alt Maybe a) b b
element Text
"user.update" EventType
EventTypeUserUpdated,
          Text
-> EventType
-> SchemaP [Value] Text (Alt Maybe Text) EventType EventType
forall a b.
(ToJSON a, Eq a, Eq b) =>
a -> b -> SchemaP [Value] a (Alt Maybe a) b b
element Text
"user.identity-remove" EventType
EventTypeUserIdentityRemoved,
          Text
-> EventType
-> SchemaP [Value] Text (Alt Maybe Text) EventType EventType
forall a b.
(ToJSON a, Eq a, Eq b) =>
a -> b -> SchemaP [Value] a (Alt Maybe a) b b
element Text
"user.suspend" EventType
EventTypeUserSuspended,
          Text
-> EventType
-> SchemaP [Value] Text (Alt Maybe Text) EventType EventType
forall a b.
(ToJSON a, Eq a, Eq b) =>
a -> b -> SchemaP [Value] a (Alt Maybe a) b b
element Text
"user.resume" EventType
EventTypeUserResumed,
          Text
-> EventType
-> SchemaP [Value] Text (Alt Maybe Text) EventType EventType
forall a b.
(ToJSON a, Eq a, Eq b) =>
a -> b -> SchemaP [Value] a (Alt Maybe a) b b
element Text
"user.delete" EventType
EventTypeUserDeleted,
          Text
-> EventType
-> SchemaP [Value] Text (Alt Maybe Text) EventType EventType
forall a b.
(ToJSON a, Eq a, Eq b) =>
a -> b -> SchemaP [Value] a (Alt Maybe a) b b
element Text
"user.legalhold-enable" EventType
EventTypeUserLegalholdEnabled,
          Text
-> EventType
-> SchemaP [Value] Text (Alt Maybe Text) EventType EventType
forall a b.
(ToJSON a, Eq a, Eq b) =>
a -> b -> SchemaP [Value] a (Alt Maybe a) b b
element Text
"user.legalhold-disable" EventType
EventTypeUserLegalholdDisabled,
          Text
-> EventType
-> SchemaP [Value] Text (Alt Maybe Text) EventType EventType
forall a b.
(ToJSON a, Eq a, Eq b) =>
a -> b -> SchemaP [Value] a (Alt Maybe a) b b
element Text
"user.legalhold-request" EventType
EventTypeUserLegalholdRequested,
          Text
-> EventType
-> SchemaP [Value] Text (Alt Maybe Text) EventType EventType
forall a b.
(ToJSON a, Eq a, Eq b) =>
a -> b -> SchemaP [Value] a (Alt Maybe a) b b
element Text
"user.properties-set" EventType
EventTypePropertiesSet,
          Text
-> EventType
-> SchemaP [Value] Text (Alt Maybe Text) EventType EventType
forall a b.
(ToJSON a, Eq a, Eq b) =>
a -> b -> SchemaP [Value] a (Alt Maybe a) b b
element Text
"user.properties-delete" EventType
EventTypePropertiesDeleted,
          Text
-> EventType
-> SchemaP [Value] Text (Alt Maybe Text) EventType EventType
forall a b.
(ToJSON a, Eq a, Eq b) =>
a -> b -> SchemaP [Value] a (Alt Maybe a) b b
element Text
"user.properties-clear" EventType
EventTypePropertiesCleared,
          Text
-> EventType
-> SchemaP [Value] Text (Alt Maybe Text) EventType EventType
forall a b.
(ToJSON a, Eq a, Eq b) =>
a -> b -> SchemaP [Value] a (Alt Maybe a) b b
element Text
"user.client-add" EventType
EventTypeClientAdded,
          Text
-> EventType
-> SchemaP [Value] Text (Alt Maybe Text) EventType EventType
forall a b.
(ToJSON a, Eq a, Eq b) =>
a -> b -> SchemaP [Value] a (Alt Maybe a) b b
element Text
"user.client-remove" EventType
EventTypeClientRemoved,
          Text
-> EventType
-> SchemaP [Value] Text (Alt Maybe Text) EventType EventType
forall a b.
(ToJSON a, Eq a, Eq b) =>
a -> b -> SchemaP [Value] a (Alt Maybe a) b b
element Text
"user.connection" EventType
EventTypeConnection
        ]

data UserEvent
  = UserCreated !User
  | -- | A user is activated when the first user identity (email address)
    -- is verified. {#RefActivationEvent}
    UserActivated !User
  | -- | Account & API access of a user has been suspended.
    UserSuspended !UserId
  | -- | Account & API access of a previously suspended user
    -- has been restored.
    UserResumed !UserId
  | -- | The user account has been deleted.
    UserDeleted !(Qualified UserId)
  | UserUpdated !UserUpdatedData
  | UserIdentityUpdated !UserIdentityUpdatedData
  | UserIdentityRemoved !UserIdentityRemovedData
  | UserLegalHoldDisabled !UserId
  | UserLegalHoldEnabled !UserId
  | LegalHoldClientRequested LegalHoldClientRequestedData
  deriving stock (UserEvent -> UserEvent -> Bool
(UserEvent -> UserEvent -> Bool)
-> (UserEvent -> UserEvent -> Bool) -> Eq UserEvent
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: UserEvent -> UserEvent -> Bool
== :: UserEvent -> UserEvent -> Bool
$c/= :: UserEvent -> UserEvent -> Bool
/= :: UserEvent -> UserEvent -> Bool
Eq, Int -> UserEvent -> ShowS
[UserEvent] -> ShowS
UserEvent -> String
(Int -> UserEvent -> ShowS)
-> (UserEvent -> String)
-> ([UserEvent] -> ShowS)
-> Show UserEvent
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> UserEvent -> ShowS
showsPrec :: Int -> UserEvent -> ShowS
$cshow :: UserEvent -> String
show :: UserEvent -> String
$cshowList :: [UserEvent] -> ShowS
showList :: [UserEvent] -> ShowS
Show)

data ConnectionEvent = ConnectionUpdated
  { ConnectionEvent -> UserConnection
ucConn :: !UserConnection,
    ConnectionEvent -> Maybe Name
ucName :: !(Maybe Name)
  }
  deriving stock (ConnectionEvent -> ConnectionEvent -> Bool
(ConnectionEvent -> ConnectionEvent -> Bool)
-> (ConnectionEvent -> ConnectionEvent -> Bool)
-> Eq ConnectionEvent
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: ConnectionEvent -> ConnectionEvent -> Bool
== :: ConnectionEvent -> ConnectionEvent -> Bool
$c/= :: ConnectionEvent -> ConnectionEvent -> Bool
/= :: ConnectionEvent -> ConnectionEvent -> Bool
Eq, Int -> ConnectionEvent -> ShowS
[ConnectionEvent] -> ShowS
ConnectionEvent -> String
(Int -> ConnectionEvent -> ShowS)
-> (ConnectionEvent -> String)
-> ([ConnectionEvent] -> ShowS)
-> Show ConnectionEvent
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> ConnectionEvent -> ShowS
showsPrec :: Int -> ConnectionEvent -> ShowS
$cshow :: ConnectionEvent -> String
show :: ConnectionEvent -> String
$cshowList :: [ConnectionEvent] -> ShowS
showList :: [ConnectionEvent] -> ShowS
Show)

data PropertyEvent
  = PropertySet !PropertyKey !A.Value
  | PropertyDeleted !PropertyKey
  | PropertiesCleared
  deriving stock (PropertyEvent -> PropertyEvent -> Bool
(PropertyEvent -> PropertyEvent -> Bool)
-> (PropertyEvent -> PropertyEvent -> Bool) -> Eq PropertyEvent
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: PropertyEvent -> PropertyEvent -> Bool
== :: PropertyEvent -> PropertyEvent -> Bool
$c/= :: PropertyEvent -> PropertyEvent -> Bool
/= :: PropertyEvent -> PropertyEvent -> Bool
Eq, Int -> PropertyEvent -> ShowS
[PropertyEvent] -> ShowS
PropertyEvent -> String
(Int -> PropertyEvent -> ShowS)
-> (PropertyEvent -> String)
-> ([PropertyEvent] -> ShowS)
-> Show PropertyEvent
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> PropertyEvent -> ShowS
showsPrec :: Int -> PropertyEvent -> ShowS
$cshow :: PropertyEvent -> String
show :: PropertyEvent -> String
$cshowList :: [PropertyEvent] -> ShowS
showList :: [PropertyEvent] -> ShowS
Show)

data ClientEvent
  = ClientAdded !Client
  | ClientRemoved !ClientId
  deriving stock (ClientEvent -> ClientEvent -> Bool
(ClientEvent -> ClientEvent -> Bool)
-> (ClientEvent -> ClientEvent -> Bool) -> Eq ClientEvent
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: ClientEvent -> ClientEvent -> Bool
== :: ClientEvent -> ClientEvent -> Bool
$c/= :: ClientEvent -> ClientEvent -> Bool
/= :: ClientEvent -> ClientEvent -> Bool
Eq, Int -> ClientEvent -> ShowS
[ClientEvent] -> ShowS
ClientEvent -> String
(Int -> ClientEvent -> ShowS)
-> (ClientEvent -> String)
-> ([ClientEvent] -> ShowS)
-> Show ClientEvent
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> ClientEvent -> ShowS
showsPrec :: Int -> ClientEvent -> ShowS
$cshow :: ClientEvent -> String
show :: ClientEvent -> String
$cshowList :: [ClientEvent] -> ShowS
showList :: [ClientEvent] -> ShowS
Show)

data UserUpdatedData = UserUpdatedData
  { UserUpdatedData -> UserId
eupId :: !UserId,
    UserUpdatedData -> Maybe Name
eupName :: !(Maybe Name),
    UserUpdatedData -> Maybe TextStatus
eupTextStatus :: !(Maybe TextStatus),
    -- | DEPRECATED
    UserUpdatedData -> Maybe Pict
eupPict :: !(Maybe Pict),
    UserUpdatedData -> Maybe ColourId
eupAccentId :: !(Maybe ColourId),
    UserUpdatedData -> Maybe [Asset]
eupAssets :: !(Maybe [Asset]),
    UserUpdatedData -> Maybe Handle
eupHandle :: !(Maybe Handle),
    UserUpdatedData -> Maybe Locale
eupLocale :: !(Maybe Locale),
    UserUpdatedData -> Maybe ManagedBy
eupManagedBy :: !(Maybe ManagedBy),
    UserUpdatedData -> Maybe UserSSOId
eupSSOId :: !(Maybe UserSSOId),
    UserUpdatedData -> Bool
eupSSOIdRemoved :: Bool,
    UserUpdatedData -> Maybe (Set BaseProtocolTag)
eupSupportedProtocols :: !(Maybe (Set BaseProtocolTag)),
    UserUpdatedData -> Maybe TeamId
eupTeam :: !(Maybe TeamId)
  }
  deriving stock (UserUpdatedData -> UserUpdatedData -> Bool
(UserUpdatedData -> UserUpdatedData -> Bool)
-> (UserUpdatedData -> UserUpdatedData -> Bool)
-> Eq UserUpdatedData
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: UserUpdatedData -> UserUpdatedData -> Bool
== :: UserUpdatedData -> UserUpdatedData -> Bool
$c/= :: UserUpdatedData -> UserUpdatedData -> Bool
/= :: UserUpdatedData -> UserUpdatedData -> Bool
Eq, Int -> UserUpdatedData -> ShowS
[UserUpdatedData] -> ShowS
UserUpdatedData -> String
(Int -> UserUpdatedData -> ShowS)
-> (UserUpdatedData -> String)
-> ([UserUpdatedData] -> ShowS)
-> Show UserUpdatedData
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> UserUpdatedData -> ShowS
showsPrec :: Int -> UserUpdatedData -> ShowS
$cshow :: UserUpdatedData -> String
show :: UserUpdatedData -> String
$cshowList :: [UserUpdatedData] -> ShowS
showList :: [UserUpdatedData] -> ShowS
Show)

data UserIdentityUpdatedData = UserIdentityUpdatedData
  { UserIdentityUpdatedData -> UserId
eiuId :: !UserId,
    UserIdentityUpdatedData -> Maybe EmailAddress
eiuEmail :: !(Maybe EmailAddress),
    UserIdentityUpdatedData -> Maybe Phone
eiuPhone :: !(Maybe Phone)
  }
  deriving stock (UserIdentityUpdatedData -> UserIdentityUpdatedData -> Bool
(UserIdentityUpdatedData -> UserIdentityUpdatedData -> Bool)
-> (UserIdentityUpdatedData -> UserIdentityUpdatedData -> Bool)
-> Eq UserIdentityUpdatedData
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: UserIdentityUpdatedData -> UserIdentityUpdatedData -> Bool
== :: UserIdentityUpdatedData -> UserIdentityUpdatedData -> Bool
$c/= :: UserIdentityUpdatedData -> UserIdentityUpdatedData -> Bool
/= :: UserIdentityUpdatedData -> UserIdentityUpdatedData -> Bool
Eq, Int -> UserIdentityUpdatedData -> ShowS
[UserIdentityUpdatedData] -> ShowS
UserIdentityUpdatedData -> String
(Int -> UserIdentityUpdatedData -> ShowS)
-> (UserIdentityUpdatedData -> String)
-> ([UserIdentityUpdatedData] -> ShowS)
-> Show UserIdentityUpdatedData
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> UserIdentityUpdatedData -> ShowS
showsPrec :: Int -> UserIdentityUpdatedData -> ShowS
$cshow :: UserIdentityUpdatedData -> String
show :: UserIdentityUpdatedData -> String
$cshowList :: [UserIdentityUpdatedData] -> ShowS
showList :: [UserIdentityUpdatedData] -> ShowS
Show)

data UserIdentityRemovedData = UserIdentityRemovedData
  { UserIdentityRemovedData -> UserId
eirId :: !UserId,
    UserIdentityRemovedData -> Maybe EmailAddress
eirEmail :: !(Maybe EmailAddress),
    UserIdentityRemovedData -> Maybe Phone
eirPhone :: !(Maybe Phone)
  }
  deriving stock (UserIdentityRemovedData -> UserIdentityRemovedData -> Bool
(UserIdentityRemovedData -> UserIdentityRemovedData -> Bool)
-> (UserIdentityRemovedData -> UserIdentityRemovedData -> Bool)
-> Eq UserIdentityRemovedData
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: UserIdentityRemovedData -> UserIdentityRemovedData -> Bool
== :: UserIdentityRemovedData -> UserIdentityRemovedData -> Bool
$c/= :: UserIdentityRemovedData -> UserIdentityRemovedData -> Bool
/= :: UserIdentityRemovedData -> UserIdentityRemovedData -> Bool
Eq, Int -> UserIdentityRemovedData -> ShowS
[UserIdentityRemovedData] -> ShowS
UserIdentityRemovedData -> String
(Int -> UserIdentityRemovedData -> ShowS)
-> (UserIdentityRemovedData -> String)
-> ([UserIdentityRemovedData] -> ShowS)
-> Show UserIdentityRemovedData
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> UserIdentityRemovedData -> ShowS
showsPrec :: Int -> UserIdentityRemovedData -> ShowS
$cshow :: UserIdentityRemovedData -> String
show :: UserIdentityRemovedData -> String
$cshowList :: [UserIdentityRemovedData] -> ShowS
showList :: [UserIdentityRemovedData] -> ShowS
Show)

data LegalHoldClientRequestedData = LegalHoldClientRequestedData
  { -- | the user that is under legalhold
    LegalHoldClientRequestedData -> UserId
lhcTargetUser :: !UserId,
    -- | the last prekey of the user that is under legalhold
    LegalHoldClientRequestedData -> LastPrekey
lhcLastPrekey :: !LastPrekey,
    -- | the client id of the legalhold device
    LegalHoldClientRequestedData -> ClientId
lhcClientId :: !ClientId
  }
  deriving stock (LegalHoldClientRequestedData
-> LegalHoldClientRequestedData -> Bool
(LegalHoldClientRequestedData
 -> LegalHoldClientRequestedData -> Bool)
-> (LegalHoldClientRequestedData
    -> LegalHoldClientRequestedData -> Bool)
-> Eq LegalHoldClientRequestedData
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: LegalHoldClientRequestedData
-> LegalHoldClientRequestedData -> Bool
== :: LegalHoldClientRequestedData
-> LegalHoldClientRequestedData -> Bool
$c/= :: LegalHoldClientRequestedData
-> LegalHoldClientRequestedData -> Bool
/= :: LegalHoldClientRequestedData
-> LegalHoldClientRequestedData -> Bool
Eq, Int -> LegalHoldClientRequestedData -> ShowS
[LegalHoldClientRequestedData] -> ShowS
LegalHoldClientRequestedData -> String
(Int -> LegalHoldClientRequestedData -> ShowS)
-> (LegalHoldClientRequestedData -> String)
-> ([LegalHoldClientRequestedData] -> ShowS)
-> Show LegalHoldClientRequestedData
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> LegalHoldClientRequestedData -> ShowS
showsPrec :: Int -> LegalHoldClientRequestedData -> ShowS
$cshow :: LegalHoldClientRequestedData -> String
show :: LegalHoldClientRequestedData -> String
$cshowList :: [LegalHoldClientRequestedData] -> ShowS
showList :: [LegalHoldClientRequestedData] -> ShowS
Show)

emailRemoved :: UserId -> EmailAddress -> UserEvent
emailRemoved :: UserId -> EmailAddress -> UserEvent
emailRemoved UserId
u EmailAddress
e =
  UserIdentityRemovedData -> UserEvent
UserIdentityRemoved (UserIdentityRemovedData -> UserEvent)
-> UserIdentityRemovedData -> UserEvent
forall a b. (a -> b) -> a -> b
$ UserId
-> Maybe EmailAddress -> Maybe Phone -> UserIdentityRemovedData
UserIdentityRemovedData UserId
u (EmailAddress -> Maybe EmailAddress
forall a. a -> Maybe a
Just EmailAddress
e) Maybe Phone
forall a. Maybe a
Nothing

emailUpdated :: UserId -> EmailAddress -> UserEvent
emailUpdated :: UserId -> EmailAddress -> UserEvent
emailUpdated UserId
u EmailAddress
e =
  UserIdentityUpdatedData -> UserEvent
UserIdentityUpdated (UserIdentityUpdatedData -> UserEvent)
-> UserIdentityUpdatedData -> UserEvent
forall a b. (a -> b) -> a -> b
$ UserId
-> Maybe EmailAddress -> Maybe Phone -> UserIdentityUpdatedData
UserIdentityUpdatedData UserId
u (EmailAddress -> Maybe EmailAddress
forall a. a -> Maybe a
Just EmailAddress
e) Maybe Phone
forall a. Maybe a
Nothing

teamUpdated :: UserId -> TeamId -> UserEvent
teamUpdated :: UserId -> TeamId -> UserEvent
teamUpdated UserId
u TeamId
t = UserUpdatedData -> UserEvent
UserUpdated (UserId -> UserUpdatedData
emptyUserUpdatedData UserId
u) {eupTeam = Just t}

emptyUserUpdatedData :: UserId -> UserUpdatedData
emptyUserUpdatedData :: UserId -> UserUpdatedData
emptyUserUpdatedData UserId
u =
  UserUpdatedData
    { $sel:eupId:UserUpdatedData :: UserId
eupId = UserId
u,
      $sel:eupName:UserUpdatedData :: Maybe Name
eupName = Maybe Name
forall a. Maybe a
Nothing,
      $sel:eupTextStatus:UserUpdatedData :: Maybe TextStatus
eupTextStatus = Maybe TextStatus
forall a. Maybe a
Nothing,
      $sel:eupPict:UserUpdatedData :: Maybe Pict
eupPict = Maybe Pict
forall a. Maybe a
Nothing,
      $sel:eupAccentId:UserUpdatedData :: Maybe ColourId
eupAccentId = Maybe ColourId
forall a. Maybe a
Nothing,
      $sel:eupAssets:UserUpdatedData :: Maybe [Asset]
eupAssets = Maybe [Asset]
forall a. Maybe a
Nothing,
      $sel:eupHandle:UserUpdatedData :: Maybe Handle
eupHandle = Maybe Handle
forall a. Maybe a
Nothing,
      $sel:eupLocale:UserUpdatedData :: Maybe Locale
eupLocale = Maybe Locale
forall a. Maybe a
Nothing,
      $sel:eupManagedBy:UserUpdatedData :: Maybe ManagedBy
eupManagedBy = Maybe ManagedBy
forall a. Maybe a
Nothing,
      $sel:eupSSOId:UserUpdatedData :: Maybe UserSSOId
eupSSOId = Maybe UserSSOId
forall a. Maybe a
Nothing,
      $sel:eupSSOIdRemoved:UserUpdatedData :: Bool
eupSSOIdRemoved = Bool
False,
      $sel:eupSupportedProtocols:UserUpdatedData :: Maybe (Set BaseProtocolTag)
eupSupportedProtocols = Maybe (Set BaseProtocolTag)
forall a. Maybe a
Nothing,
      $sel:eupTeam:UserUpdatedData :: Maybe TeamId
eupTeam = Maybe TeamId
forall a. Maybe a
Nothing
    }

-- Event schema

$(makePrisms ''Event)
$(makePrisms ''UserEvent)
$(makePrisms ''PropertyEvent)
$(makePrisms ''ClientEvent)

eventObjectSchema :: ObjectSchema SwaggerDoc Event
eventObjectSchema :: ObjectSchema SwaggerDoc Event
eventObjectSchema =
  (EventType, Event) -> Event
forall a b. (a, b) -> b
snd
    ((EventType, Event) -> Event)
-> SchemaP SwaggerDoc Object [Pair] Event (EventType, Event)
-> ObjectSchema SwaggerDoc Event
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> SchemaP SwaggerDoc Object [Pair] Event EventType
-> SchemaP SwaggerDoc (Object, EventType) [Pair] Event Event
-> SchemaP SwaggerDoc Object [Pair] Event (EventType, Event)
forall d w v a b c.
(Monoid d, Monoid w) =>
SchemaP d v w a b
-> SchemaP d (v, b) w a c -> SchemaP d v w a (b, c)
bind
      (Event -> EventType
eventType (Event -> EventType)
-> SchemaP SwaggerDoc Object [Pair] EventType EventType
-> SchemaP SwaggerDoc Object [Pair] Event EventType
forall (p :: * -> * -> *) a a' b.
Profunctor p =>
(a -> a') -> p a' b -> p a b
.= Text
-> ValueSchema NamedSwaggerDoc EventType
-> SchemaP SwaggerDoc Object [Pair] EventType EventType
forall doc' doc a b.
HasField doc' doc =>
Text
-> SchemaP doc' Value Value a b -> SchemaP doc Object [Pair] a b
field Text
"type" ValueSchema NamedSwaggerDoc EventType
forall a. ToSchema a => ValueSchema NamedSwaggerDoc a
schema)
      ( (EventType -> ObjectSchema SwaggerDoc Event)
-> SchemaP SwaggerDoc (Object, EventType) [Pair] Event Event
forall t d v w a b.
(Bounded t, Enum t, Monoid d) =>
(t -> SchemaP d v w a b) -> SchemaP d (v, t) w a b
dispatch ((EventType -> ObjectSchema SwaggerDoc Event)
 -> SchemaP SwaggerDoc (Object, EventType) [Pair] Event Event)
-> (EventType -> ObjectSchema SwaggerDoc Event)
-> SchemaP SwaggerDoc (Object, EventType) [Pair] Event Event
forall a b. (a -> b) -> a -> b
$ \case
          EventType
EventTypeUserCreated ->
            Prism' Event UserEvent
-> SchemaP SwaggerDoc Object [Pair] UserEvent UserEvent
-> ObjectSchema SwaggerDoc Event
forall b b' a a' ss v m.
Prism b b' a a' -> SchemaP ss v m a a' -> SchemaP ss v m b b'
tag p UserEvent (f UserEvent) -> p Event (f Event)
Prism' Event UserEvent
_UserEvent (Prism' UserEvent User
-> SchemaP SwaggerDoc Object [Pair] User User
-> SchemaP SwaggerDoc Object [Pair] UserEvent UserEvent
forall b b' a a' ss v m.
Prism b b' a a' -> SchemaP ss v m a a' -> SchemaP ss v m b b'
tag p User (f User) -> p UserEvent (f UserEvent)
Prism' UserEvent User
_UserCreated (User -> User
noId (User -> User)
-> SchemaP SwaggerDoc Object [Pair] User User
-> SchemaP SwaggerDoc Object [Pair] User User
forall (p :: * -> * -> *) a a' b.
Profunctor p =>
(a -> a') -> p a' b -> p a b
.= SchemaP SwaggerDoc Object [Pair] User User
userSchema))
          EventType
EventTypeUserActivated ->
            Prism' Event UserEvent
-> SchemaP SwaggerDoc Object [Pair] UserEvent UserEvent
-> ObjectSchema SwaggerDoc Event
forall b b' a a' ss v m.
Prism b b' a a' -> SchemaP ss v m a a' -> SchemaP ss v m b b'
tag p UserEvent (f UserEvent) -> p Event (f Event)
Prism' Event UserEvent
_UserEvent (Prism' UserEvent User
-> SchemaP SwaggerDoc Object [Pair] User User
-> SchemaP SwaggerDoc Object [Pair] UserEvent UserEvent
forall b b' a a' ss v m.
Prism b b' a a' -> SchemaP ss v m a a' -> SchemaP ss v m b b'
tag p User (f User) -> p UserEvent (f UserEvent)
Prism' UserEvent User
_UserActivated SchemaP SwaggerDoc Object [Pair] User User
userSchema)
          EventType
EventTypeUserUpdated ->
            Prism' Event UserEvent
-> SchemaP SwaggerDoc Object [Pair] UserEvent UserEvent
-> ObjectSchema SwaggerDoc Event
forall b b' a a' ss v m.
Prism b b' a a' -> SchemaP ss v m a a' -> SchemaP ss v m b b'
tag
              p UserEvent (f UserEvent) -> p Event (f Event)
Prism' Event UserEvent
_UserEvent
              ( Prism' UserEvent UserUpdatedData
-> SchemaP SwaggerDoc Object [Pair] UserUpdatedData UserUpdatedData
-> SchemaP SwaggerDoc Object [Pair] UserEvent UserEvent
forall b b' a a' ss v m.
Prism b b' a a' -> SchemaP ss v m a a' -> SchemaP ss v m b b'
tag
                  p UserUpdatedData (f UserUpdatedData) -> p UserEvent (f UserEvent)
Prism' UserEvent UserUpdatedData
_UserUpdated
                  ( Text
-> SchemaP
     NamedSwaggerDoc Value Value UserUpdatedData UserUpdatedData
-> SchemaP SwaggerDoc Object [Pair] UserUpdatedData UserUpdatedData
forall doc' doc a b.
HasField doc' doc =>
Text
-> SchemaP doc' Value Value a b -> SchemaP doc Object [Pair] a b
field
                      Text
"user"
                      ( Text
-> SchemaP SwaggerDoc Object [Pair] UserUpdatedData UserUpdatedData
-> SchemaP
     NamedSwaggerDoc Value Value UserUpdatedData UserUpdatedData
forall doc doc' a b.
HasObject doc doc' =>
Text
-> SchemaP doc Object [Pair] a b -> SchemaP doc' Value Value a b
object
                          Text
"UserUpdatedData"
                          ( UserId
-> Maybe Name
-> Maybe TextStatus
-> Maybe Pict
-> Maybe ColourId
-> Maybe [Asset]
-> Maybe Handle
-> Maybe Locale
-> Maybe ManagedBy
-> Maybe UserSSOId
-> Bool
-> Maybe (Set BaseProtocolTag)
-> Maybe TeamId
-> UserUpdatedData
UserUpdatedData
                              (UserId
 -> Maybe Name
 -> Maybe TextStatus
 -> Maybe Pict
 -> Maybe ColourId
 -> Maybe [Asset]
 -> Maybe Handle
 -> Maybe Locale
 -> Maybe ManagedBy
 -> Maybe UserSSOId
 -> Bool
 -> Maybe (Set BaseProtocolTag)
 -> Maybe TeamId
 -> UserUpdatedData)
-> SchemaP SwaggerDoc Object [Pair] UserUpdatedData UserId
-> SchemaP
     SwaggerDoc
     Object
     [Pair]
     UserUpdatedData
     (Maybe Name
      -> Maybe TextStatus
      -> Maybe Pict
      -> Maybe ColourId
      -> Maybe [Asset]
      -> Maybe Handle
      -> Maybe Locale
      -> Maybe ManagedBy
      -> Maybe UserSSOId
      -> Bool
      -> Maybe (Set BaseProtocolTag)
      -> Maybe TeamId
      -> UserUpdatedData)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> UserUpdatedData -> UserId
eupId (UserUpdatedData -> UserId)
-> SchemaP SwaggerDoc Object [Pair] UserId UserId
-> SchemaP SwaggerDoc Object [Pair] UserUpdatedData UserId
forall (p :: * -> * -> *) a a' b.
Profunctor p =>
(a -> a') -> p a' b -> p a b
.= Text
-> SchemaP NamedSwaggerDoc Value Value UserId UserId
-> SchemaP SwaggerDoc Object [Pair] UserId UserId
forall doc' doc a b.
HasField doc' doc =>
Text
-> SchemaP doc' Value Value a b -> SchemaP doc Object [Pair] a b
field Text
"id" SchemaP NamedSwaggerDoc Value Value UserId UserId
forall a. ToSchema a => ValueSchema NamedSwaggerDoc a
schema
                              SchemaP
  SwaggerDoc
  Object
  [Pair]
  UserUpdatedData
  (Maybe Name
   -> Maybe TextStatus
   -> Maybe Pict
   -> Maybe ColourId
   -> Maybe [Asset]
   -> Maybe Handle
   -> Maybe Locale
   -> Maybe ManagedBy
   -> Maybe UserSSOId
   -> Bool
   -> Maybe (Set BaseProtocolTag)
   -> Maybe TeamId
   -> UserUpdatedData)
-> SchemaP SwaggerDoc Object [Pair] UserUpdatedData (Maybe Name)
-> SchemaP
     SwaggerDoc
     Object
     [Pair]
     UserUpdatedData
     (Maybe TextStatus
      -> Maybe Pict
      -> Maybe ColourId
      -> Maybe [Asset]
      -> Maybe Handle
      -> Maybe Locale
      -> Maybe ManagedBy
      -> Maybe UserSSOId
      -> Bool
      -> Maybe (Set BaseProtocolTag)
      -> Maybe TeamId
      -> UserUpdatedData)
forall a b.
SchemaP SwaggerDoc Object [Pair] UserUpdatedData (a -> b)
-> SchemaP SwaggerDoc Object [Pair] UserUpdatedData a
-> SchemaP SwaggerDoc Object [Pair] UserUpdatedData b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> UserUpdatedData -> Maybe Name
eupName (UserUpdatedData -> Maybe Name)
-> SchemaP SwaggerDoc Object [Pair] (Maybe Name) (Maybe Name)
-> SchemaP SwaggerDoc Object [Pair] UserUpdatedData (Maybe Name)
forall (p :: * -> * -> *) a a' b.
Profunctor p =>
(a -> a') -> p a' b -> p a b
.= SchemaP SwaggerDoc Object [Pair] Name (Maybe Name)
-> SchemaP SwaggerDoc Object [Pair] (Maybe Name) (Maybe Name)
forall w d v a b.
Monoid w =>
SchemaP d v w a b -> SchemaP d v w (Maybe a) b
maybe_ (Text
-> SchemaP NamedSwaggerDoc Value Value Name Name
-> SchemaP SwaggerDoc Object [Pair] Name (Maybe Name)
forall doc doc' a b.
(HasOpt doc, HasField doc' doc) =>
Text
-> SchemaP doc' Value Value a b
-> SchemaP doc Object [Pair] a (Maybe b)
optField Text
"name" SchemaP NamedSwaggerDoc Value Value Name Name
forall a. ToSchema a => ValueSchema NamedSwaggerDoc a
schema)
                              SchemaP
  SwaggerDoc
  Object
  [Pair]
  UserUpdatedData
  (Maybe TextStatus
   -> Maybe Pict
   -> Maybe ColourId
   -> Maybe [Asset]
   -> Maybe Handle
   -> Maybe Locale
   -> Maybe ManagedBy
   -> Maybe UserSSOId
   -> Bool
   -> Maybe (Set BaseProtocolTag)
   -> Maybe TeamId
   -> UserUpdatedData)
-> SchemaP
     SwaggerDoc Object [Pair] UserUpdatedData (Maybe TextStatus)
-> SchemaP
     SwaggerDoc
     Object
     [Pair]
     UserUpdatedData
     (Maybe Pict
      -> Maybe ColourId
      -> Maybe [Asset]
      -> Maybe Handle
      -> Maybe Locale
      -> Maybe ManagedBy
      -> Maybe UserSSOId
      -> Bool
      -> Maybe (Set BaseProtocolTag)
      -> Maybe TeamId
      -> UserUpdatedData)
forall a b.
SchemaP SwaggerDoc Object [Pair] UserUpdatedData (a -> b)
-> SchemaP SwaggerDoc Object [Pair] UserUpdatedData a
-> SchemaP SwaggerDoc Object [Pair] UserUpdatedData b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> UserUpdatedData -> Maybe TextStatus
eupTextStatus (UserUpdatedData -> Maybe TextStatus)
-> SchemaP
     SwaggerDoc Object [Pair] (Maybe TextStatus) (Maybe TextStatus)
-> SchemaP
     SwaggerDoc Object [Pair] UserUpdatedData (Maybe TextStatus)
forall (p :: * -> * -> *) a a' b.
Profunctor p =>
(a -> a') -> p a' b -> p a b
.= SchemaP SwaggerDoc Object [Pair] TextStatus (Maybe TextStatus)
-> SchemaP
     SwaggerDoc Object [Pair] (Maybe TextStatus) (Maybe TextStatus)
forall w d v a b.
Monoid w =>
SchemaP d v w a b -> SchemaP d v w (Maybe a) b
maybe_ (Text
-> SchemaP NamedSwaggerDoc Value Value TextStatus TextStatus
-> SchemaP SwaggerDoc Object [Pair] TextStatus (Maybe TextStatus)
forall doc doc' a b.
(HasOpt doc, HasField doc' doc) =>
Text
-> SchemaP doc' Value Value a b
-> SchemaP doc Object [Pair] a (Maybe b)
optField Text
"text_status" SchemaP NamedSwaggerDoc Value Value TextStatus TextStatus
forall a. ToSchema a => ValueSchema NamedSwaggerDoc a
schema)
                              SchemaP
  SwaggerDoc
  Object
  [Pair]
  UserUpdatedData
  (Maybe Pict
   -> Maybe ColourId
   -> Maybe [Asset]
   -> Maybe Handle
   -> Maybe Locale
   -> Maybe ManagedBy
   -> Maybe UserSSOId
   -> Bool
   -> Maybe (Set BaseProtocolTag)
   -> Maybe TeamId
   -> UserUpdatedData)
-> SchemaP SwaggerDoc Object [Pair] UserUpdatedData (Maybe Pict)
-> SchemaP
     SwaggerDoc
     Object
     [Pair]
     UserUpdatedData
     (Maybe ColourId
      -> Maybe [Asset]
      -> Maybe Handle
      -> Maybe Locale
      -> Maybe ManagedBy
      -> Maybe UserSSOId
      -> Bool
      -> Maybe (Set BaseProtocolTag)
      -> Maybe TeamId
      -> UserUpdatedData)
forall a b.
SchemaP SwaggerDoc Object [Pair] UserUpdatedData (a -> b)
-> SchemaP SwaggerDoc Object [Pair] UserUpdatedData a
-> SchemaP SwaggerDoc Object [Pair] UserUpdatedData b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> UserUpdatedData -> Maybe Pict
eupPict (UserUpdatedData -> Maybe Pict)
-> SchemaP SwaggerDoc Object [Pair] (Maybe Pict) (Maybe Pict)
-> SchemaP SwaggerDoc Object [Pair] UserUpdatedData (Maybe Pict)
forall (p :: * -> * -> *) a a' b.
Profunctor p =>
(a -> a') -> p a' b -> p a b
.= SchemaP SwaggerDoc Object [Pair] Pict (Maybe Pict)
-> SchemaP SwaggerDoc Object [Pair] (Maybe Pict) (Maybe Pict)
forall w d v a b.
Monoid w =>
SchemaP d v w a b -> SchemaP d v w (Maybe a) b
maybe_ (Text
-> SchemaP NamedSwaggerDoc Value Value Pict Pict
-> SchemaP SwaggerDoc Object [Pair] Pict (Maybe Pict)
forall doc doc' a b.
(HasOpt doc, HasField doc' doc) =>
Text
-> SchemaP doc' Value Value a b
-> SchemaP doc Object [Pair] a (Maybe b)
optField Text
"picture" SchemaP NamedSwaggerDoc Value Value Pict Pict
forall a. ToSchema a => ValueSchema NamedSwaggerDoc a
schema) -- DEPRECATED
                              SchemaP
  SwaggerDoc
  Object
  [Pair]
  UserUpdatedData
  (Maybe ColourId
   -> Maybe [Asset]
   -> Maybe Handle
   -> Maybe Locale
   -> Maybe ManagedBy
   -> Maybe UserSSOId
   -> Bool
   -> Maybe (Set BaseProtocolTag)
   -> Maybe TeamId
   -> UserUpdatedData)
-> SchemaP
     SwaggerDoc Object [Pair] UserUpdatedData (Maybe ColourId)
-> SchemaP
     SwaggerDoc
     Object
     [Pair]
     UserUpdatedData
     (Maybe [Asset]
      -> Maybe Handle
      -> Maybe Locale
      -> Maybe ManagedBy
      -> Maybe UserSSOId
      -> Bool
      -> Maybe (Set BaseProtocolTag)
      -> Maybe TeamId
      -> UserUpdatedData)
forall a b.
SchemaP SwaggerDoc Object [Pair] UserUpdatedData (a -> b)
-> SchemaP SwaggerDoc Object [Pair] UserUpdatedData a
-> SchemaP SwaggerDoc Object [Pair] UserUpdatedData b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> UserUpdatedData -> Maybe ColourId
eupAccentId (UserUpdatedData -> Maybe ColourId)
-> SchemaP
     SwaggerDoc Object [Pair] (Maybe ColourId) (Maybe ColourId)
-> SchemaP
     SwaggerDoc Object [Pair] UserUpdatedData (Maybe ColourId)
forall (p :: * -> * -> *) a a' b.
Profunctor p =>
(a -> a') -> p a' b -> p a b
.= SchemaP SwaggerDoc Object [Pair] ColourId (Maybe ColourId)
-> SchemaP
     SwaggerDoc Object [Pair] (Maybe ColourId) (Maybe ColourId)
forall w d v a b.
Monoid w =>
SchemaP d v w a b -> SchemaP d v w (Maybe a) b
maybe_ (Text
-> SchemaP NamedSwaggerDoc Value Value ColourId ColourId
-> SchemaP SwaggerDoc Object [Pair] ColourId (Maybe ColourId)
forall doc doc' a b.
(HasOpt doc, HasField doc' doc) =>
Text
-> SchemaP doc' Value Value a b
-> SchemaP doc Object [Pair] a (Maybe b)
optField Text
"accent_id" SchemaP NamedSwaggerDoc Value Value ColourId ColourId
forall a. ToSchema a => ValueSchema NamedSwaggerDoc a
schema)
                              SchemaP
  SwaggerDoc
  Object
  [Pair]
  UserUpdatedData
  (Maybe [Asset]
   -> Maybe Handle
   -> Maybe Locale
   -> Maybe ManagedBy
   -> Maybe UserSSOId
   -> Bool
   -> Maybe (Set BaseProtocolTag)
   -> Maybe TeamId
   -> UserUpdatedData)
-> SchemaP SwaggerDoc Object [Pair] UserUpdatedData (Maybe [Asset])
-> SchemaP
     SwaggerDoc
     Object
     [Pair]
     UserUpdatedData
     (Maybe Handle
      -> Maybe Locale
      -> Maybe ManagedBy
      -> Maybe UserSSOId
      -> Bool
      -> Maybe (Set BaseProtocolTag)
      -> Maybe TeamId
      -> UserUpdatedData)
forall a b.
SchemaP SwaggerDoc Object [Pair] UserUpdatedData (a -> b)
-> SchemaP SwaggerDoc Object [Pair] UserUpdatedData a
-> SchemaP SwaggerDoc Object [Pair] UserUpdatedData b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> UserUpdatedData -> Maybe [Asset]
eupAssets (UserUpdatedData -> Maybe [Asset])
-> SchemaP SwaggerDoc Object [Pair] (Maybe [Asset]) (Maybe [Asset])
-> SchemaP SwaggerDoc Object [Pair] UserUpdatedData (Maybe [Asset])
forall (p :: * -> * -> *) a a' b.
Profunctor p =>
(a -> a') -> p a' b -> p a b
.= SchemaP SwaggerDoc Object [Pair] [Asset] (Maybe [Asset])
-> SchemaP SwaggerDoc Object [Pair] (Maybe [Asset]) (Maybe [Asset])
forall w d v a b.
Monoid w =>
SchemaP d v w a b -> SchemaP d v w (Maybe a) b
maybe_ (Text
-> SchemaP SwaggerDoc Value Value [Asset] [Asset]
-> SchemaP SwaggerDoc Object [Pair] [Asset] (Maybe [Asset])
forall doc doc' a b.
(HasOpt doc, HasField doc' doc) =>
Text
-> SchemaP doc' Value Value a b
-> SchemaP doc Object [Pair] a (Maybe b)
optField Text
"assets" (ValueSchema NamedSwaggerDoc Asset
-> SchemaP SwaggerDoc Value Value [Asset] [Asset]
forall ndoc doc a.
(HasArray ndoc doc, HasName ndoc) =>
ValueSchema ndoc a -> ValueSchema doc [a]
array ValueSchema NamedSwaggerDoc Asset
forall a. ToSchema a => ValueSchema NamedSwaggerDoc a
schema))
                              SchemaP
  SwaggerDoc
  Object
  [Pair]
  UserUpdatedData
  (Maybe Handle
   -> Maybe Locale
   -> Maybe ManagedBy
   -> Maybe UserSSOId
   -> Bool
   -> Maybe (Set BaseProtocolTag)
   -> Maybe TeamId
   -> UserUpdatedData)
-> SchemaP SwaggerDoc Object [Pair] UserUpdatedData (Maybe Handle)
-> SchemaP
     SwaggerDoc
     Object
     [Pair]
     UserUpdatedData
     (Maybe Locale
      -> Maybe ManagedBy
      -> Maybe UserSSOId
      -> Bool
      -> Maybe (Set BaseProtocolTag)
      -> Maybe TeamId
      -> UserUpdatedData)
forall a b.
SchemaP SwaggerDoc Object [Pair] UserUpdatedData (a -> b)
-> SchemaP SwaggerDoc Object [Pair] UserUpdatedData a
-> SchemaP SwaggerDoc Object [Pair] UserUpdatedData b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> UserUpdatedData -> Maybe Handle
eupHandle (UserUpdatedData -> Maybe Handle)
-> SchemaP SwaggerDoc Object [Pair] (Maybe Handle) (Maybe Handle)
-> SchemaP SwaggerDoc Object [Pair] UserUpdatedData (Maybe Handle)
forall (p :: * -> * -> *) a a' b.
Profunctor p =>
(a -> a') -> p a' b -> p a b
.= SchemaP SwaggerDoc Object [Pair] Handle (Maybe Handle)
-> SchemaP SwaggerDoc Object [Pair] (Maybe Handle) (Maybe Handle)
forall w d v a b.
Monoid w =>
SchemaP d v w a b -> SchemaP d v w (Maybe a) b
maybe_ (Text
-> SchemaP NamedSwaggerDoc Value Value Handle Handle
-> SchemaP SwaggerDoc Object [Pair] Handle (Maybe Handle)
forall doc doc' a b.
(HasOpt doc, HasField doc' doc) =>
Text
-> SchemaP doc' Value Value a b
-> SchemaP doc Object [Pair] a (Maybe b)
optField Text
"handle" SchemaP NamedSwaggerDoc Value Value Handle Handle
forall a. ToSchema a => ValueSchema NamedSwaggerDoc a
schema)
                              SchemaP
  SwaggerDoc
  Object
  [Pair]
  UserUpdatedData
  (Maybe Locale
   -> Maybe ManagedBy
   -> Maybe UserSSOId
   -> Bool
   -> Maybe (Set BaseProtocolTag)
   -> Maybe TeamId
   -> UserUpdatedData)
-> SchemaP SwaggerDoc Object [Pair] UserUpdatedData (Maybe Locale)
-> SchemaP
     SwaggerDoc
     Object
     [Pair]
     UserUpdatedData
     (Maybe ManagedBy
      -> Maybe UserSSOId
      -> Bool
      -> Maybe (Set BaseProtocolTag)
      -> Maybe TeamId
      -> UserUpdatedData)
forall a b.
SchemaP SwaggerDoc Object [Pair] UserUpdatedData (a -> b)
-> SchemaP SwaggerDoc Object [Pair] UserUpdatedData a
-> SchemaP SwaggerDoc Object [Pair] UserUpdatedData b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> UserUpdatedData -> Maybe Locale
eupLocale (UserUpdatedData -> Maybe Locale)
-> SchemaP SwaggerDoc Object [Pair] (Maybe Locale) (Maybe Locale)
-> SchemaP SwaggerDoc Object [Pair] UserUpdatedData (Maybe Locale)
forall (p :: * -> * -> *) a a' b.
Profunctor p =>
(a -> a') -> p a' b -> p a b
.= SchemaP SwaggerDoc Object [Pair] Locale (Maybe Locale)
-> SchemaP SwaggerDoc Object [Pair] (Maybe Locale) (Maybe Locale)
forall w d v a b.
Monoid w =>
SchemaP d v w a b -> SchemaP d v w (Maybe a) b
maybe_ (Text
-> SchemaP NamedSwaggerDoc Value Value Locale Locale
-> SchemaP SwaggerDoc Object [Pair] Locale (Maybe Locale)
forall doc doc' a b.
(HasOpt doc, HasField doc' doc) =>
Text
-> SchemaP doc' Value Value a b
-> SchemaP doc Object [Pair] a (Maybe b)
optField Text
"locale" SchemaP NamedSwaggerDoc Value Value Locale Locale
forall a. ToSchema a => ValueSchema NamedSwaggerDoc a
schema)
                              SchemaP
  SwaggerDoc
  Object
  [Pair]
  UserUpdatedData
  (Maybe ManagedBy
   -> Maybe UserSSOId
   -> Bool
   -> Maybe (Set BaseProtocolTag)
   -> Maybe TeamId
   -> UserUpdatedData)
-> SchemaP
     SwaggerDoc Object [Pair] UserUpdatedData (Maybe ManagedBy)
-> SchemaP
     SwaggerDoc
     Object
     [Pair]
     UserUpdatedData
     (Maybe UserSSOId
      -> Bool
      -> Maybe (Set BaseProtocolTag)
      -> Maybe TeamId
      -> UserUpdatedData)
forall a b.
SchemaP SwaggerDoc Object [Pair] UserUpdatedData (a -> b)
-> SchemaP SwaggerDoc Object [Pair] UserUpdatedData a
-> SchemaP SwaggerDoc Object [Pair] UserUpdatedData b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> UserUpdatedData -> Maybe ManagedBy
eupManagedBy (UserUpdatedData -> Maybe ManagedBy)
-> SchemaP
     SwaggerDoc Object [Pair] (Maybe ManagedBy) (Maybe ManagedBy)
-> SchemaP
     SwaggerDoc Object [Pair] UserUpdatedData (Maybe ManagedBy)
forall (p :: * -> * -> *) a a' b.
Profunctor p =>
(a -> a') -> p a' b -> p a b
.= SchemaP SwaggerDoc Object [Pair] ManagedBy (Maybe ManagedBy)
-> SchemaP
     SwaggerDoc Object [Pair] (Maybe ManagedBy) (Maybe ManagedBy)
forall w d v a b.
Monoid w =>
SchemaP d v w a b -> SchemaP d v w (Maybe a) b
maybe_ (Text
-> SchemaP NamedSwaggerDoc Value Value ManagedBy ManagedBy
-> SchemaP SwaggerDoc Object [Pair] ManagedBy (Maybe ManagedBy)
forall doc doc' a b.
(HasOpt doc, HasField doc' doc) =>
Text
-> SchemaP doc' Value Value a b
-> SchemaP doc Object [Pair] a (Maybe b)
optField Text
"managed_by" SchemaP NamedSwaggerDoc Value Value ManagedBy ManagedBy
forall a. ToSchema a => ValueSchema NamedSwaggerDoc a
schema)
                              SchemaP
  SwaggerDoc
  Object
  [Pair]
  UserUpdatedData
  (Maybe UserSSOId
   -> Bool
   -> Maybe (Set BaseProtocolTag)
   -> Maybe TeamId
   -> UserUpdatedData)
-> SchemaP
     SwaggerDoc Object [Pair] UserUpdatedData (Maybe UserSSOId)
-> SchemaP
     SwaggerDoc
     Object
     [Pair]
     UserUpdatedData
     (Bool
      -> Maybe (Set BaseProtocolTag) -> Maybe TeamId -> UserUpdatedData)
forall a b.
SchemaP SwaggerDoc Object [Pair] UserUpdatedData (a -> b)
-> SchemaP SwaggerDoc Object [Pair] UserUpdatedData a
-> SchemaP SwaggerDoc Object [Pair] UserUpdatedData b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> UserUpdatedData -> Maybe UserSSOId
eupSSOId (UserUpdatedData -> Maybe UserSSOId)
-> SchemaP
     SwaggerDoc Object [Pair] (Maybe UserSSOId) (Maybe UserSSOId)
-> SchemaP
     SwaggerDoc Object [Pair] UserUpdatedData (Maybe UserSSOId)
forall (p :: * -> * -> *) a a' b.
Profunctor p =>
(a -> a') -> p a' b -> p a b
.= SchemaP SwaggerDoc Object [Pair] UserSSOId (Maybe UserSSOId)
-> SchemaP
     SwaggerDoc Object [Pair] (Maybe UserSSOId) (Maybe UserSSOId)
forall w d v a b.
Monoid w =>
SchemaP d v w a b -> SchemaP d v w (Maybe a) b
maybe_ (Text
-> SchemaP NamedSwaggerDoc Value Value UserSSOId UserSSOId
-> SchemaP SwaggerDoc Object [Pair] UserSSOId (Maybe UserSSOId)
forall doc doc' a b.
(HasOpt doc, HasField doc' doc) =>
Text
-> SchemaP doc' Value Value a b
-> SchemaP doc Object [Pair] a (Maybe b)
optField Text
"sso_id" SchemaP NamedSwaggerDoc Value Value UserSSOId UserSSOId
forall a.
(ToSchema a, ToJSON a, FromJSON a) =>
ValueSchema NamedSwaggerDoc a
genericToSchema)
                              SchemaP
  SwaggerDoc
  Object
  [Pair]
  UserUpdatedData
  (Bool
   -> Maybe (Set BaseProtocolTag) -> Maybe TeamId -> UserUpdatedData)
-> SchemaP SwaggerDoc Object [Pair] UserUpdatedData Bool
-> SchemaP
     SwaggerDoc
     Object
     [Pair]
     UserUpdatedData
     (Maybe (Set BaseProtocolTag) -> Maybe TeamId -> UserUpdatedData)
forall a b.
SchemaP SwaggerDoc Object [Pair] UserUpdatedData (a -> b)
-> SchemaP SwaggerDoc Object [Pair] UserUpdatedData a
-> SchemaP SwaggerDoc Object [Pair] UserUpdatedData b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> UserUpdatedData -> Bool
eupSSOIdRemoved (UserUpdatedData -> Bool)
-> SchemaP SwaggerDoc Object [Pair] Bool Bool
-> SchemaP SwaggerDoc Object [Pair] UserUpdatedData Bool
forall (p :: * -> * -> *) a a' b.
Profunctor p =>
(a -> a') -> p a' b -> p a b
.= Text
-> SchemaP NamedSwaggerDoc Value Value Bool Bool
-> SchemaP SwaggerDoc Object [Pair] Bool Bool
forall doc' doc a b.
HasField doc' doc =>
Text
-> SchemaP doc' Value Value a b -> SchemaP doc Object [Pair] a b
field Text
"sso_id_deleted" SchemaP NamedSwaggerDoc Value Value Bool Bool
forall a. ToSchema a => ValueSchema NamedSwaggerDoc a
schema
                              SchemaP
  SwaggerDoc
  Object
  [Pair]
  UserUpdatedData
  (Maybe (Set BaseProtocolTag) -> Maybe TeamId -> UserUpdatedData)
-> SchemaP
     SwaggerDoc
     Object
     [Pair]
     UserUpdatedData
     (Maybe (Set BaseProtocolTag))
-> SchemaP
     SwaggerDoc
     Object
     [Pair]
     UserUpdatedData
     (Maybe TeamId -> UserUpdatedData)
forall a b.
SchemaP SwaggerDoc Object [Pair] UserUpdatedData (a -> b)
-> SchemaP SwaggerDoc Object [Pair] UserUpdatedData a
-> SchemaP SwaggerDoc Object [Pair] UserUpdatedData b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> UserUpdatedData -> Maybe (Set BaseProtocolTag)
eupSupportedProtocols (UserUpdatedData -> Maybe (Set BaseProtocolTag))
-> SchemaP
     SwaggerDoc
     Object
     [Pair]
     (Maybe (Set BaseProtocolTag))
     (Maybe (Set BaseProtocolTag))
-> SchemaP
     SwaggerDoc
     Object
     [Pair]
     UserUpdatedData
     (Maybe (Set BaseProtocolTag))
forall (p :: * -> * -> *) a a' b.
Profunctor p =>
(a -> a') -> p a' b -> p a b
.= SchemaP
  SwaggerDoc
  Object
  [Pair]
  (Set BaseProtocolTag)
  (Maybe (Set BaseProtocolTag))
-> SchemaP
     SwaggerDoc
     Object
     [Pair]
     (Maybe (Set BaseProtocolTag))
     (Maybe (Set BaseProtocolTag))
forall w d v a b.
Monoid w =>
SchemaP d v w a b -> SchemaP d v w (Maybe a) b
maybe_ (Text
-> SchemaP
     SwaggerDoc Value Value (Set BaseProtocolTag) (Set BaseProtocolTag)
-> SchemaP
     SwaggerDoc
     Object
     [Pair]
     (Set BaseProtocolTag)
     (Maybe (Set BaseProtocolTag))
forall doc doc' a b.
(HasOpt doc, HasField doc' doc) =>
Text
-> SchemaP doc' Value Value a b
-> SchemaP doc Object [Pair] a (Maybe b)
optField Text
"supported_protocols" (ValueSchema NamedSwaggerDoc BaseProtocolTag
-> SchemaP
     SwaggerDoc Value Value (Set BaseProtocolTag) (Set BaseProtocolTag)
forall ndoc doc a.
(HasArray ndoc doc, HasName ndoc, Ord a) =>
ValueSchema ndoc a -> ValueSchema doc (Set a)
set ValueSchema NamedSwaggerDoc BaseProtocolTag
forall a. ToSchema a => ValueSchema NamedSwaggerDoc a
schema))
                              SchemaP
  SwaggerDoc
  Object
  [Pair]
  UserUpdatedData
  (Maybe TeamId -> UserUpdatedData)
-> SchemaP SwaggerDoc Object [Pair] UserUpdatedData (Maybe TeamId)
-> SchemaP SwaggerDoc Object [Pair] UserUpdatedData UserUpdatedData
forall a b.
SchemaP SwaggerDoc Object [Pair] UserUpdatedData (a -> b)
-> SchemaP SwaggerDoc Object [Pair] UserUpdatedData a
-> SchemaP SwaggerDoc Object [Pair] UserUpdatedData b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> UserUpdatedData -> Maybe TeamId
eupTeam (UserUpdatedData -> Maybe TeamId)
-> SchemaP SwaggerDoc Object [Pair] (Maybe TeamId) (Maybe TeamId)
-> SchemaP SwaggerDoc Object [Pair] UserUpdatedData (Maybe TeamId)
forall (p :: * -> * -> *) a a' b.
Profunctor p =>
(a -> a') -> p a' b -> p a b
.= SchemaP SwaggerDoc Object [Pair] TeamId (Maybe TeamId)
-> SchemaP SwaggerDoc Object [Pair] (Maybe TeamId) (Maybe TeamId)
forall w d v a b.
Monoid w =>
SchemaP d v w a b -> SchemaP d v w (Maybe a) b
maybe_ (Text
-> SchemaP NamedSwaggerDoc Value Value TeamId TeamId
-> SchemaP SwaggerDoc Object [Pair] TeamId (Maybe TeamId)
forall doc doc' a b.
(HasOpt doc, HasField doc' doc) =>
Text
-> SchemaP doc' Value Value a b
-> SchemaP doc Object [Pair] a (Maybe b)
optField Text
"team" SchemaP NamedSwaggerDoc Value Value TeamId TeamId
forall a. ToSchema a => ValueSchema NamedSwaggerDoc a
schema)
                          )
                      )
                  )
                  SchemaP SwaggerDoc Object [Pair] UserEvent UserEvent
-> SchemaP SwaggerDoc Object [Pair] UserEvent UserEvent
-> SchemaP SwaggerDoc Object [Pair] UserEvent UserEvent
forall a.
SchemaP SwaggerDoc Object [Pair] UserEvent a
-> SchemaP SwaggerDoc Object [Pair] UserEvent a
-> SchemaP SwaggerDoc Object [Pair] UserEvent a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> Prism' UserEvent UserIdentityUpdatedData
-> SchemaP
     SwaggerDoc
     Object
     [Pair]
     UserIdentityUpdatedData
     UserIdentityUpdatedData
-> SchemaP SwaggerDoc Object [Pair] UserEvent UserEvent
forall b b' a a' ss v m.
Prism b b' a a' -> SchemaP ss v m a a' -> SchemaP ss v m b b'
tag
                    p UserIdentityUpdatedData (f UserIdentityUpdatedData)
-> p UserEvent (f UserEvent)
Prism' UserEvent UserIdentityUpdatedData
_UserIdentityUpdated
                    ( Text
-> SchemaP
     NamedSwaggerDoc
     Value
     Value
     UserIdentityUpdatedData
     UserIdentityUpdatedData
-> SchemaP
     SwaggerDoc
     Object
     [Pair]
     UserIdentityUpdatedData
     UserIdentityUpdatedData
forall doc' doc a b.
HasField doc' doc =>
Text
-> SchemaP doc' Value Value a b -> SchemaP doc Object [Pair] a b
field
                        Text
"user"
                        ( Text
-> SchemaP
     SwaggerDoc
     Object
     [Pair]
     UserIdentityUpdatedData
     UserIdentityUpdatedData
-> SchemaP
     NamedSwaggerDoc
     Value
     Value
     UserIdentityUpdatedData
     UserIdentityUpdatedData
forall doc doc' a b.
HasObject doc doc' =>
Text
-> SchemaP doc Object [Pair] a b -> SchemaP doc' Value Value a b
object
                            Text
"UserIdentityUpdatedData"
                            ( UserId
-> Maybe EmailAddress -> Maybe Phone -> UserIdentityUpdatedData
UserIdentityUpdatedData
                                (UserId
 -> Maybe EmailAddress -> Maybe Phone -> UserIdentityUpdatedData)
-> SchemaP SwaggerDoc Object [Pair] UserIdentityUpdatedData UserId
-> SchemaP
     SwaggerDoc
     Object
     [Pair]
     UserIdentityUpdatedData
     (Maybe EmailAddress -> Maybe Phone -> UserIdentityUpdatedData)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> UserIdentityUpdatedData -> UserId
eiuId (UserIdentityUpdatedData -> UserId)
-> SchemaP SwaggerDoc Object [Pair] UserId UserId
-> SchemaP SwaggerDoc Object [Pair] UserIdentityUpdatedData UserId
forall (p :: * -> * -> *) a a' b.
Profunctor p =>
(a -> a') -> p a' b -> p a b
.= Text
-> SchemaP NamedSwaggerDoc Value Value UserId UserId
-> SchemaP SwaggerDoc Object [Pair] UserId UserId
forall doc' doc a b.
HasField doc' doc =>
Text
-> SchemaP doc' Value Value a b -> SchemaP doc Object [Pair] a b
field Text
"id" SchemaP NamedSwaggerDoc Value Value UserId UserId
forall a. ToSchema a => ValueSchema NamedSwaggerDoc a
schema
                                SchemaP
  SwaggerDoc
  Object
  [Pair]
  UserIdentityUpdatedData
  (Maybe EmailAddress -> Maybe Phone -> UserIdentityUpdatedData)
-> SchemaP
     SwaggerDoc
     Object
     [Pair]
     UserIdentityUpdatedData
     (Maybe EmailAddress)
-> SchemaP
     SwaggerDoc
     Object
     [Pair]
     UserIdentityUpdatedData
     (Maybe Phone -> UserIdentityUpdatedData)
forall a b.
SchemaP SwaggerDoc Object [Pair] UserIdentityUpdatedData (a -> b)
-> SchemaP SwaggerDoc Object [Pair] UserIdentityUpdatedData a
-> SchemaP SwaggerDoc Object [Pair] UserIdentityUpdatedData b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> UserIdentityUpdatedData -> Maybe EmailAddress
eiuEmail (UserIdentityUpdatedData -> Maybe EmailAddress)
-> SchemaP
     SwaggerDoc Object [Pair] (Maybe EmailAddress) (Maybe EmailAddress)
-> SchemaP
     SwaggerDoc
     Object
     [Pair]
     UserIdentityUpdatedData
     (Maybe EmailAddress)
forall (p :: * -> * -> *) a a' b.
Profunctor p =>
(a -> a') -> p a' b -> p a b
.= SchemaP SwaggerDoc Object [Pair] EmailAddress (Maybe EmailAddress)
-> SchemaP
     SwaggerDoc Object [Pair] (Maybe EmailAddress) (Maybe EmailAddress)
forall w d v a b.
Monoid w =>
SchemaP d v w a b -> SchemaP d v w (Maybe a) b
maybe_ (Text
-> SchemaP NamedSwaggerDoc Value Value EmailAddress EmailAddress
-> SchemaP
     SwaggerDoc Object [Pair] EmailAddress (Maybe EmailAddress)
forall doc doc' a b.
(HasOpt doc, HasField doc' doc) =>
Text
-> SchemaP doc' Value Value a b
-> SchemaP doc Object [Pair] a (Maybe b)
optField Text
"email" SchemaP NamedSwaggerDoc Value Value EmailAddress EmailAddress
forall a. ToSchema a => ValueSchema NamedSwaggerDoc a
schema)
                                SchemaP
  SwaggerDoc
  Object
  [Pair]
  UserIdentityUpdatedData
  (Maybe Phone -> UserIdentityUpdatedData)
-> SchemaP
     SwaggerDoc Object [Pair] UserIdentityUpdatedData (Maybe Phone)
-> SchemaP
     SwaggerDoc
     Object
     [Pair]
     UserIdentityUpdatedData
     UserIdentityUpdatedData
forall a b.
SchemaP SwaggerDoc Object [Pair] UserIdentityUpdatedData (a -> b)
-> SchemaP SwaggerDoc Object [Pair] UserIdentityUpdatedData a
-> SchemaP SwaggerDoc Object [Pair] UserIdentityUpdatedData b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> UserIdentityUpdatedData -> Maybe Phone
eiuPhone (UserIdentityUpdatedData -> Maybe Phone)
-> SchemaP SwaggerDoc Object [Pair] (Maybe Phone) (Maybe Phone)
-> SchemaP
     SwaggerDoc Object [Pair] UserIdentityUpdatedData (Maybe Phone)
forall (p :: * -> * -> *) a a' b.
Profunctor p =>
(a -> a') -> p a' b -> p a b
.= SchemaP SwaggerDoc Object [Pair] Phone (Maybe Phone)
-> SchemaP SwaggerDoc Object [Pair] (Maybe Phone) (Maybe Phone)
forall w d v a b.
Monoid w =>
SchemaP d v w a b -> SchemaP d v w (Maybe a) b
maybe_ (Text
-> SchemaP NamedSwaggerDoc Value Value Phone Phone
-> SchemaP SwaggerDoc Object [Pair] Phone (Maybe Phone)
forall doc doc' a b.
(HasOpt doc, HasField doc' doc) =>
Text
-> SchemaP doc' Value Value a b
-> SchemaP doc Object [Pair] a (Maybe b)
optField Text
"phone" SchemaP NamedSwaggerDoc Value Value Phone Phone
forall a. ToSchema a => ValueSchema NamedSwaggerDoc a
schema)
                            )
                        )
                    )
              )
          EventType
EventTypeUserIdentityRemoved ->
            Prism' Event UserEvent
-> SchemaP SwaggerDoc Object [Pair] UserEvent UserEvent
-> ObjectSchema SwaggerDoc Event
forall b b' a a' ss v m.
Prism b b' a a' -> SchemaP ss v m a a' -> SchemaP ss v m b b'
tag
              p UserEvent (f UserEvent) -> p Event (f Event)
Prism' Event UserEvent
_UserEvent
              ( Prism' UserEvent UserIdentityRemovedData
-> SchemaP
     SwaggerDoc
     Object
     [Pair]
     UserIdentityRemovedData
     UserIdentityRemovedData
-> SchemaP SwaggerDoc Object [Pair] UserEvent UserEvent
forall b b' a a' ss v m.
Prism b b' a a' -> SchemaP ss v m a a' -> SchemaP ss v m b b'
tag
                  p UserIdentityRemovedData (f UserIdentityRemovedData)
-> p UserEvent (f UserEvent)
Prism' UserEvent UserIdentityRemovedData
_UserIdentityRemoved
                  ( Text
-> SchemaP
     NamedSwaggerDoc
     Value
     Value
     UserIdentityRemovedData
     UserIdentityRemovedData
-> SchemaP
     SwaggerDoc
     Object
     [Pair]
     UserIdentityRemovedData
     UserIdentityRemovedData
forall doc' doc a b.
HasField doc' doc =>
Text
-> SchemaP doc' Value Value a b -> SchemaP doc Object [Pair] a b
field
                      Text
"user"
                      ( Text
-> SchemaP
     SwaggerDoc
     Object
     [Pair]
     UserIdentityRemovedData
     UserIdentityRemovedData
-> SchemaP
     NamedSwaggerDoc
     Value
     Value
     UserIdentityRemovedData
     UserIdentityRemovedData
forall doc doc' a b.
HasObject doc doc' =>
Text
-> SchemaP doc Object [Pair] a b -> SchemaP doc' Value Value a b
object
                          Text
"UserIdentityRemovedData"
                          ( UserId
-> Maybe EmailAddress -> Maybe Phone -> UserIdentityRemovedData
UserIdentityRemovedData
                              (UserId
 -> Maybe EmailAddress -> Maybe Phone -> UserIdentityRemovedData)
-> SchemaP SwaggerDoc Object [Pair] UserIdentityRemovedData UserId
-> SchemaP
     SwaggerDoc
     Object
     [Pair]
     UserIdentityRemovedData
     (Maybe EmailAddress -> Maybe Phone -> UserIdentityRemovedData)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> UserIdentityRemovedData -> UserId
eirId (UserIdentityRemovedData -> UserId)
-> SchemaP SwaggerDoc Object [Pair] UserId UserId
-> SchemaP SwaggerDoc Object [Pair] UserIdentityRemovedData UserId
forall (p :: * -> * -> *) a a' b.
Profunctor p =>
(a -> a') -> p a' b -> p a b
.= Text
-> SchemaP NamedSwaggerDoc Value Value UserId UserId
-> SchemaP SwaggerDoc Object [Pair] UserId UserId
forall doc' doc a b.
HasField doc' doc =>
Text
-> SchemaP doc' Value Value a b -> SchemaP doc Object [Pair] a b
field Text
"id" SchemaP NamedSwaggerDoc Value Value UserId UserId
forall a. ToSchema a => ValueSchema NamedSwaggerDoc a
schema
                              SchemaP
  SwaggerDoc
  Object
  [Pair]
  UserIdentityRemovedData
  (Maybe EmailAddress -> Maybe Phone -> UserIdentityRemovedData)
-> SchemaP
     SwaggerDoc
     Object
     [Pair]
     UserIdentityRemovedData
     (Maybe EmailAddress)
-> SchemaP
     SwaggerDoc
     Object
     [Pair]
     UserIdentityRemovedData
     (Maybe Phone -> UserIdentityRemovedData)
forall a b.
SchemaP SwaggerDoc Object [Pair] UserIdentityRemovedData (a -> b)
-> SchemaP SwaggerDoc Object [Pair] UserIdentityRemovedData a
-> SchemaP SwaggerDoc Object [Pair] UserIdentityRemovedData b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> UserIdentityRemovedData -> Maybe EmailAddress
eirEmail (UserIdentityRemovedData -> Maybe EmailAddress)
-> SchemaP
     SwaggerDoc Object [Pair] (Maybe EmailAddress) (Maybe EmailAddress)
-> SchemaP
     SwaggerDoc
     Object
     [Pair]
     UserIdentityRemovedData
     (Maybe EmailAddress)
forall (p :: * -> * -> *) a a' b.
Profunctor p =>
(a -> a') -> p a' b -> p a b
.= SchemaP SwaggerDoc Object [Pair] EmailAddress (Maybe EmailAddress)
-> SchemaP
     SwaggerDoc Object [Pair] (Maybe EmailAddress) (Maybe EmailAddress)
forall w d v a b.
Monoid w =>
SchemaP d v w a b -> SchemaP d v w (Maybe a) b
maybe_ (Text
-> SchemaP NamedSwaggerDoc Value Value EmailAddress EmailAddress
-> SchemaP
     SwaggerDoc Object [Pair] EmailAddress (Maybe EmailAddress)
forall doc doc' a b.
(HasOpt doc, HasField doc' doc) =>
Text
-> SchemaP doc' Value Value a b
-> SchemaP doc Object [Pair] a (Maybe b)
optField Text
"email" SchemaP NamedSwaggerDoc Value Value EmailAddress EmailAddress
forall a. ToSchema a => ValueSchema NamedSwaggerDoc a
schema)
                              SchemaP
  SwaggerDoc
  Object
  [Pair]
  UserIdentityRemovedData
  (Maybe Phone -> UserIdentityRemovedData)
-> SchemaP
     SwaggerDoc Object [Pair] UserIdentityRemovedData (Maybe Phone)
-> SchemaP
     SwaggerDoc
     Object
     [Pair]
     UserIdentityRemovedData
     UserIdentityRemovedData
forall a b.
SchemaP SwaggerDoc Object [Pair] UserIdentityRemovedData (a -> b)
-> SchemaP SwaggerDoc Object [Pair] UserIdentityRemovedData a
-> SchemaP SwaggerDoc Object [Pair] UserIdentityRemovedData b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> UserIdentityRemovedData -> Maybe Phone
eirPhone (UserIdentityRemovedData -> Maybe Phone)
-> SchemaP SwaggerDoc Object [Pair] (Maybe Phone) (Maybe Phone)
-> SchemaP
     SwaggerDoc Object [Pair] UserIdentityRemovedData (Maybe Phone)
forall (p :: * -> * -> *) a a' b.
Profunctor p =>
(a -> a') -> p a' b -> p a b
.= SchemaP SwaggerDoc Object [Pair] Phone (Maybe Phone)
-> SchemaP SwaggerDoc Object [Pair] (Maybe Phone) (Maybe Phone)
forall w d v a b.
Monoid w =>
SchemaP d v w a b -> SchemaP d v w (Maybe a) b
maybe_ (Text
-> SchemaP NamedSwaggerDoc Value Value Phone Phone
-> SchemaP SwaggerDoc Object [Pair] Phone (Maybe Phone)
forall doc doc' a b.
(HasOpt doc, HasField doc' doc) =>
Text
-> SchemaP doc' Value Value a b
-> SchemaP doc Object [Pair] a (Maybe b)
optField Text
"phone" SchemaP NamedSwaggerDoc Value Value Phone Phone
forall a. ToSchema a => ValueSchema NamedSwaggerDoc a
schema)
                          )
                      )
                  )
              )
          EventType
EventTypeUserSuspended -> Prism' Event UserEvent
-> SchemaP SwaggerDoc Object [Pair] UserEvent UserEvent
-> ObjectSchema SwaggerDoc Event
forall b b' a a' ss v m.
Prism b b' a a' -> SchemaP ss v m a a' -> SchemaP ss v m b b'
tag p UserEvent (f UserEvent) -> p Event (f Event)
Prism' Event UserEvent
_UserEvent (Prism' UserEvent UserId
-> SchemaP SwaggerDoc Object [Pair] UserId UserId
-> SchemaP SwaggerDoc Object [Pair] UserEvent UserEvent
forall b b' a a' ss v m.
Prism b b' a a' -> SchemaP ss v m a a' -> SchemaP ss v m b b'
tag p UserId (f UserId) -> p UserEvent (f UserEvent)
Prism' UserEvent UserId
_UserSuspended (Text
-> SchemaP NamedSwaggerDoc Value Value UserId UserId
-> SchemaP SwaggerDoc Object [Pair] UserId UserId
forall doc' doc a b.
HasField doc' doc =>
Text
-> SchemaP doc' Value Value a b -> SchemaP doc Object [Pair] a b
field Text
"id" SchemaP NamedSwaggerDoc Value Value UserId UserId
forall a. ToSchema a => ValueSchema NamedSwaggerDoc a
schema))
          EventType
EventTypeUserResumed -> Prism' Event UserEvent
-> SchemaP SwaggerDoc Object [Pair] UserEvent UserEvent
-> ObjectSchema SwaggerDoc Event
forall b b' a a' ss v m.
Prism b b' a a' -> SchemaP ss v m a a' -> SchemaP ss v m b b'
tag p UserEvent (f UserEvent) -> p Event (f Event)
Prism' Event UserEvent
_UserEvent (Prism' UserEvent UserId
-> SchemaP SwaggerDoc Object [Pair] UserId UserId
-> SchemaP SwaggerDoc Object [Pair] UserEvent UserEvent
forall b b' a a' ss v m.
Prism b b' a a' -> SchemaP ss v m a a' -> SchemaP ss v m b b'
tag p UserId (f UserId) -> p UserEvent (f UserEvent)
Prism' UserEvent UserId
_UserResumed (Text
-> SchemaP NamedSwaggerDoc Value Value UserId UserId
-> SchemaP SwaggerDoc Object [Pair] UserId UserId
forall doc' doc a b.
HasField doc' doc =>
Text
-> SchemaP doc' Value Value a b -> SchemaP doc Object [Pair] a b
field Text
"id" SchemaP NamedSwaggerDoc Value Value UserId UserId
forall a. ToSchema a => ValueSchema NamedSwaggerDoc a
schema))
          EventType
EventTypeUserDeleted ->
            Prism' Event UserEvent
-> SchemaP SwaggerDoc Object [Pair] UserEvent UserEvent
-> ObjectSchema SwaggerDoc Event
forall b b' a a' ss v m.
Prism b b' a a' -> SchemaP ss v m a a' -> SchemaP ss v m b b'
tag
              p UserEvent (f UserEvent) -> p Event (f Event)
Prism' Event UserEvent
_UserEvent
              ( Prism' UserEvent (Qualified UserId)
-> SchemaP
     SwaggerDoc Object [Pair] (Qualified UserId) (Qualified UserId)
-> SchemaP SwaggerDoc Object [Pair] UserEvent UserEvent
forall b b' a a' ss v m.
Prism b b' a a' -> SchemaP ss v m a a' -> SchemaP ss v m b b'
tag
                  p (Qualified UserId) (f (Qualified UserId))
-> p UserEvent (f UserEvent)
Prism' UserEvent (Qualified UserId)
_UserDeleted
                  ( Text
-> SchemaP
     NamedSwaggerDoc Value Value (Qualified UserId) (Qualified UserId)
-> SchemaP
     SwaggerDoc Object [Pair] (Qualified UserId) (Qualified UserId)
forall doc' doc a b.
HasField doc' doc =>
Text
-> SchemaP doc' Value Value a b -> SchemaP doc Object [Pair] a b
field Text
"qualified_id" SchemaP
  NamedSwaggerDoc Value Value (Qualified UserId) (Qualified UserId)
forall a. ToSchema a => ValueSchema NamedSwaggerDoc a
schema
                      SchemaP
  SwaggerDoc Object [Pair] (Qualified UserId) (Qualified UserId)
-> SchemaP SwaggerDoc Object [Pair] (Qualified UserId) UserId
-> SchemaP
     SwaggerDoc Object [Pair] (Qualified UserId) (Qualified UserId)
forall a b.
SchemaP SwaggerDoc Object [Pair] (Qualified UserId) a
-> SchemaP SwaggerDoc Object [Pair] (Qualified UserId) b
-> SchemaP SwaggerDoc Object [Pair] (Qualified UserId) a
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f a
<* Qualified UserId -> UserId
forall a. Qualified a -> a
qUnqualified (Qualified UserId -> UserId)
-> SchemaP SwaggerDoc Object [Pair] UserId UserId
-> SchemaP SwaggerDoc Object [Pair] (Qualified UserId) UserId
forall (p :: * -> * -> *) a a' b.
Profunctor p =>
(a -> a') -> p a' b -> p a b
.= Text
-> SchemaP NamedSwaggerDoc Value Value UserId UserId
-> SchemaP SwaggerDoc Object [Pair] UserId UserId
forall doc' doc a b.
HasField doc' doc =>
Text
-> SchemaP doc' Value Value a b -> SchemaP doc Object [Pair] a b
field Text
"id" SchemaP NamedSwaggerDoc Value Value UserId UserId
forall a. ToSchema a => ValueSchema NamedSwaggerDoc a
schema
                  )
              )
          EventType
EventTypeUserLegalholdEnabled ->
            Prism' Event UserEvent
-> SchemaP SwaggerDoc Object [Pair] UserEvent UserEvent
-> ObjectSchema SwaggerDoc Event
forall b b' a a' ss v m.
Prism b b' a a' -> SchemaP ss v m a a' -> SchemaP ss v m b b'
tag
              p UserEvent (f UserEvent) -> p Event (f Event)
Prism' Event UserEvent
_UserEvent
              ( Prism' UserEvent UserId
-> SchemaP SwaggerDoc Object [Pair] UserId UserId
-> SchemaP SwaggerDoc Object [Pair] UserEvent UserEvent
forall b b' a a' ss v m.
Prism b b' a a' -> SchemaP ss v m a a' -> SchemaP ss v m b b'
tag p UserId (f UserId) -> p UserEvent (f UserEvent)
Prism' UserEvent UserId
_UserLegalHoldEnabled (Text
-> SchemaP NamedSwaggerDoc Value Value UserId UserId
-> SchemaP SwaggerDoc Object [Pair] UserId UserId
forall doc' doc a b.
HasField doc' doc =>
Text
-> SchemaP doc' Value Value a b -> SchemaP doc Object [Pair] a b
field Text
"id" SchemaP NamedSwaggerDoc Value Value UserId UserId
forall a. ToSchema a => ValueSchema NamedSwaggerDoc a
schema)
              )
          EventType
EventTypeUserLegalholdDisabled ->
            Prism' Event UserEvent
-> SchemaP SwaggerDoc Object [Pair] UserEvent UserEvent
-> ObjectSchema SwaggerDoc Event
forall b b' a a' ss v m.
Prism b b' a a' -> SchemaP ss v m a a' -> SchemaP ss v m b b'
tag
              p UserEvent (f UserEvent) -> p Event (f Event)
Prism' Event UserEvent
_UserEvent
              ( Prism' UserEvent UserId
-> SchemaP SwaggerDoc Object [Pair] UserId UserId
-> SchemaP SwaggerDoc Object [Pair] UserEvent UserEvent
forall b b' a a' ss v m.
Prism b b' a a' -> SchemaP ss v m a a' -> SchemaP ss v m b b'
tag p UserId (f UserId) -> p UserEvent (f UserEvent)
Prism' UserEvent UserId
_UserLegalHoldDisabled (Text
-> SchemaP NamedSwaggerDoc Value Value UserId UserId
-> SchemaP SwaggerDoc Object [Pair] UserId UserId
forall doc' doc a b.
HasField doc' doc =>
Text
-> SchemaP doc' Value Value a b -> SchemaP doc Object [Pair] a b
field Text
"id" SchemaP NamedSwaggerDoc Value Value UserId UserId
forall a. ToSchema a => ValueSchema NamedSwaggerDoc a
schema)
              )
          EventType
EventTypeUserLegalholdRequested ->
            Prism' Event UserEvent
-> SchemaP SwaggerDoc Object [Pair] UserEvent UserEvent
-> ObjectSchema SwaggerDoc Event
forall b b' a a' ss v m.
Prism b b' a a' -> SchemaP ss v m a a' -> SchemaP ss v m b b'
tag
              p UserEvent (f UserEvent) -> p Event (f Event)
Prism' Event UserEvent
_UserEvent
              ( Prism' UserEvent LegalHoldClientRequestedData
-> SchemaP
     SwaggerDoc
     Object
     [Pair]
     LegalHoldClientRequestedData
     LegalHoldClientRequestedData
-> SchemaP SwaggerDoc Object [Pair] UserEvent UserEvent
forall b b' a a' ss v m.
Prism b b' a a' -> SchemaP ss v m a a' -> SchemaP ss v m b b'
tag
                  p LegalHoldClientRequestedData (f LegalHoldClientRequestedData)
-> p UserEvent (f UserEvent)
Prism' UserEvent LegalHoldClientRequestedData
_LegalHoldClientRequested
                  ( UserId -> LastPrekey -> ClientId -> LegalHoldClientRequestedData
LegalHoldClientRequestedData
                      (UserId -> LastPrekey -> ClientId -> LegalHoldClientRequestedData)
-> SchemaP
     SwaggerDoc Object [Pair] LegalHoldClientRequestedData UserId
-> SchemaP
     SwaggerDoc
     Object
     [Pair]
     LegalHoldClientRequestedData
     (LastPrekey -> ClientId -> LegalHoldClientRequestedData)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> LegalHoldClientRequestedData -> UserId
lhcTargetUser (LegalHoldClientRequestedData -> UserId)
-> SchemaP SwaggerDoc Object [Pair] UserId UserId
-> SchemaP
     SwaggerDoc Object [Pair] LegalHoldClientRequestedData UserId
forall (p :: * -> * -> *) a a' b.
Profunctor p =>
(a -> a') -> p a' b -> p a b
.= Text
-> SchemaP NamedSwaggerDoc Value Value UserId UserId
-> SchemaP SwaggerDoc Object [Pair] UserId UserId
forall doc' doc a b.
HasField doc' doc =>
Text
-> SchemaP doc' Value Value a b -> SchemaP doc Object [Pair] a b
field Text
"id" SchemaP NamedSwaggerDoc Value Value UserId UserId
forall a. ToSchema a => ValueSchema NamedSwaggerDoc a
schema
                      SchemaP
  SwaggerDoc
  Object
  [Pair]
  LegalHoldClientRequestedData
  (LastPrekey -> ClientId -> LegalHoldClientRequestedData)
-> SchemaP
     SwaggerDoc Object [Pair] LegalHoldClientRequestedData LastPrekey
-> SchemaP
     SwaggerDoc
     Object
     [Pair]
     LegalHoldClientRequestedData
     (ClientId -> LegalHoldClientRequestedData)
forall a b.
SchemaP
  SwaggerDoc Object [Pair] LegalHoldClientRequestedData (a -> b)
-> SchemaP SwaggerDoc Object [Pair] LegalHoldClientRequestedData a
-> SchemaP SwaggerDoc Object [Pair] LegalHoldClientRequestedData b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> LegalHoldClientRequestedData -> LastPrekey
lhcLastPrekey (LegalHoldClientRequestedData -> LastPrekey)
-> SchemaP SwaggerDoc Object [Pair] LastPrekey LastPrekey
-> SchemaP
     SwaggerDoc Object [Pair] LegalHoldClientRequestedData LastPrekey
forall (p :: * -> * -> *) a a' b.
Profunctor p =>
(a -> a') -> p a' b -> p a b
.= Text
-> SchemaP NamedSwaggerDoc Value Value LastPrekey LastPrekey
-> SchemaP SwaggerDoc Object [Pair] LastPrekey LastPrekey
forall doc' doc a b.
HasField doc' doc =>
Text
-> SchemaP doc' Value Value a b -> SchemaP doc Object [Pair] a b
field Text
"last_prekey" SchemaP NamedSwaggerDoc Value Value LastPrekey LastPrekey
forall a. ToSchema a => ValueSchema NamedSwaggerDoc a
schema
                      SchemaP
  SwaggerDoc
  Object
  [Pair]
  LegalHoldClientRequestedData
  (ClientId -> LegalHoldClientRequestedData)
-> SchemaP
     SwaggerDoc Object [Pair] LegalHoldClientRequestedData ClientId
-> SchemaP
     SwaggerDoc
     Object
     [Pair]
     LegalHoldClientRequestedData
     LegalHoldClientRequestedData
forall a b.
SchemaP
  SwaggerDoc Object [Pair] LegalHoldClientRequestedData (a -> b)
-> SchemaP SwaggerDoc Object [Pair] LegalHoldClientRequestedData a
-> SchemaP SwaggerDoc Object [Pair] LegalHoldClientRequestedData b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> LegalHoldClientRequestedData -> ClientId
lhcClientId (LegalHoldClientRequestedData -> ClientId)
-> SchemaP SwaggerDoc Object [Pair] ClientId ClientId
-> SchemaP
     SwaggerDoc Object [Pair] LegalHoldClientRequestedData ClientId
forall (p :: * -> * -> *) a a' b.
Profunctor p =>
(a -> a') -> p a' b -> p a b
.= Text
-> SchemaP NamedSwaggerDoc Value Value ClientId ClientId
-> SchemaP SwaggerDoc Object [Pair] ClientId ClientId
forall doc' doc a b.
HasField doc' doc =>
Text
-> SchemaP doc' Value Value a b -> SchemaP doc Object [Pair] a b
field Text
"client" (SchemaP NamedSwaggerDoc Value Value ClientId ClientId
-> SchemaP NamedSwaggerDoc Value Value ClientId ClientId
forall a b.
ValueSchemaP NamedSwaggerDoc a b
-> ValueSchemaP NamedSwaggerDoc a b
idObjectSchema SchemaP NamedSwaggerDoc Value Value ClientId ClientId
forall a. ToSchema a => ValueSchema NamedSwaggerDoc a
schema)
                  )
              )
          EventType
EventTypePropertiesSet ->
            Prism' Event PropertyEvent
-> SchemaP SwaggerDoc Object [Pair] PropertyEvent PropertyEvent
-> ObjectSchema SwaggerDoc Event
forall b b' a a' ss v m.
Prism b b' a a' -> SchemaP ss v m a a' -> SchemaP ss v m b b'
tag
              p PropertyEvent (f PropertyEvent) -> p Event (f Event)
Prism' Event PropertyEvent
_PropertyEvent
              ( Prism' PropertyEvent (PropertyKey, Value)
-> SchemaP
     SwaggerDoc Object [Pair] (PropertyKey, Value) (PropertyKey, Value)
-> SchemaP SwaggerDoc Object [Pair] PropertyEvent PropertyEvent
forall b b' a a' ss v m.
Prism b b' a a' -> SchemaP ss v m a a' -> SchemaP ss v m b b'
tag
                  p (PropertyKey, Value) (f (PropertyKey, Value))
-> p PropertyEvent (f PropertyEvent)
Prism' PropertyEvent (PropertyKey, Value)
_PropertySet
                  ( (,)
                      (PropertyKey -> Value -> (PropertyKey, Value))
-> SchemaP
     SwaggerDoc Object [Pair] (PropertyKey, Value) PropertyKey
-> SchemaP
     SwaggerDoc
     Object
     [Pair]
     (PropertyKey, Value)
     (Value -> (PropertyKey, Value))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (PropertyKey, Value) -> PropertyKey
forall a b. (a, b) -> a
fst ((PropertyKey, Value) -> PropertyKey)
-> SchemaP SwaggerDoc Object [Pair] PropertyKey PropertyKey
-> SchemaP
     SwaggerDoc Object [Pair] (PropertyKey, Value) PropertyKey
forall (p :: * -> * -> *) a a' b.
Profunctor p =>
(a -> a') -> p a' b -> p a b
.= Text
-> SchemaP NamedSwaggerDoc Value Value PropertyKey PropertyKey
-> SchemaP SwaggerDoc Object [Pair] PropertyKey PropertyKey
forall doc' doc a b.
HasField doc' doc =>
Text
-> SchemaP doc' Value Value a b -> SchemaP doc Object [Pair] a b
field Text
"key" SchemaP NamedSwaggerDoc Value Value PropertyKey PropertyKey
forall a.
(ToSchema a, ToJSON a, FromJSON a) =>
ValueSchema NamedSwaggerDoc a
genericToSchema
                      SchemaP
  SwaggerDoc
  Object
  [Pair]
  (PropertyKey, Value)
  (Value -> (PropertyKey, Value))
-> SchemaP SwaggerDoc Object [Pair] (PropertyKey, Value) Value
-> SchemaP
     SwaggerDoc Object [Pair] (PropertyKey, Value) (PropertyKey, Value)
forall a b.
SchemaP SwaggerDoc Object [Pair] (PropertyKey, Value) (a -> b)
-> SchemaP SwaggerDoc Object [Pair] (PropertyKey, Value) a
-> SchemaP SwaggerDoc Object [Pair] (PropertyKey, Value) b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (PropertyKey, Value) -> Value
forall a b. (a, b) -> b
snd ((PropertyKey, Value) -> Value)
-> SchemaP SwaggerDoc Object [Pair] Value Value
-> SchemaP SwaggerDoc Object [Pair] (PropertyKey, Value) Value
forall (p :: * -> * -> *) a a' b.
Profunctor p =>
(a -> a') -> p a' b -> p a b
.= Text
-> SchemaP SwaggerDoc Value Value Value Value
-> SchemaP SwaggerDoc Object [Pair] Value Value
forall doc' doc a b.
HasField doc' doc =>
Text
-> SchemaP doc' Value Value a b -> SchemaP doc Object [Pair] a b
field Text
"value" SchemaP SwaggerDoc Value Value Value Value
jsonValue
                  )
              )
          EventType
EventTypePropertiesDeleted ->
            Prism' Event PropertyEvent
-> SchemaP SwaggerDoc Object [Pair] PropertyEvent PropertyEvent
-> ObjectSchema SwaggerDoc Event
forall b b' a a' ss v m.
Prism b b' a a' -> SchemaP ss v m a a' -> SchemaP ss v m b b'
tag
              p PropertyEvent (f PropertyEvent) -> p Event (f Event)
Prism' Event PropertyEvent
_PropertyEvent
              ( Prism' PropertyEvent PropertyKey
-> SchemaP SwaggerDoc Object [Pair] PropertyKey PropertyKey
-> SchemaP SwaggerDoc Object [Pair] PropertyEvent PropertyEvent
forall b b' a a' ss v m.
Prism b b' a a' -> SchemaP ss v m a a' -> SchemaP ss v m b b'
tag
                  p PropertyKey (f PropertyKey) -> p PropertyEvent (f PropertyEvent)
Prism' PropertyEvent PropertyKey
_PropertyDeleted
                  (Text
-> SchemaP NamedSwaggerDoc Value Value PropertyKey PropertyKey
-> SchemaP SwaggerDoc Object [Pair] PropertyKey PropertyKey
forall doc' doc a b.
HasField doc' doc =>
Text
-> SchemaP doc' Value Value a b -> SchemaP doc Object [Pair] a b
field Text
"key" SchemaP NamedSwaggerDoc Value Value PropertyKey PropertyKey
forall a.
(ToSchema a, ToJSON a, FromJSON a) =>
ValueSchema NamedSwaggerDoc a
genericToSchema)
              )
          EventType
EventTypePropertiesCleared ->
            Prism' Event PropertyEvent
-> SchemaP SwaggerDoc Object [Pair] PropertyEvent PropertyEvent
-> ObjectSchema SwaggerDoc Event
forall b b' a a' ss v m.
Prism b b' a a' -> SchemaP ss v m a a' -> SchemaP ss v m b b'
tag
              p PropertyEvent (f PropertyEvent) -> p Event (f Event)
Prism' Event PropertyEvent
_PropertyEvent
              ( Prism' PropertyEvent ()
-> SchemaP SwaggerDoc Object [Pair] () ()
-> SchemaP SwaggerDoc Object [Pair] PropertyEvent PropertyEvent
forall b b' a a' ss v m.
Prism b b' a a' -> SchemaP ss v m a a' -> SchemaP ss v m b b'
tag
                  p () (f ()) -> p PropertyEvent (f PropertyEvent)
Prism' PropertyEvent ()
_PropertiesCleared
                  (() -> SchemaP SwaggerDoc Object [Pair] () ()
forall a. a -> SchemaP SwaggerDoc Object [Pair] () a
forall (f :: * -> *) a. Applicative f => a -> f a
pure ())
              )
          EventType
EventTypeClientAdded ->
            Prism' Event ClientEvent
-> SchemaP SwaggerDoc Object [Pair] ClientEvent ClientEvent
-> ObjectSchema SwaggerDoc Event
forall b b' a a' ss v m.
Prism b b' a a' -> SchemaP ss v m a a' -> SchemaP ss v m b b'
tag
              p ClientEvent (f ClientEvent) -> p Event (f Event)
Prism' Event ClientEvent
_ClientEvent
              ( Prism' ClientEvent Client
-> SchemaP SwaggerDoc Object [Pair] Client Client
-> SchemaP SwaggerDoc Object [Pair] ClientEvent ClientEvent
forall b b' a a' ss v m.
Prism b b' a a' -> SchemaP ss v m a a' -> SchemaP ss v m b b'
tag
                  p Client (f Client) -> p ClientEvent (f ClientEvent)
Prism' ClientEvent Client
_ClientAdded
                  (Text
-> SchemaP NamedSwaggerDoc Value Value Client Client
-> SchemaP SwaggerDoc Object [Pair] Client Client
forall doc' doc a b.
HasField doc' doc =>
Text
-> SchemaP doc' Value Value a b -> SchemaP doc Object [Pair] a b
field Text
"client" (Maybe Version -> SchemaP NamedSwaggerDoc Value Value Client Client
clientSchema (Version -> Maybe Version
forall a. a -> Maybe a
Just Version
V6)))
              )
          EventType
EventTypeClientRemoved ->
            Prism' Event ClientEvent
-> SchemaP SwaggerDoc Object [Pair] ClientEvent ClientEvent
-> ObjectSchema SwaggerDoc Event
forall b b' a a' ss v m.
Prism b b' a a' -> SchemaP ss v m a a' -> SchemaP ss v m b b'
tag
              p ClientEvent (f ClientEvent) -> p Event (f Event)
Prism' Event ClientEvent
_ClientEvent
              ( Prism' ClientEvent ClientId
-> SchemaP SwaggerDoc Object [Pair] ClientId ClientId
-> SchemaP SwaggerDoc Object [Pair] ClientEvent ClientEvent
forall b b' a a' ss v m.
Prism b b' a a' -> SchemaP ss v m a a' -> SchemaP ss v m b b'
tag
                  p ClientId (f ClientId) -> p ClientEvent (f ClientEvent)
Prism' ClientEvent ClientId
_ClientRemoved
                  (Text
-> SchemaP NamedSwaggerDoc Value Value ClientId ClientId
-> SchemaP SwaggerDoc Object [Pair] ClientId ClientId
forall doc' doc a b.
HasField doc' doc =>
Text
-> SchemaP doc' Value Value a b -> SchemaP doc Object [Pair] a b
field Text
"client" (SchemaP NamedSwaggerDoc Value Value ClientId ClientId
-> SchemaP NamedSwaggerDoc Value Value ClientId ClientId
forall a b.
ValueSchemaP NamedSwaggerDoc a b
-> ValueSchemaP NamedSwaggerDoc a b
idObjectSchema SchemaP NamedSwaggerDoc Value Value ClientId ClientId
forall a. ToSchema a => ValueSchema NamedSwaggerDoc a
schema))
              )
          EventType
EventTypeConnection ->
            Prism' Event ConnectionEvent
-> SchemaP SwaggerDoc Object [Pair] ConnectionEvent ConnectionEvent
-> ObjectSchema SwaggerDoc Event
forall b b' a a' ss v m.
Prism b b' a a' -> SchemaP ss v m a a' -> SchemaP ss v m b b'
tag
              p ConnectionEvent (f ConnectionEvent) -> p Event (f Event)
Prism' Event ConnectionEvent
_ConnectionEvent
              ( UserConnection -> Maybe Name -> ConnectionEvent
ConnectionUpdated
                  (UserConnection -> Maybe Name -> ConnectionEvent)
-> SchemaP SwaggerDoc Object [Pair] ConnectionEvent UserConnection
-> SchemaP
     SwaggerDoc
     Object
     [Pair]
     ConnectionEvent
     (Maybe Name -> ConnectionEvent)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> ConnectionEvent -> UserConnection
ucConn (ConnectionEvent -> UserConnection)
-> SchemaP SwaggerDoc Object [Pair] UserConnection UserConnection
-> SchemaP SwaggerDoc Object [Pair] ConnectionEvent UserConnection
forall (p :: * -> * -> *) a a' b.
Profunctor p =>
(a -> a') -> p a' b -> p a b
.= Text
-> SchemaP
     NamedSwaggerDoc Value Value UserConnection UserConnection
-> SchemaP SwaggerDoc Object [Pair] UserConnection UserConnection
forall doc' doc a b.
HasField doc' doc =>
Text
-> SchemaP doc' Value Value a b -> SchemaP doc Object [Pair] a b
field Text
"connection" SchemaP NamedSwaggerDoc Value Value UserConnection UserConnection
forall a. ToSchema a => ValueSchema NamedSwaggerDoc a
schema
                  SchemaP
  SwaggerDoc
  Object
  [Pair]
  ConnectionEvent
  (Maybe Name -> ConnectionEvent)
-> SchemaP SwaggerDoc Object [Pair] ConnectionEvent (Maybe Name)
-> SchemaP SwaggerDoc Object [Pair] ConnectionEvent ConnectionEvent
forall a b.
SchemaP SwaggerDoc Object [Pair] ConnectionEvent (a -> b)
-> SchemaP SwaggerDoc Object [Pair] ConnectionEvent a
-> SchemaP SwaggerDoc Object [Pair] ConnectionEvent b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> ConnectionEvent -> Maybe Name
ucName (ConnectionEvent -> Maybe Name)
-> SchemaP SwaggerDoc Object [Pair] (Maybe Name) (Maybe Name)
-> SchemaP SwaggerDoc Object [Pair] ConnectionEvent (Maybe Name)
forall (p :: * -> * -> *) a a' b.
Profunctor p =>
(a -> a') -> p a' b -> p a b
.= SchemaP SwaggerDoc Object [Pair] Name (Maybe Name)
-> SchemaP SwaggerDoc Object [Pair] (Maybe Name) (Maybe Name)
forall w d v a b.
Monoid w =>
SchemaP d v w a b -> SchemaP d v w (Maybe a) b
maybe_ (Text
-> SchemaP NamedSwaggerDoc Value Value Name Name
-> SchemaP SwaggerDoc Object [Pair] Name (Maybe Name)
forall doc doc' a b.
(HasOpt doc, HasField doc' doc) =>
Text
-> SchemaP doc' Value Value a b
-> SchemaP doc Object [Pair] a (Maybe b)
optField Text
"user" (Text
-> SchemaP SwaggerDoc Object [Pair] Name Name
-> SchemaP NamedSwaggerDoc Value Value Name Name
forall doc doc' a b.
HasObject doc doc' =>
Text
-> SchemaP doc Object [Pair] a b -> SchemaP doc' Value Value a b
object Text
"UserName" (Text
-> SchemaP NamedSwaggerDoc Value Value Name Name
-> SchemaP SwaggerDoc Object [Pair] Name Name
forall doc' doc a b.
HasField doc' doc =>
Text
-> SchemaP doc' Value Value a b -> SchemaP doc Object [Pair] a b
field Text
"name" SchemaP NamedSwaggerDoc Value Value Name Name
forall a. ToSchema a => ValueSchema NamedSwaggerDoc a
schema)))
              )
      )
  where
    noId :: User -> User
    noId :: User -> User
noId User
u = User
u {userIdentity = Nothing}

    userSchema :: ObjectSchema SwaggerDoc User
    userSchema :: SchemaP SwaggerDoc Object [Pair] User User
userSchema = Text
-> SchemaP NamedSwaggerDoc Value Value User User
-> SchemaP SwaggerDoc Object [Pair] User User
forall doc' doc a b.
HasField doc' doc =>
Text
-> SchemaP doc' Value Value a b -> SchemaP doc Object [Pair] a b
field Text
"user" SchemaP NamedSwaggerDoc Value Value User User
forall a. ToSchema a => ValueSchema NamedSwaggerDoc a
schema

instance ToJSONObject Event where
  toJSONObject :: Event -> Object
toJSONObject = [Pair] -> Object
forall v. [(Key, v)] -> KeyMap v
KM.fromList ([Pair] -> Object) -> (Event -> [Pair]) -> Event -> Object
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Maybe [Pair] -> [Pair]
forall m. Monoid m => Maybe m -> m
forall (t :: * -> *) m. (Foldable t, Monoid m) => t m -> m
fold (Maybe [Pair] -> [Pair])
-> (Event -> Maybe [Pair]) -> Event -> [Pair]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ObjectSchema SwaggerDoc Event -> Event -> Maybe [Pair]
forall ss v m a b. SchemaP ss v m a b -> a -> Maybe m
schemaOut ObjectSchema SwaggerDoc Event
eventObjectSchema

instance ToSchema Event where
  schema :: ValueSchema NamedSwaggerDoc Event
schema = Text
-> ObjectSchema SwaggerDoc Event
-> ValueSchema NamedSwaggerDoc Event
forall doc doc' a b.
HasObject doc doc' =>
Text
-> SchemaP doc Object [Pair] a b -> SchemaP doc' Value Value a b
object Text
"UserEvent" ObjectSchema SwaggerDoc Event
eventObjectSchema

deriving via (Schema Event) instance A.ToJSON Event

deriving via (Schema Event) instance A.FromJSON Event

-- Logging

connEventUserId :: ConnectionEvent -> UserId
connEventUserId :: ConnectionEvent -> UserId
connEventUserId ConnectionUpdated {Maybe Name
UserConnection
$sel:ucConn:ConnectionUpdated :: ConnectionEvent -> UserConnection
$sel:ucName:ConnectionUpdated :: ConnectionEvent -> Maybe Name
ucConn :: UserConnection
ucName :: Maybe Name
..} = UserConnection -> UserId
ucFrom UserConnection
ucConn

instance ToBytes Event where
  bytes :: Event -> Builder
bytes (UserEvent UserEvent
e) = UserEvent -> Builder
forall a. ToBytes a => a -> Builder
bytes UserEvent
e
  bytes (ConnectionEvent ConnectionEvent
e) = ConnectionEvent -> Builder
forall a. ToBytes a => a -> Builder
bytes ConnectionEvent
e
  bytes (PropertyEvent PropertyEvent
e) = PropertyEvent -> Builder
forall a. ToBytes a => a -> Builder
bytes PropertyEvent
e
  bytes (ClientEvent ClientEvent
e) = ClientEvent -> Builder
forall a. ToBytes a => a -> Builder
bytes ClientEvent
e

instance ToBytes UserEvent where
  bytes :: UserEvent -> Builder
bytes (UserCreated User
u) = ByteString -> Builder
val ByteString
"user.new: " Builder -> ByteString -> Builder
forall a b. (ToBytes a, ToBytes b) => a -> b -> Builder
+++ UserId -> ByteString
forall a. ToByteString a => a -> ByteString
toByteString (User -> UserId
userId User
u)
  bytes (UserActivated User
u) = ByteString -> Builder
val ByteString
"user.activate: " Builder -> ByteString -> Builder
forall a b. (ToBytes a, ToBytes b) => a -> b -> Builder
+++ UserId -> ByteString
forall a. ToByteString a => a -> ByteString
toByteString (User -> UserId
userId User
u)
  bytes (UserUpdated UserUpdatedData
u) = ByteString -> Builder
val ByteString
"user.update: " Builder -> ByteString -> Builder
forall a b. (ToBytes a, ToBytes b) => a -> b -> Builder
+++ UserId -> ByteString
forall a. ToByteString a => a -> ByteString
toByteString (UserUpdatedData -> UserId
eupId UserUpdatedData
u)
  bytes (UserIdentityUpdated UserIdentityUpdatedData
u) = ByteString -> Builder
val ByteString
"user.update: " Builder -> ByteString -> Builder
forall a b. (ToBytes a, ToBytes b) => a -> b -> Builder
+++ UserId -> ByteString
forall a. ToByteString a => a -> ByteString
toByteString (UserIdentityUpdatedData -> UserId
eiuId UserIdentityUpdatedData
u)
  bytes (UserIdentityRemoved UserIdentityRemovedData
u) = ByteString -> Builder
val ByteString
"user.identity-remove: " Builder -> ByteString -> Builder
forall a b. (ToBytes a, ToBytes b) => a -> b -> Builder
+++ UserId -> ByteString
forall a. ToByteString a => a -> ByteString
toByteString (UserIdentityRemovedData -> UserId
eirId UserIdentityRemovedData
u)
  bytes (UserSuspended UserId
u) = ByteString -> Builder
val ByteString
"user.suspend: " Builder -> ByteString -> Builder
forall a b. (ToBytes a, ToBytes b) => a -> b -> Builder
+++ UserId -> ByteString
forall a. ToByteString a => a -> ByteString
toByteString UserId
u
  bytes (UserResumed UserId
u) = ByteString -> Builder
val ByteString
"user.resume: " Builder -> ByteString -> Builder
forall a b. (ToBytes a, ToBytes b) => a -> b -> Builder
+++ UserId -> ByteString
forall a. ToByteString a => a -> ByteString
toByteString UserId
u
  bytes (UserDeleted Qualified UserId
u) = ByteString -> Builder
val ByteString
"user.delete: " Builder -> Builder -> Builder
forall a b. (ToBytes a, ToBytes b) => a -> b -> Builder
+++ UserId -> ByteString
forall a. ToByteString a => a -> ByteString
toByteString (Qualified UserId -> UserId
forall a. Qualified a -> a
qUnqualified Qualified UserId
u) ByteString -> Builder -> Builder
forall a b. (ToBytes a, ToBytes b) => a -> b -> Builder
+++ ByteString -> Builder
val ByteString
"@" Builder -> ByteString -> Builder
forall a b. (ToBytes a, ToBytes b) => a -> b -> Builder
+++ Domain -> ByteString
forall a. ToByteString a => a -> ByteString
toByteString (Qualified UserId -> Domain
forall a. Qualified a -> Domain
qDomain Qualified UserId
u)
  bytes (UserLegalHoldDisabled UserId
u) = ByteString -> Builder
val ByteString
"user.legalhold-disable: " Builder -> ByteString -> Builder
forall a b. (ToBytes a, ToBytes b) => a -> b -> Builder
+++ UserId -> ByteString
forall a. ToByteString a => a -> ByteString
toByteString UserId
u
  bytes (UserLegalHoldEnabled UserId
u) = ByteString -> Builder
val ByteString
"user.legalhold-enable: " Builder -> ByteString -> Builder
forall a b. (ToBytes a, ToBytes b) => a -> b -> Builder
+++ UserId -> ByteString
forall a. ToByteString a => a -> ByteString
toByteString UserId
u
  bytes (LegalHoldClientRequested LegalHoldClientRequestedData
payload) = ByteString -> Builder
val ByteString
"user.legalhold-request: " Builder -> String -> Builder
forall a b. (ToBytes a, ToBytes b) => a -> b -> Builder
+++ LegalHoldClientRequestedData -> String
forall a. Show a => a -> String
show LegalHoldClientRequestedData
payload

instance ToBytes ConnectionEvent where
  bytes :: ConnectionEvent -> Builder
bytes e :: ConnectionEvent
e@ConnectionUpdated {} = ByteString -> Builder
val ByteString
"user.connection: " Builder -> ByteString -> Builder
forall a b. (ToBytes a, ToBytes b) => a -> b -> Builder
+++ UserId -> ByteString
forall a. ToByteString a => a -> ByteString
toByteString (ConnectionEvent -> UserId
connEventUserId ConnectionEvent
e)

instance ToBytes PropertyEvent where
  bytes :: PropertyEvent -> Builder
bytes PropertySet {} = ByteString -> Builder
val ByteString
"user.properties-set"
  bytes PropertyDeleted {} = ByteString -> Builder
val ByteString
"user.properties-delete"
  bytes PropertiesCleared {} = ByteString -> Builder
val ByteString
"user.properties-clear"

instance ToBytes ClientEvent where
  bytes :: ClientEvent -> Builder
bytes (ClientAdded Client
_) = ByteString -> Builder
val ByteString
"user.client-add"
  bytes (ClientRemoved ClientId
_) = ByteString -> Builder
val ByteString
"user.client-remove"