{-# LANGUAGE GeneralizedNewtypeDeriving #-}
{-# LANGUAGE StrictData #-}

-- 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.Conversation.Member
  ( ConvMembers (..),

    -- * Member
    Member (..),
    defMember,
    MutedStatus (..),
    OtherMember (..),

    -- * Member Update
    MemberUpdate (..),
    memberUpdate,
    OtherMemberUpdate (..),
  )
where

import Control.Applicative
import Control.Lens ((?~))
import Data.Aeson (FromJSON (..), ToJSON (..))
import Data.Aeson qualified as A
import Data.Id
import Data.OpenApi (deprecated)
import Data.OpenApi qualified as S
import Data.Qualified
import Data.Schema
import Imports
import Test.QuickCheck qualified as QC
import Wire.API.Conversation.Role
import Wire.API.Provider.Service (ServiceRef)
import Wire.Arbitrary (Arbitrary (arbitrary), GenericUniform (..))

data ConvMembers = ConvMembers
  { ConvMembers -> Member
cmSelf :: Member,
    ConvMembers -> [OtherMember]
cmOthers :: [OtherMember]
  }
  deriving stock (ConvMembers -> ConvMembers -> Bool
(ConvMembers -> ConvMembers -> Bool)
-> (ConvMembers -> ConvMembers -> Bool) -> Eq ConvMembers
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: ConvMembers -> ConvMembers -> Bool
== :: ConvMembers -> ConvMembers -> Bool
$c/= :: ConvMembers -> ConvMembers -> Bool
/= :: ConvMembers -> ConvMembers -> Bool
Eq, Int -> ConvMembers -> ShowS
[ConvMembers] -> ShowS
ConvMembers -> String
(Int -> ConvMembers -> ShowS)
-> (ConvMembers -> String)
-> ([ConvMembers] -> ShowS)
-> Show ConvMembers
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> ConvMembers -> ShowS
showsPrec :: Int -> ConvMembers -> ShowS
$cshow :: ConvMembers -> String
show :: ConvMembers -> String
$cshowList :: [ConvMembers] -> ShowS
showList :: [ConvMembers] -> ShowS
Show, (forall x. ConvMembers -> Rep ConvMembers x)
-> (forall x. Rep ConvMembers x -> ConvMembers)
-> Generic ConvMembers
forall x. Rep ConvMembers x -> ConvMembers
forall x. ConvMembers -> Rep ConvMembers x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cfrom :: forall x. ConvMembers -> Rep ConvMembers x
from :: forall x. ConvMembers -> Rep ConvMembers x
$cto :: forall x. Rep ConvMembers x -> ConvMembers
to :: forall x. Rep ConvMembers x -> ConvMembers
Generic)
  deriving (Gen ConvMembers
Gen ConvMembers
-> (ConvMembers -> [ConvMembers]) -> Arbitrary ConvMembers
ConvMembers -> [ConvMembers]
forall a. Gen a -> (a -> [a]) -> Arbitrary a
$carbitrary :: Gen ConvMembers
arbitrary :: Gen ConvMembers
$cshrink :: ConvMembers -> [ConvMembers]
shrink :: ConvMembers -> [ConvMembers]
Arbitrary) via (GenericUniform ConvMembers)
  deriving (Value -> Parser [ConvMembers]
Value -> Parser ConvMembers
(Value -> Parser ConvMembers)
-> (Value -> Parser [ConvMembers]) -> FromJSON ConvMembers
forall a.
(Value -> Parser a) -> (Value -> Parser [a]) -> FromJSON a
$cparseJSON :: Value -> Parser ConvMembers
parseJSON :: Value -> Parser ConvMembers
$cparseJSONList :: Value -> Parser [ConvMembers]
parseJSONList :: Value -> Parser [ConvMembers]
FromJSON, [ConvMembers] -> Value
[ConvMembers] -> Encoding
ConvMembers -> Value
ConvMembers -> Encoding
(ConvMembers -> Value)
-> (ConvMembers -> Encoding)
-> ([ConvMembers] -> Value)
-> ([ConvMembers] -> Encoding)
-> ToJSON ConvMembers
forall a.
(a -> Value)
-> (a -> Encoding)
-> ([a] -> Value)
-> ([a] -> Encoding)
-> ToJSON a
$ctoJSON :: ConvMembers -> Value
toJSON :: ConvMembers -> Value
$ctoEncoding :: ConvMembers -> Encoding
toEncoding :: ConvMembers -> Encoding
$ctoJSONList :: [ConvMembers] -> Value
toJSONList :: [ConvMembers] -> Value
$ctoEncodingList :: [ConvMembers] -> Encoding
toEncodingList :: [ConvMembers] -> Encoding
ToJSON, Typeable ConvMembers
Typeable ConvMembers =>
(Proxy ConvMembers -> Declare (Definitions Schema) NamedSchema)
-> ToSchema ConvMembers
Proxy ConvMembers -> Declare (Definitions Schema) NamedSchema
forall a.
Typeable a =>
(Proxy a -> Declare (Definitions Schema) NamedSchema) -> ToSchema a
$cdeclareNamedSchema :: Proxy ConvMembers -> Declare (Definitions Schema) NamedSchema
declareNamedSchema :: Proxy ConvMembers -> Declare (Definitions Schema) NamedSchema
S.ToSchema) via Schema ConvMembers

instance ToSchema ConvMembers where
  schema :: ValueSchema NamedSwaggerDoc ConvMembers
schema =
    Text
-> (NamedSwaggerDoc -> NamedSwaggerDoc)
-> ObjectSchema SwaggerDoc ConvMembers
-> ValueSchema NamedSwaggerDoc ConvMembers
forall doc doc' a.
HasObject doc doc' =>
Text -> (doc' -> doc') -> ObjectSchema doc a -> ValueSchema doc' a
objectWithDocModifier Text
"ConvMembers" ((Maybe Text -> Identity (Maybe Text))
-> NamedSwaggerDoc -> Identity NamedSwaggerDoc
forall s a. HasDescription s a => Lens' s a
Lens' NamedSwaggerDoc (Maybe Text)
description ((Maybe Text -> Identity (Maybe Text))
 -> NamedSwaggerDoc -> Identity NamedSwaggerDoc)
-> Text -> NamedSwaggerDoc -> NamedSwaggerDoc
forall s t a b. ASetter s t a (Maybe b) -> b -> s -> t
?~ Text
"Users of a conversation") (ObjectSchema SwaggerDoc ConvMembers
 -> ValueSchema NamedSwaggerDoc ConvMembers)
-> ObjectSchema SwaggerDoc ConvMembers
-> ValueSchema NamedSwaggerDoc ConvMembers
forall a b. (a -> b) -> a -> b
$
      Member -> [OtherMember] -> ConvMembers
ConvMembers
        (Member -> [OtherMember] -> ConvMembers)
-> SchemaP SwaggerDoc Object [Pair] ConvMembers Member
-> SchemaP
     SwaggerDoc Object [Pair] ConvMembers ([OtherMember] -> ConvMembers)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> ConvMembers -> Member
cmSelf
          (ConvMembers -> Member)
-> SchemaP SwaggerDoc Object [Pair] Member Member
-> SchemaP SwaggerDoc Object [Pair] ConvMembers Member
forall (p :: * -> * -> *) a a' b.
Profunctor p =>
(a -> a') -> p a' b -> p a b
.= Text
-> (NamedSwaggerDoc -> NamedSwaggerDoc)
-> SchemaP NamedSwaggerDoc Value Value Member Member
-> SchemaP SwaggerDoc Object [Pair] Member Member
forall doc' doc a b.
HasField doc' doc =>
Text
-> (doc' -> doc')
-> SchemaP doc' Value Value a b
-> SchemaP doc Object [Pair] a b
fieldWithDocModifier
            Text
"self"
            ((Maybe Text -> Identity (Maybe Text))
-> NamedSwaggerDoc -> Identity NamedSwaggerDoc
forall s a. HasDescription s a => Lens' s a
Lens' NamedSwaggerDoc (Maybe Text)
description ((Maybe Text -> Identity (Maybe Text))
 -> NamedSwaggerDoc -> Identity NamedSwaggerDoc)
-> Text -> NamedSwaggerDoc -> NamedSwaggerDoc
forall s t a b. ASetter s t a (Maybe b) -> b -> s -> t
?~ Text
"The user ID of the requestor")
            SchemaP NamedSwaggerDoc Value Value Member Member
forall a. ToSchema a => ValueSchema NamedSwaggerDoc a
schema
        SchemaP
  SwaggerDoc Object [Pair] ConvMembers ([OtherMember] -> ConvMembers)
-> SchemaP SwaggerDoc Object [Pair] ConvMembers [OtherMember]
-> ObjectSchema SwaggerDoc ConvMembers
forall a b.
SchemaP SwaggerDoc Object [Pair] ConvMembers (a -> b)
-> SchemaP SwaggerDoc Object [Pair] ConvMembers a
-> SchemaP SwaggerDoc Object [Pair] ConvMembers b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> ConvMembers -> [OtherMember]
cmOthers
          (ConvMembers -> [OtherMember])
-> SchemaP SwaggerDoc Object [Pair] [OtherMember] [OtherMember]
-> SchemaP SwaggerDoc Object [Pair] ConvMembers [OtherMember]
forall (p :: * -> * -> *) a a' b.
Profunctor p =>
(a -> a') -> p a' b -> p a b
.= Text
-> (SwaggerDoc -> SwaggerDoc)
-> SchemaP SwaggerDoc Value Value [OtherMember] [OtherMember]
-> SchemaP SwaggerDoc Object [Pair] [OtherMember] [OtherMember]
forall doc' doc a b.
HasField doc' doc =>
Text
-> (doc' -> doc')
-> SchemaP doc' Value Value a b
-> SchemaP doc Object [Pair] a b
fieldWithDocModifier
            Text
"others"
            ((Maybe Text -> Identity (Maybe Text))
-> SwaggerDoc -> Identity SwaggerDoc
forall s a. HasDescription s a => Lens' s a
Lens' SwaggerDoc (Maybe Text)
description ((Maybe Text -> Identity (Maybe Text))
 -> SwaggerDoc -> Identity SwaggerDoc)
-> Text -> SwaggerDoc -> SwaggerDoc
forall s t a b. ASetter s t a (Maybe b) -> b -> s -> t
?~ Text
"All other current users of this conversation")
            (ValueSchema NamedSwaggerDoc OtherMember
-> SchemaP SwaggerDoc Value Value [OtherMember] [OtherMember]
forall ndoc doc a.
(HasArray ndoc doc, HasName ndoc) =>
ValueSchema ndoc a -> ValueSchema doc [a]
array ValueSchema NamedSwaggerDoc OtherMember
forall a. ToSchema a => ValueSchema NamedSwaggerDoc a
schema)

--------------------------------------------------------------------------------
-- Members

data Member = Member
  { Member -> Qualified UserId
memId :: Qualified UserId,
    Member -> Maybe ServiceRef
memService :: Maybe ServiceRef,
    Member -> Maybe MutedStatus
memOtrMutedStatus :: Maybe MutedStatus,
    Member -> Maybe Text
memOtrMutedRef :: Maybe Text,
    Member -> Bool
memOtrArchived :: Bool,
    Member -> Maybe Text
memOtrArchivedRef :: Maybe Text,
    Member -> Bool
memHidden :: Bool,
    Member -> Maybe Text
memHiddenRef :: Maybe Text,
    Member -> RoleName
memConvRoleName :: RoleName
  }
  deriving stock (Member -> Member -> Bool
(Member -> Member -> Bool)
-> (Member -> Member -> Bool) -> Eq Member
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: Member -> Member -> Bool
== :: Member -> Member -> Bool
$c/= :: Member -> Member -> Bool
/= :: Member -> Member -> Bool
Eq, Int -> Member -> ShowS
[Member] -> ShowS
Member -> String
(Int -> Member -> ShowS)
-> (Member -> String) -> ([Member] -> ShowS) -> Show Member
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> Member -> ShowS
showsPrec :: Int -> Member -> ShowS
$cshow :: Member -> String
show :: Member -> String
$cshowList :: [Member] -> ShowS
showList :: [Member] -> ShowS
Show, (forall x. Member -> Rep Member x)
-> (forall x. Rep Member x -> Member) -> Generic Member
forall x. Rep Member x -> Member
forall x. Member -> Rep Member x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cfrom :: forall x. Member -> Rep Member x
from :: forall x. Member -> Rep Member x
$cto :: forall x. Rep Member x -> Member
to :: forall x. Rep Member x -> Member
Generic)
  deriving (Gen Member
Gen Member -> (Member -> [Member]) -> Arbitrary Member
Member -> [Member]
forall a. Gen a -> (a -> [a]) -> Arbitrary a
$carbitrary :: Gen Member
arbitrary :: Gen Member
$cshrink :: Member -> [Member]
shrink :: Member -> [Member]
Arbitrary) via (GenericUniform Member)
  deriving (Value -> Parser [Member]
Value -> Parser Member
(Value -> Parser Member)
-> (Value -> Parser [Member]) -> FromJSON Member
forall a.
(Value -> Parser a) -> (Value -> Parser [a]) -> FromJSON a
$cparseJSON :: Value -> Parser Member
parseJSON :: Value -> Parser Member
$cparseJSONList :: Value -> Parser [Member]
parseJSONList :: Value -> Parser [Member]
FromJSON, [Member] -> Value
[Member] -> Encoding
Member -> Value
Member -> Encoding
(Member -> Value)
-> (Member -> Encoding)
-> ([Member] -> Value)
-> ([Member] -> Encoding)
-> ToJSON Member
forall a.
(a -> Value)
-> (a -> Encoding)
-> ([a] -> Value)
-> ([a] -> Encoding)
-> ToJSON a
$ctoJSON :: Member -> Value
toJSON :: Member -> Value
$ctoEncoding :: Member -> Encoding
toEncoding :: Member -> Encoding
$ctoJSONList :: [Member] -> Value
toJSONList :: [Member] -> Value
$ctoEncodingList :: [Member] -> Encoding
toEncodingList :: [Member] -> Encoding
ToJSON, Typeable Member
Typeable Member =>
(Proxy Member -> Declare (Definitions Schema) NamedSchema)
-> ToSchema Member
Proxy Member -> Declare (Definitions Schema) NamedSchema
forall a.
Typeable a =>
(Proxy a -> Declare (Definitions Schema) NamedSchema) -> ToSchema a
$cdeclareNamedSchema :: Proxy Member -> Declare (Definitions Schema) NamedSchema
declareNamedSchema :: Proxy Member -> Declare (Definitions Schema) NamedSchema
S.ToSchema) via Schema Member

defMember :: Qualified UserId -> Member
defMember :: Qualified UserId -> Member
defMember Qualified UserId
uid =
  Member
    { $sel:memId:Member :: Qualified UserId
memId = Qualified UserId
uid,
      $sel:memService:Member :: Maybe ServiceRef
memService = Maybe ServiceRef
forall a. Maybe a
Nothing,
      $sel:memOtrMutedStatus:Member :: Maybe MutedStatus
memOtrMutedStatus = Maybe MutedStatus
forall a. Maybe a
Nothing,
      $sel:memOtrMutedRef:Member :: Maybe Text
memOtrMutedRef = Maybe Text
forall a. Maybe a
Nothing,
      $sel:memOtrArchived:Member :: Bool
memOtrArchived = Bool
False,
      $sel:memOtrArchivedRef:Member :: Maybe Text
memOtrArchivedRef = Maybe Text
forall a. Maybe a
Nothing,
      $sel:memHidden:Member :: Bool
memHidden = Bool
False,
      $sel:memHiddenRef:Member :: Maybe Text
memHiddenRef = Maybe Text
forall a. Maybe a
Nothing,
      $sel:memConvRoleName:Member :: RoleName
memConvRoleName = RoleName
roleNameWireMember
    }

instance ToSchema Member where
  schema :: SchemaP NamedSwaggerDoc Value Value Member Member
schema =
    Text
-> SchemaP SwaggerDoc Object [Pair] Member Member
-> SchemaP NamedSwaggerDoc Value Value Member Member
forall doc doc' a b.
HasObject doc doc' =>
Text
-> SchemaP doc Object [Pair] a b -> SchemaP doc' Value Value a b
object Text
"Member" (SchemaP SwaggerDoc Object [Pair] Member Member
 -> SchemaP NamedSwaggerDoc Value Value Member Member)
-> SchemaP SwaggerDoc Object [Pair] Member Member
-> SchemaP NamedSwaggerDoc Value Value Member Member
forall a b. (a -> b) -> a -> b
$
      Qualified UserId
-> Maybe ServiceRef
-> Maybe MutedStatus
-> Maybe Text
-> Bool
-> Maybe Text
-> Bool
-> Maybe Text
-> RoleName
-> Member
Member
        (Qualified UserId
 -> Maybe ServiceRef
 -> Maybe MutedStatus
 -> Maybe Text
 -> Bool
 -> Maybe Text
 -> Bool
 -> Maybe Text
 -> RoleName
 -> Member)
-> SchemaP SwaggerDoc Object [Pair] Member (Qualified UserId)
-> SchemaP
     SwaggerDoc
     Object
     [Pair]
     Member
     (Maybe ServiceRef
      -> Maybe MutedStatus
      -> Maybe Text
      -> Bool
      -> Maybe Text
      -> Bool
      -> Maybe Text
      -> RoleName
      -> Member)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Member -> Qualified UserId
memId (Member -> Qualified UserId)
-> SchemaP
     SwaggerDoc Object [Pair] (Qualified UserId) (Qualified UserId)
-> SchemaP SwaggerDoc Object [Pair] Member (Qualified UserId)
forall (p :: * -> * -> *) a a' b.
Profunctor p =>
(a -> a') -> p a' b -> p a b
.= 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]
  Member
  (Maybe ServiceRef
   -> Maybe MutedStatus
   -> Maybe Text
   -> Bool
   -> Maybe Text
   -> Bool
   -> Maybe Text
   -> RoleName
   -> Member)
-> SchemaP SwaggerDoc Object [Pair] Member (Maybe UserId)
-> SchemaP
     SwaggerDoc
     Object
     [Pair]
     Member
     (Maybe ServiceRef
      -> Maybe MutedStatus
      -> Maybe Text
      -> Bool
      -> Maybe Text
      -> Bool
      -> Maybe Text
      -> RoleName
      -> Member)
forall a b.
SchemaP SwaggerDoc Object [Pair] Member a
-> SchemaP SwaggerDoc Object [Pair] Member b
-> SchemaP SwaggerDoc Object [Pair] Member 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)
-> (Member -> Qualified UserId) -> Member -> UserId
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Member -> Qualified UserId
memId)
          (Member -> UserId)
-> SchemaP SwaggerDoc Object [Pair] UserId (Maybe UserId)
-> SchemaP SwaggerDoc Object [Pair] Member (Maybe UserId)
forall (p :: * -> * -> *) a a' b.
Profunctor p =>
(a -> a') -> p a' b -> p a b
.= SchemaP SwaggerDoc Object [Pair] UserId UserId
-> SchemaP SwaggerDoc Object [Pair] UserId (Maybe UserId)
forall (f :: * -> *) a. Alternative f => f a -> f (Maybe a)
optional (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" (Text
-> SchemaP NamedSwaggerDoc Value Value UserId UserId
-> SchemaP NamedSwaggerDoc Value Value UserId UserId
forall doc a.
(HasDeprecated doc (Maybe Bool),
 HasDescription doc (Maybe Text)) =>
Text -> ValueSchema doc a -> ValueSchema doc a
deprecatedSchema Text
"qualified_id" SchemaP NamedSwaggerDoc Value Value UserId UserId
forall a. ToSchema a => ValueSchema NamedSwaggerDoc a
schema))
        SchemaP
  SwaggerDoc
  Object
  [Pair]
  Member
  (Maybe ServiceRef
   -> Maybe MutedStatus
   -> Maybe Text
   -> Bool
   -> Maybe Text
   -> Bool
   -> Maybe Text
   -> RoleName
   -> Member)
-> SchemaP SwaggerDoc Object [Pair] Member (Maybe ServiceRef)
-> SchemaP
     SwaggerDoc
     Object
     [Pair]
     Member
     (Maybe MutedStatus
      -> Maybe Text
      -> Bool
      -> Maybe Text
      -> Bool
      -> Maybe Text
      -> RoleName
      -> Member)
forall a b.
SchemaP SwaggerDoc Object [Pair] Member (a -> b)
-> SchemaP SwaggerDoc Object [Pair] Member a
-> SchemaP SwaggerDoc Object [Pair] Member b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Member -> Maybe ServiceRef
memService (Member -> Maybe ServiceRef)
-> SchemaP
     SwaggerDoc Object [Pair] (Maybe ServiceRef) (Maybe ServiceRef)
-> SchemaP SwaggerDoc Object [Pair] Member (Maybe ServiceRef)
forall (p :: * -> * -> *) a a' b.
Profunctor p =>
(a -> a') -> p a' b -> p a b
.= Text
-> SchemaP
     NamedSwaggerDoc Value Value (Maybe ServiceRef) ServiceRef
-> SchemaP
     SwaggerDoc Object [Pair] (Maybe ServiceRef) (Maybe ServiceRef)
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
"service" (Value
-> SchemaP NamedSwaggerDoc Value Value ServiceRef ServiceRef
-> SchemaP
     NamedSwaggerDoc Value Value (Maybe ServiceRef) ServiceRef
forall w d v a b.
w -> SchemaP d v w a b -> SchemaP d v w (Maybe a) b
maybeWithDefault Value
A.Null SchemaP NamedSwaggerDoc Value Value ServiceRef ServiceRef
forall a. ToSchema a => ValueSchema NamedSwaggerDoc a
schema)
        --  Remove ...
        SchemaP
  SwaggerDoc
  Object
  [Pair]
  Member
  (Maybe MutedStatus
   -> Maybe Text
   -> Bool
   -> Maybe Text
   -> Bool
   -> Maybe Text
   -> RoleName
   -> Member)
-> SchemaP SwaggerDoc Object [Pair] Member (Maybe ())
-> SchemaP
     SwaggerDoc
     Object
     [Pair]
     Member
     (Maybe MutedStatus
      -> Maybe Text
      -> Bool
      -> Maybe Text
      -> Bool
      -> Maybe Text
      -> RoleName
      -> Member)
forall a b.
SchemaP SwaggerDoc Object [Pair] Member a
-> SchemaP SwaggerDoc Object [Pair] Member b
-> SchemaP SwaggerDoc Object [Pair] Member a
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f a
<* () -> Member -> ()
forall a b. a -> b -> a
const () (Member -> ())
-> SchemaP SwaggerDoc Object [Pair] () (Maybe ())
-> SchemaP SwaggerDoc Object [Pair] Member (Maybe ())
forall (p :: * -> * -> *) a a' b.
Profunctor p =>
(a -> a') -> p a' b -> p a b
.= SchemaP SwaggerDoc Object [Pair] () ()
-> SchemaP SwaggerDoc Object [Pair] () (Maybe ())
forall (f :: * -> *) a. Alternative f => f a -> f (Maybe a)
optional (Text
-> SchemaP SwaggerDoc Value Value () ()
-> SchemaP SwaggerDoc Object [Pair] () ()
forall doc' doc a b.
HasField doc' doc =>
Text
-> SchemaP doc' Value Value a b -> SchemaP doc Object [Pair] a b
field Text
"status" (Int -> SchemaP SwaggerDoc Value Value () ()
forall a. ToJSON a => a -> SchemaP SwaggerDoc Value Value () ()
c (Int
0 :: Int)))
        SchemaP
  SwaggerDoc
  Object
  [Pair]
  Member
  (Maybe MutedStatus
   -> Maybe Text
   -> Bool
   -> Maybe Text
   -> Bool
   -> Maybe Text
   -> RoleName
   -> Member)
-> SchemaP SwaggerDoc Object [Pair] Member (Maybe ())
-> SchemaP
     SwaggerDoc
     Object
     [Pair]
     Member
     (Maybe MutedStatus
      -> Maybe Text
      -> Bool
      -> Maybe Text
      -> Bool
      -> Maybe Text
      -> RoleName
      -> Member)
forall a b.
SchemaP SwaggerDoc Object [Pair] Member a
-> SchemaP SwaggerDoc Object [Pair] Member b
-> SchemaP SwaggerDoc Object [Pair] Member a
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f a
<* () -> Member -> ()
forall a b. a -> b -> a
const () (Member -> ())
-> SchemaP SwaggerDoc Object [Pair] () (Maybe ())
-> SchemaP SwaggerDoc Object [Pair] Member (Maybe ())
forall (p :: * -> * -> *) a a' b.
Profunctor p =>
(a -> a') -> p a' b -> p a b
.= SchemaP SwaggerDoc Object [Pair] () ()
-> SchemaP SwaggerDoc Object [Pair] () (Maybe ())
forall (f :: * -> *) a. Alternative f => f a -> f (Maybe a)
optional (Text
-> SchemaP SwaggerDoc Value Value () ()
-> SchemaP SwaggerDoc Object [Pair] () ()
forall doc' doc a b.
HasField doc' doc =>
Text
-> SchemaP doc' Value Value a b -> SchemaP doc Object [Pair] a b
field Text
"status_ref" (Text -> SchemaP SwaggerDoc Value Value () ()
forall a. ToJSON a => a -> SchemaP SwaggerDoc Value Value () ()
c (Text
"0.0" :: Text)))
        SchemaP
  SwaggerDoc
  Object
  [Pair]
  Member
  (Maybe MutedStatus
   -> Maybe Text
   -> Bool
   -> Maybe Text
   -> Bool
   -> Maybe Text
   -> RoleName
   -> Member)
-> SchemaP SwaggerDoc Object [Pair] Member (Maybe ())
-> SchemaP
     SwaggerDoc
     Object
     [Pair]
     Member
     (Maybe MutedStatus
      -> Maybe Text
      -> Bool
      -> Maybe Text
      -> Bool
      -> Maybe Text
      -> RoleName
      -> Member)
forall a b.
SchemaP SwaggerDoc Object [Pair] Member a
-> SchemaP SwaggerDoc Object [Pair] Member b
-> SchemaP SwaggerDoc Object [Pair] Member a
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f a
<* () -> Member -> ()
forall a b. a -> b -> a
const ()
          (Member -> ())
-> SchemaP SwaggerDoc Object [Pair] () (Maybe ())
-> SchemaP SwaggerDoc Object [Pair] Member (Maybe ())
forall (p :: * -> * -> *) a a' b.
Profunctor p =>
(a -> a') -> p a' b -> p a b
.= SchemaP SwaggerDoc Object [Pair] () ()
-> SchemaP SwaggerDoc Object [Pair] () (Maybe ())
forall (f :: * -> *) a. Alternative f => f a -> f (Maybe a)
optional
            ( Text
-> SchemaP SwaggerDoc Value Value () ()
-> SchemaP SwaggerDoc Object [Pair] () ()
forall doc' doc a b.
HasField doc' doc =>
Text
-> SchemaP doc' Value Value a b -> SchemaP doc Object [Pair] a b
field
                Text
"status_time"
                (Text -> SchemaP SwaggerDoc Value Value () ()
forall a. ToJSON a => a -> SchemaP SwaggerDoc Value Value () ()
c (Text
"1970-01-01T00:00:00.000Z" :: Text))
            )
        -- ... until here
        SchemaP
  SwaggerDoc
  Object
  [Pair]
  Member
  (Maybe MutedStatus
   -> Maybe Text
   -> Bool
   -> Maybe Text
   -> Bool
   -> Maybe Text
   -> RoleName
   -> Member)
-> SchemaP SwaggerDoc Object [Pair] Member (Maybe MutedStatus)
-> SchemaP
     SwaggerDoc
     Object
     [Pair]
     Member
     (Maybe Text
      -> Bool -> Maybe Text -> Bool -> Maybe Text -> RoleName -> Member)
forall a b.
SchemaP SwaggerDoc Object [Pair] Member (a -> b)
-> SchemaP SwaggerDoc Object [Pair] Member a
-> SchemaP SwaggerDoc Object [Pair] Member b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Member -> Maybe MutedStatus
memOtrMutedStatus (Member -> Maybe MutedStatus)
-> SchemaP
     SwaggerDoc Object [Pair] (Maybe MutedStatus) (Maybe MutedStatus)
-> SchemaP SwaggerDoc Object [Pair] Member (Maybe MutedStatus)
forall (p :: * -> * -> *) a a' b.
Profunctor p =>
(a -> a') -> p a' b -> p a b
.= Text
-> SchemaP
     NamedSwaggerDoc Value Value (Maybe MutedStatus) MutedStatus
-> SchemaP
     SwaggerDoc Object [Pair] (Maybe MutedStatus) (Maybe MutedStatus)
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
"otr_muted_status" (Value
-> SchemaP NamedSwaggerDoc Value Value MutedStatus MutedStatus
-> SchemaP
     NamedSwaggerDoc Value Value (Maybe MutedStatus) MutedStatus
forall w d v a b.
w -> SchemaP d v w a b -> SchemaP d v w (Maybe a) b
maybeWithDefault Value
A.Null SchemaP NamedSwaggerDoc Value Value MutedStatus MutedStatus
forall a. ToSchema a => ValueSchema NamedSwaggerDoc a
schema)
        SchemaP
  SwaggerDoc
  Object
  [Pair]
  Member
  (Maybe Text
   -> Bool -> Maybe Text -> Bool -> Maybe Text -> RoleName -> Member)
-> SchemaP SwaggerDoc Object [Pair] Member (Maybe Text)
-> SchemaP
     SwaggerDoc
     Object
     [Pair]
     Member
     (Bool -> Maybe Text -> Bool -> Maybe Text -> RoleName -> Member)
forall a b.
SchemaP SwaggerDoc Object [Pair] Member (a -> b)
-> SchemaP SwaggerDoc Object [Pair] Member a
-> SchemaP SwaggerDoc Object [Pair] Member b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Member -> Maybe Text
memOtrMutedRef (Member -> Maybe Text)
-> SchemaP SwaggerDoc Object [Pair] (Maybe Text) (Maybe Text)
-> SchemaP SwaggerDoc Object [Pair] Member (Maybe Text)
forall (p :: * -> * -> *) a a' b.
Profunctor p =>
(a -> a') -> p a' b -> p a b
.= Text
-> SchemaP NamedSwaggerDoc Value Value (Maybe Text) Text
-> SchemaP SwaggerDoc Object [Pair] (Maybe Text) (Maybe Text)
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
"otr_muted_ref" (Value
-> SchemaP NamedSwaggerDoc Value Value Text Text
-> SchemaP NamedSwaggerDoc Value Value (Maybe Text) Text
forall w d v a b.
w -> SchemaP d v w a b -> SchemaP d v w (Maybe a) b
maybeWithDefault Value
A.Null SchemaP NamedSwaggerDoc Value Value Text Text
forall a. ToSchema a => ValueSchema NamedSwaggerDoc a
schema)
        SchemaP
  SwaggerDoc
  Object
  [Pair]
  Member
  (Bool -> Maybe Text -> Bool -> Maybe Text -> RoleName -> Member)
-> SchemaP SwaggerDoc Object [Pair] Member Bool
-> SchemaP
     SwaggerDoc
     Object
     [Pair]
     Member
     (Maybe Text -> Bool -> Maybe Text -> RoleName -> Member)
forall a b.
SchemaP SwaggerDoc Object [Pair] Member (a -> b)
-> SchemaP SwaggerDoc Object [Pair] Member a
-> SchemaP SwaggerDoc Object [Pair] Member b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Member -> Bool
memOtrArchived (Member -> Bool)
-> SchemaP SwaggerDoc Object [Pair] Bool Bool
-> SchemaP SwaggerDoc Object [Pair] Member Bool
forall (p :: * -> * -> *) a a' b.
Profunctor p =>
(a -> a') -> p a' b -> p a b
.= (Bool -> Maybe Bool -> Bool
forall a. a -> Maybe a -> a
fromMaybe Bool
False (Maybe Bool -> Bool)
-> SchemaP SwaggerDoc Object [Pair] Bool (Maybe Bool)
-> SchemaP SwaggerDoc Object [Pair] Bool Bool
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Text
-> SchemaP NamedSwaggerDoc Value Value Bool Bool
-> SchemaP SwaggerDoc Object [Pair] Bool (Maybe Bool)
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
"otr_archived" SchemaP NamedSwaggerDoc Value Value Bool Bool
forall a. ToSchema a => ValueSchema NamedSwaggerDoc a
schema)
        SchemaP
  SwaggerDoc
  Object
  [Pair]
  Member
  (Maybe Text -> Bool -> Maybe Text -> RoleName -> Member)
-> SchemaP SwaggerDoc Object [Pair] Member (Maybe Text)
-> SchemaP
     SwaggerDoc
     Object
     [Pair]
     Member
     (Bool -> Maybe Text -> RoleName -> Member)
forall a b.
SchemaP SwaggerDoc Object [Pair] Member (a -> b)
-> SchemaP SwaggerDoc Object [Pair] Member a
-> SchemaP SwaggerDoc Object [Pair] Member b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Member -> Maybe Text
memOtrArchivedRef (Member -> Maybe Text)
-> SchemaP SwaggerDoc Object [Pair] (Maybe Text) (Maybe Text)
-> SchemaP SwaggerDoc Object [Pair] Member (Maybe Text)
forall (p :: * -> * -> *) a a' b.
Profunctor p =>
(a -> a') -> p a' b -> p a b
.= Text
-> SchemaP NamedSwaggerDoc Value Value (Maybe Text) Text
-> SchemaP SwaggerDoc Object [Pair] (Maybe Text) (Maybe Text)
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
"otr_archived_ref" (Value
-> SchemaP NamedSwaggerDoc Value Value Text Text
-> SchemaP NamedSwaggerDoc Value Value (Maybe Text) Text
forall w d v a b.
w -> SchemaP d v w a b -> SchemaP d v w (Maybe a) b
maybeWithDefault Value
A.Null SchemaP NamedSwaggerDoc Value Value Text Text
forall a. ToSchema a => ValueSchema NamedSwaggerDoc a
schema)
        SchemaP
  SwaggerDoc
  Object
  [Pair]
  Member
  (Bool -> Maybe Text -> RoleName -> Member)
-> SchemaP SwaggerDoc Object [Pair] Member Bool
-> SchemaP
     SwaggerDoc Object [Pair] Member (Maybe Text -> RoleName -> Member)
forall a b.
SchemaP SwaggerDoc Object [Pair] Member (a -> b)
-> SchemaP SwaggerDoc Object [Pair] Member a
-> SchemaP SwaggerDoc Object [Pair] Member b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Member -> Bool
memHidden (Member -> Bool)
-> SchemaP SwaggerDoc Object [Pair] Bool Bool
-> SchemaP SwaggerDoc Object [Pair] Member 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
"hidden" SchemaP NamedSwaggerDoc Value Value Bool Bool
forall a. ToSchema a => ValueSchema NamedSwaggerDoc a
schema SchemaP SwaggerDoc Object [Pair] Bool Bool
-> SchemaP SwaggerDoc Object [Pair] Bool Bool
-> SchemaP SwaggerDoc Object [Pair] Bool Bool
forall a.
SchemaP SwaggerDoc Object [Pair] Bool a
-> SchemaP SwaggerDoc Object [Pair] Bool a
-> SchemaP SwaggerDoc Object [Pair] Bool a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> Bool -> SchemaP SwaggerDoc Object [Pair] Bool Bool
forall a. a -> SchemaP SwaggerDoc Object [Pair] Bool a
forall (f :: * -> *) a. Applicative f => a -> f a
pure Bool
False)
        SchemaP
  SwaggerDoc Object [Pair] Member (Maybe Text -> RoleName -> Member)
-> SchemaP SwaggerDoc Object [Pair] Member (Maybe Text)
-> SchemaP SwaggerDoc Object [Pair] Member (RoleName -> Member)
forall a b.
SchemaP SwaggerDoc Object [Pair] Member (a -> b)
-> SchemaP SwaggerDoc Object [Pair] Member a
-> SchemaP SwaggerDoc Object [Pair] Member b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Member -> Maybe Text
memHiddenRef (Member -> Maybe Text)
-> SchemaP SwaggerDoc Object [Pair] (Maybe Text) (Maybe Text)
-> SchemaP SwaggerDoc Object [Pair] Member (Maybe Text)
forall (p :: * -> * -> *) a a' b.
Profunctor p =>
(a -> a') -> p a' b -> p a b
.= Text
-> SchemaP NamedSwaggerDoc Value Value (Maybe Text) Text
-> SchemaP SwaggerDoc Object [Pair] (Maybe Text) (Maybe Text)
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
"hidden_ref" (Value
-> SchemaP NamedSwaggerDoc Value Value Text Text
-> SchemaP NamedSwaggerDoc Value Value (Maybe Text) Text
forall w d v a b.
w -> SchemaP d v w a b -> SchemaP d v w (Maybe a) b
maybeWithDefault Value
A.Null SchemaP NamedSwaggerDoc Value Value Text Text
forall a. ToSchema a => ValueSchema NamedSwaggerDoc a
schema)
        SchemaP SwaggerDoc Object [Pair] Member (RoleName -> Member)
-> SchemaP SwaggerDoc Object [Pair] Member RoleName
-> SchemaP SwaggerDoc Object [Pair] Member Member
forall a b.
SchemaP SwaggerDoc Object [Pair] Member (a -> b)
-> SchemaP SwaggerDoc Object [Pair] Member a
-> SchemaP SwaggerDoc Object [Pair] Member b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Member -> RoleName
memConvRoleName (Member -> RoleName)
-> SchemaP SwaggerDoc Object [Pair] RoleName RoleName
-> SchemaP SwaggerDoc Object [Pair] Member RoleName
forall (p :: * -> * -> *) a a' b.
Profunctor p =>
(a -> a') -> p a' b -> p a b
.= (RoleName -> Maybe RoleName -> RoleName
forall a. a -> Maybe a -> a
fromMaybe RoleName
roleNameWireAdmin (Maybe RoleName -> RoleName)
-> SchemaP SwaggerDoc Object [Pair] RoleName (Maybe RoleName)
-> SchemaP SwaggerDoc Object [Pair] RoleName RoleName
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Text
-> SchemaP NamedSwaggerDoc Value Value RoleName RoleName
-> SchemaP SwaggerDoc Object [Pair] RoleName (Maybe RoleName)
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
"conversation_role" SchemaP NamedSwaggerDoc Value Value RoleName RoleName
forall a. ToSchema a => ValueSchema NamedSwaggerDoc a
schema)
    where
      c :: (ToJSON a) => a -> ValueSchema SwaggerDoc ()
      c :: forall a. ToJSON a => a -> SchemaP SwaggerDoc Value Value () ()
c a
val = SwaggerDoc
-> (Value -> Parser ())
-> (() -> Maybe Value)
-> SchemaP SwaggerDoc Value Value () ()
forall doc v b a w.
doc -> (v -> Parser b) -> (a -> Maybe w) -> SchemaP doc v w a b
mkSchema SwaggerDoc
forall a. Monoid a => a
mempty (Parser () -> Value -> Parser ()
forall a b. a -> b -> a
const (() -> Parser ()
forall a. a -> Parser a
forall (f :: * -> *) a. Applicative f => a -> f a
pure ())) (Maybe Value -> () -> Maybe Value
forall a b. a -> b -> a
const (Value -> Maybe Value
forall a. a -> Maybe a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (a -> Value
forall a. ToJSON a => a -> Value
toJSON a
val)))

-- | The semantics of the possible different values is entirely up to clients,
-- the server will not interpret this value in any way.
newtype MutedStatus = MutedStatus {MutedStatus -> Int32
fromMutedStatus :: Int32}
  deriving stock (MutedStatus -> MutedStatus -> Bool
(MutedStatus -> MutedStatus -> Bool)
-> (MutedStatus -> MutedStatus -> Bool) -> Eq MutedStatus
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: MutedStatus -> MutedStatus -> Bool
== :: MutedStatus -> MutedStatus -> Bool
$c/= :: MutedStatus -> MutedStatus -> Bool
/= :: MutedStatus -> MutedStatus -> Bool
Eq, Eq MutedStatus
Eq MutedStatus =>
(MutedStatus -> MutedStatus -> Ordering)
-> (MutedStatus -> MutedStatus -> Bool)
-> (MutedStatus -> MutedStatus -> Bool)
-> (MutedStatus -> MutedStatus -> Bool)
-> (MutedStatus -> MutedStatus -> Bool)
-> (MutedStatus -> MutedStatus -> MutedStatus)
-> (MutedStatus -> MutedStatus -> MutedStatus)
-> Ord MutedStatus
MutedStatus -> MutedStatus -> Bool
MutedStatus -> MutedStatus -> Ordering
MutedStatus -> MutedStatus -> MutedStatus
forall a.
Eq a =>
(a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
$ccompare :: MutedStatus -> MutedStatus -> Ordering
compare :: MutedStatus -> MutedStatus -> Ordering
$c< :: MutedStatus -> MutedStatus -> Bool
< :: MutedStatus -> MutedStatus -> Bool
$c<= :: MutedStatus -> MutedStatus -> Bool
<= :: MutedStatus -> MutedStatus -> Bool
$c> :: MutedStatus -> MutedStatus -> Bool
> :: MutedStatus -> MutedStatus -> Bool
$c>= :: MutedStatus -> MutedStatus -> Bool
>= :: MutedStatus -> MutedStatus -> Bool
$cmax :: MutedStatus -> MutedStatus -> MutedStatus
max :: MutedStatus -> MutedStatus -> MutedStatus
$cmin :: MutedStatus -> MutedStatus -> MutedStatus
min :: MutedStatus -> MutedStatus -> MutedStatus
Ord, Int -> MutedStatus -> ShowS
[MutedStatus] -> ShowS
MutedStatus -> String
(Int -> MutedStatus -> ShowS)
-> (MutedStatus -> String)
-> ([MutedStatus] -> ShowS)
-> Show MutedStatus
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> MutedStatus -> ShowS
showsPrec :: Int -> MutedStatus -> ShowS
$cshow :: MutedStatus -> String
show :: MutedStatus -> String
$cshowList :: [MutedStatus] -> ShowS
showList :: [MutedStatus] -> ShowS
Show, (forall x. MutedStatus -> Rep MutedStatus x)
-> (forall x. Rep MutedStatus x -> MutedStatus)
-> Generic MutedStatus
forall x. Rep MutedStatus x -> MutedStatus
forall x. MutedStatus -> Rep MutedStatus x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cfrom :: forall x. MutedStatus -> Rep MutedStatus x
from :: forall x. MutedStatus -> Rep MutedStatus x
$cto :: forall x. Rep MutedStatus x -> MutedStatus
to :: forall x. Rep MutedStatus x -> MutedStatus
Generic)
  deriving newtype (Integer -> MutedStatus
MutedStatus -> MutedStatus
MutedStatus -> MutedStatus -> MutedStatus
(MutedStatus -> MutedStatus -> MutedStatus)
-> (MutedStatus -> MutedStatus -> MutedStatus)
-> (MutedStatus -> MutedStatus -> MutedStatus)
-> (MutedStatus -> MutedStatus)
-> (MutedStatus -> MutedStatus)
-> (MutedStatus -> MutedStatus)
-> (Integer -> MutedStatus)
-> Num MutedStatus
forall a.
(a -> a -> a)
-> (a -> a -> a)
-> (a -> a -> a)
-> (a -> a)
-> (a -> a)
-> (a -> a)
-> (Integer -> a)
-> Num a
$c+ :: MutedStatus -> MutedStatus -> MutedStatus
+ :: MutedStatus -> MutedStatus -> MutedStatus
$c- :: MutedStatus -> MutedStatus -> MutedStatus
- :: MutedStatus -> MutedStatus -> MutedStatus
$c* :: MutedStatus -> MutedStatus -> MutedStatus
* :: MutedStatus -> MutedStatus -> MutedStatus
$cnegate :: MutedStatus -> MutedStatus
negate :: MutedStatus -> MutedStatus
$cabs :: MutedStatus -> MutedStatus
abs :: MutedStatus -> MutedStatus
$csignum :: MutedStatus -> MutedStatus
signum :: MutedStatus -> MutedStatus
$cfromInteger :: Integer -> MutedStatus
fromInteger :: Integer -> MutedStatus
Num, SchemaP NamedSwaggerDoc Value Value MutedStatus MutedStatus
SchemaP NamedSwaggerDoc Value Value MutedStatus MutedStatus
-> ToSchema MutedStatus
forall a. ValueSchema NamedSwaggerDoc a -> ToSchema a
$cschema :: SchemaP NamedSwaggerDoc Value Value MutedStatus MutedStatus
schema :: SchemaP NamedSwaggerDoc Value Value MutedStatus MutedStatus
ToSchema, Gen MutedStatus
Gen MutedStatus
-> (MutedStatus -> [MutedStatus]) -> Arbitrary MutedStatus
MutedStatus -> [MutedStatus]
forall a. Gen a -> (a -> [a]) -> Arbitrary a
$carbitrary :: Gen MutedStatus
arbitrary :: Gen MutedStatus
$cshrink :: MutedStatus -> [MutedStatus]
shrink :: MutedStatus -> [MutedStatus]
Arbitrary)
  deriving (Value -> Parser [MutedStatus]
Value -> Parser MutedStatus
(Value -> Parser MutedStatus)
-> (Value -> Parser [MutedStatus]) -> FromJSON MutedStatus
forall a.
(Value -> Parser a) -> (Value -> Parser [a]) -> FromJSON a
$cparseJSON :: Value -> Parser MutedStatus
parseJSON :: Value -> Parser MutedStatus
$cparseJSONList :: Value -> Parser [MutedStatus]
parseJSONList :: Value -> Parser [MutedStatus]
FromJSON, [MutedStatus] -> Value
[MutedStatus] -> Encoding
MutedStatus -> Value
MutedStatus -> Encoding
(MutedStatus -> Value)
-> (MutedStatus -> Encoding)
-> ([MutedStatus] -> Value)
-> ([MutedStatus] -> Encoding)
-> ToJSON MutedStatus
forall a.
(a -> Value)
-> (a -> Encoding)
-> ([a] -> Value)
-> ([a] -> Encoding)
-> ToJSON a
$ctoJSON :: MutedStatus -> Value
toJSON :: MutedStatus -> Value
$ctoEncoding :: MutedStatus -> Encoding
toEncoding :: MutedStatus -> Encoding
$ctoJSONList :: [MutedStatus] -> Value
toJSONList :: [MutedStatus] -> Value
$ctoEncodingList :: [MutedStatus] -> Encoding
toEncodingList :: [MutedStatus] -> Encoding
ToJSON, Typeable MutedStatus
Typeable MutedStatus =>
(Proxy MutedStatus -> Declare (Definitions Schema) NamedSchema)
-> ToSchema MutedStatus
Proxy MutedStatus -> Declare (Definitions Schema) NamedSchema
forall a.
Typeable a =>
(Proxy a -> Declare (Definitions Schema) NamedSchema) -> ToSchema a
$cdeclareNamedSchema :: Proxy MutedStatus -> Declare (Definitions Schema) NamedSchema
declareNamedSchema :: Proxy MutedStatus -> Declare (Definitions Schema) NamedSchema
S.ToSchema) via Schema MutedStatus

data OtherMember = OtherMember
  { OtherMember -> Qualified UserId
omQualifiedId :: Qualified UserId,
    OtherMember -> Maybe ServiceRef
omService :: Maybe ServiceRef,
    OtherMember -> RoleName
omConvRoleName :: RoleName
  }
  deriving stock (OtherMember -> OtherMember -> Bool
(OtherMember -> OtherMember -> Bool)
-> (OtherMember -> OtherMember -> Bool) -> Eq OtherMember
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: OtherMember -> OtherMember -> Bool
== :: OtherMember -> OtherMember -> Bool
$c/= :: OtherMember -> OtherMember -> Bool
/= :: OtherMember -> OtherMember -> Bool
Eq, Int -> OtherMember -> ShowS
[OtherMember] -> ShowS
OtherMember -> String
(Int -> OtherMember -> ShowS)
-> (OtherMember -> String)
-> ([OtherMember] -> ShowS)
-> Show OtherMember
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> OtherMember -> ShowS
showsPrec :: Int -> OtherMember -> ShowS
$cshow :: OtherMember -> String
show :: OtherMember -> String
$cshowList :: [OtherMember] -> ShowS
showList :: [OtherMember] -> ShowS
Show, (forall x. OtherMember -> Rep OtherMember x)
-> (forall x. Rep OtherMember x -> OtherMember)
-> Generic OtherMember
forall x. Rep OtherMember x -> OtherMember
forall x. OtherMember -> Rep OtherMember x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cfrom :: forall x. OtherMember -> Rep OtherMember x
from :: forall x. OtherMember -> Rep OtherMember x
$cto :: forall x. Rep OtherMember x -> OtherMember
to :: forall x. Rep OtherMember x -> OtherMember
Generic)
  deriving (Gen OtherMember
Gen OtherMember
-> (OtherMember -> [OtherMember]) -> Arbitrary OtherMember
OtherMember -> [OtherMember]
forall a. Gen a -> (a -> [a]) -> Arbitrary a
$carbitrary :: Gen OtherMember
arbitrary :: Gen OtherMember
$cshrink :: OtherMember -> [OtherMember]
shrink :: OtherMember -> [OtherMember]
Arbitrary) via (GenericUniform OtherMember)
  deriving (Value -> Parser [OtherMember]
Value -> Parser OtherMember
(Value -> Parser OtherMember)
-> (Value -> Parser [OtherMember]) -> FromJSON OtherMember
forall a.
(Value -> Parser a) -> (Value -> Parser [a]) -> FromJSON a
$cparseJSON :: Value -> Parser OtherMember
parseJSON :: Value -> Parser OtherMember
$cparseJSONList :: Value -> Parser [OtherMember]
parseJSONList :: Value -> Parser [OtherMember]
FromJSON, [OtherMember] -> Value
[OtherMember] -> Encoding
OtherMember -> Value
OtherMember -> Encoding
(OtherMember -> Value)
-> (OtherMember -> Encoding)
-> ([OtherMember] -> Value)
-> ([OtherMember] -> Encoding)
-> ToJSON OtherMember
forall a.
(a -> Value)
-> (a -> Encoding)
-> ([a] -> Value)
-> ([a] -> Encoding)
-> ToJSON a
$ctoJSON :: OtherMember -> Value
toJSON :: OtherMember -> Value
$ctoEncoding :: OtherMember -> Encoding
toEncoding :: OtherMember -> Encoding
$ctoJSONList :: [OtherMember] -> Value
toJSONList :: [OtherMember] -> Value
$ctoEncodingList :: [OtherMember] -> Encoding
toEncodingList :: [OtherMember] -> Encoding
ToJSON, Typeable OtherMember
Typeable OtherMember =>
(Proxy OtherMember -> Declare (Definitions Schema) NamedSchema)
-> ToSchema OtherMember
Proxy OtherMember -> Declare (Definitions Schema) NamedSchema
forall a.
Typeable a =>
(Proxy a -> Declare (Definitions Schema) NamedSchema) -> ToSchema a
$cdeclareNamedSchema :: Proxy OtherMember -> Declare (Definitions Schema) NamedSchema
declareNamedSchema :: Proxy OtherMember -> Declare (Definitions Schema) NamedSchema
S.ToSchema) via Schema OtherMember

instance ToSchema OtherMember where
  schema :: ValueSchema NamedSwaggerDoc OtherMember
schema =
    Text
-> SchemaP SwaggerDoc Object [Pair] OtherMember OtherMember
-> ValueSchema NamedSwaggerDoc OtherMember
forall doc doc' a b.
HasObject doc doc' =>
Text
-> SchemaP doc Object [Pair] a b -> SchemaP doc' Value Value a b
object Text
"OtherMember" (SchemaP SwaggerDoc Object [Pair] OtherMember OtherMember
 -> ValueSchema NamedSwaggerDoc OtherMember)
-> SchemaP SwaggerDoc Object [Pair] OtherMember OtherMember
-> ValueSchema NamedSwaggerDoc OtherMember
forall a b. (a -> b) -> a -> b
$
      Qualified UserId -> Maybe ServiceRef -> RoleName -> OtherMember
OtherMember
        (Qualified UserId -> Maybe ServiceRef -> RoleName -> OtherMember)
-> SchemaP SwaggerDoc Object [Pair] OtherMember (Qualified UserId)
-> SchemaP
     SwaggerDoc
     Object
     [Pair]
     OtherMember
     (Maybe ServiceRef -> RoleName -> OtherMember)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> OtherMember -> Qualified UserId
omQualifiedId (OtherMember -> Qualified UserId)
-> SchemaP
     SwaggerDoc Object [Pair] (Qualified UserId) (Qualified UserId)
-> SchemaP SwaggerDoc Object [Pair] OtherMember (Qualified UserId)
forall (p :: * -> * -> *) a a' b.
Profunctor p =>
(a -> a') -> p a' b -> p a b
.= 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]
  OtherMember
  (Maybe ServiceRef -> RoleName -> OtherMember)
-> SchemaP SwaggerDoc Object [Pair] OtherMember (Maybe UserId)
-> SchemaP
     SwaggerDoc
     Object
     [Pair]
     OtherMember
     (Maybe ServiceRef -> RoleName -> OtherMember)
forall a b.
SchemaP SwaggerDoc Object [Pair] OtherMember a
-> SchemaP SwaggerDoc Object [Pair] OtherMember b
-> SchemaP SwaggerDoc Object [Pair] OtherMember 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)
-> (OtherMember -> Qualified UserId) -> OtherMember -> UserId
forall b c a. (b -> c) -> (a -> b) -> a -> c
. OtherMember -> Qualified UserId
omQualifiedId) (OtherMember -> UserId)
-> SchemaP SwaggerDoc Object [Pair] UserId (Maybe UserId)
-> SchemaP SwaggerDoc Object [Pair] OtherMember (Maybe UserId)
forall (p :: * -> * -> *) a a' b.
Profunctor p =>
(a -> a') -> p a' b -> p a b
.= SchemaP SwaggerDoc Object [Pair] UserId UserId
-> SchemaP SwaggerDoc Object [Pair] UserId (Maybe UserId)
forall (f :: * -> *) a. Alternative f => f a -> f (Maybe a)
optional (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]
  OtherMember
  (Maybe ServiceRef -> RoleName -> OtherMember)
-> SchemaP SwaggerDoc Object [Pair] OtherMember (Maybe ServiceRef)
-> SchemaP
     SwaggerDoc Object [Pair] OtherMember (RoleName -> OtherMember)
forall a b.
SchemaP SwaggerDoc Object [Pair] OtherMember (a -> b)
-> SchemaP SwaggerDoc Object [Pair] OtherMember a
-> SchemaP SwaggerDoc Object [Pair] OtherMember b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> OtherMember -> Maybe ServiceRef
omService (OtherMember -> Maybe ServiceRef)
-> SchemaP
     SwaggerDoc Object [Pair] (Maybe ServiceRef) (Maybe ServiceRef)
-> SchemaP SwaggerDoc Object [Pair] OtherMember (Maybe ServiceRef)
forall (p :: * -> * -> *) a a' b.
Profunctor p =>
(a -> a') -> p a' b -> p a b
.= SchemaP SwaggerDoc Object [Pair] ServiceRef (Maybe ServiceRef)
-> SchemaP
     SwaggerDoc Object [Pair] (Maybe ServiceRef) (Maybe ServiceRef)
forall w d v a b.
Monoid w =>
SchemaP d v w a b -> SchemaP d v w (Maybe a) b
maybe_ (Text
-> (NamedSwaggerDoc -> NamedSwaggerDoc)
-> SchemaP NamedSwaggerDoc Value Value ServiceRef ServiceRef
-> SchemaP SwaggerDoc Object [Pair] ServiceRef (Maybe ServiceRef)
forall doc doc' a b.
(HasOpt doc, HasField doc' doc) =>
Text
-> (doc' -> doc')
-> SchemaP doc' Value Value a b
-> SchemaP doc Object [Pair] a (Maybe b)
optFieldWithDocModifier Text
"service" ((Maybe Text -> Identity (Maybe Text))
-> NamedSwaggerDoc -> Identity NamedSwaggerDoc
forall s a. HasDescription s a => Lens' s a
Lens' NamedSwaggerDoc (Maybe Text)
description ((Maybe Text -> Identity (Maybe Text))
 -> NamedSwaggerDoc -> Identity NamedSwaggerDoc)
-> Text -> NamedSwaggerDoc -> NamedSwaggerDoc
forall s t a b. ASetter s t a (Maybe b) -> b -> s -> t
?~ Text
desc) SchemaP NamedSwaggerDoc Value Value ServiceRef ServiceRef
forall a. ToSchema a => ValueSchema NamedSwaggerDoc a
schema)
        SchemaP
  SwaggerDoc Object [Pair] OtherMember (RoleName -> OtherMember)
-> SchemaP SwaggerDoc Object [Pair] OtherMember RoleName
-> SchemaP SwaggerDoc Object [Pair] OtherMember OtherMember
forall a b.
SchemaP SwaggerDoc Object [Pair] OtherMember (a -> b)
-> SchemaP SwaggerDoc Object [Pair] OtherMember a
-> SchemaP SwaggerDoc Object [Pair] OtherMember b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> OtherMember -> RoleName
omConvRoleName (OtherMember -> RoleName)
-> SchemaP SwaggerDoc Object [Pair] RoleName RoleName
-> SchemaP SwaggerDoc Object [Pair] OtherMember RoleName
forall (p :: * -> * -> *) a a' b.
Profunctor p =>
(a -> a') -> p a' b -> p a b
.= (Text
-> SchemaP NamedSwaggerDoc Value Value RoleName RoleName
-> SchemaP SwaggerDoc Object [Pair] RoleName RoleName
forall doc' doc a b.
HasField doc' doc =>
Text
-> SchemaP doc' Value Value a b -> SchemaP doc Object [Pair] a b
field Text
"conversation_role" SchemaP NamedSwaggerDoc Value Value RoleName RoleName
forall a. ToSchema a => ValueSchema NamedSwaggerDoc a
schema SchemaP SwaggerDoc Object [Pair] RoleName RoleName
-> SchemaP SwaggerDoc Object [Pair] RoleName RoleName
-> SchemaP SwaggerDoc Object [Pair] RoleName RoleName
forall a.
SchemaP SwaggerDoc Object [Pair] RoleName a
-> SchemaP SwaggerDoc Object [Pair] RoleName a
-> SchemaP SwaggerDoc Object [Pair] RoleName a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> RoleName -> SchemaP SwaggerDoc Object [Pair] RoleName RoleName
forall a. a -> SchemaP SwaggerDoc Object [Pair] RoleName a
forall (f :: * -> *) a. Applicative f => a -> f a
pure RoleName
roleNameWireAdmin)
        SchemaP SwaggerDoc Object [Pair] OtherMember OtherMember
-> SchemaP SwaggerDoc Object [Pair] OtherMember (Maybe Int)
-> SchemaP SwaggerDoc Object [Pair] OtherMember OtherMember
forall a b.
SchemaP SwaggerDoc Object [Pair] OtherMember a
-> SchemaP SwaggerDoc Object [Pair] OtherMember b
-> SchemaP SwaggerDoc Object [Pair] OtherMember a
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f a
<* Int -> OtherMember -> Int
forall a b. a -> b -> a
const (Int
0 :: Int) (OtherMember -> Int)
-> SchemaP SwaggerDoc Object [Pair] Int (Maybe Int)
-> SchemaP SwaggerDoc Object [Pair] OtherMember (Maybe Int)
forall (p :: * -> * -> *) a a' b.
Profunctor p =>
(a -> a') -> p a' b -> p a b
.= SchemaP SwaggerDoc Object [Pair] Int Int
-> SchemaP SwaggerDoc Object [Pair] Int (Maybe Int)
forall (f :: * -> *) a. Alternative f => f a -> f (Maybe a)
optional (Text
-> (NamedSwaggerDoc -> NamedSwaggerDoc)
-> SchemaP NamedSwaggerDoc Value Value Int Int
-> SchemaP SwaggerDoc Object [Pair] Int Int
forall doc' doc a b.
HasField doc' doc =>
Text
-> (doc' -> doc')
-> SchemaP doc' Value Value a b
-> SchemaP doc Object [Pair] a b
fieldWithDocModifier Text
"status" (((Maybe Bool -> Identity (Maybe Bool))
-> NamedSwaggerDoc -> Identity NamedSwaggerDoc
forall s a. HasDeprecated s a => Lens' s a
Lens' NamedSwaggerDoc (Maybe Bool)
deprecated ((Maybe Bool -> Identity (Maybe Bool))
 -> NamedSwaggerDoc -> Identity NamedSwaggerDoc)
-> Bool -> NamedSwaggerDoc -> NamedSwaggerDoc
forall s t a b. ASetter s t a (Maybe b) -> b -> s -> t
?~ Bool
True) (NamedSwaggerDoc -> NamedSwaggerDoc)
-> (NamedSwaggerDoc -> NamedSwaggerDoc)
-> NamedSwaggerDoc
-> NamedSwaggerDoc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ((Maybe Text -> Identity (Maybe Text))
-> NamedSwaggerDoc -> Identity NamedSwaggerDoc
forall s a. HasDescription s a => Lens' s a
Lens' NamedSwaggerDoc (Maybe Text)
description ((Maybe Text -> Identity (Maybe Text))
 -> NamedSwaggerDoc -> Identity NamedSwaggerDoc)
-> Text -> NamedSwaggerDoc -> NamedSwaggerDoc
forall s t a b. ASetter s t a (Maybe b) -> b -> s -> t
?~ Text
"deprecated")) SchemaP NamedSwaggerDoc Value Value Int Int
forall a. ToSchema a => ValueSchema NamedSwaggerDoc a
schema) -- TODO: remove
    where
      desc :: Text
desc = Text
"The reference to the owning service, if the member is a 'bot'."

instance Ord OtherMember where
  compare :: OtherMember -> OtherMember -> Ordering
compare OtherMember
a OtherMember
b = Qualified UserId -> Qualified UserId -> Ordering
forall a. Ord a => a -> a -> Ordering
compare (OtherMember -> Qualified UserId
omQualifiedId OtherMember
a) (OtherMember -> Qualified UserId
omQualifiedId OtherMember
b)

--------------------------------------------------------------------------------
-- Member Updates

-- | Inbound self member updates.  This is what galley expects on its endpoint.  See also
-- 'MemberUpdateData' - that event is meant to be sent only to the _self_ user.
data MemberUpdate = MemberUpdate
  { MemberUpdate -> Maybe MutedStatus
mupOtrMuteStatus :: Maybe MutedStatus,
    MemberUpdate -> Maybe Text
mupOtrMuteRef :: Maybe Text,
    MemberUpdate -> Maybe Bool
mupOtrArchive :: Maybe Bool,
    MemberUpdate -> Maybe Text
mupOtrArchiveRef :: Maybe Text,
    MemberUpdate -> Maybe Bool
mupHidden :: Maybe Bool,
    MemberUpdate -> Maybe Text
mupHiddenRef :: Maybe Text
  }
  deriving stock (MemberUpdate -> MemberUpdate -> Bool
(MemberUpdate -> MemberUpdate -> Bool)
-> (MemberUpdate -> MemberUpdate -> Bool) -> Eq MemberUpdate
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: MemberUpdate -> MemberUpdate -> Bool
== :: MemberUpdate -> MemberUpdate -> Bool
$c/= :: MemberUpdate -> MemberUpdate -> Bool
/= :: MemberUpdate -> MemberUpdate -> Bool
Eq, Int -> MemberUpdate -> ShowS
[MemberUpdate] -> ShowS
MemberUpdate -> String
(Int -> MemberUpdate -> ShowS)
-> (MemberUpdate -> String)
-> ([MemberUpdate] -> ShowS)
-> Show MemberUpdate
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> MemberUpdate -> ShowS
showsPrec :: Int -> MemberUpdate -> ShowS
$cshow :: MemberUpdate -> String
show :: MemberUpdate -> String
$cshowList :: [MemberUpdate] -> ShowS
showList :: [MemberUpdate] -> ShowS
Show, (forall x. MemberUpdate -> Rep MemberUpdate x)
-> (forall x. Rep MemberUpdate x -> MemberUpdate)
-> Generic MemberUpdate
forall x. Rep MemberUpdate x -> MemberUpdate
forall x. MemberUpdate -> Rep MemberUpdate x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cfrom :: forall x. MemberUpdate -> Rep MemberUpdate x
from :: forall x. MemberUpdate -> Rep MemberUpdate x
$cto :: forall x. Rep MemberUpdate x -> MemberUpdate
to :: forall x. Rep MemberUpdate x -> MemberUpdate
Generic)
  deriving (Value -> Parser [MemberUpdate]
Value -> Parser MemberUpdate
(Value -> Parser MemberUpdate)
-> (Value -> Parser [MemberUpdate]) -> FromJSON MemberUpdate
forall a.
(Value -> Parser a) -> (Value -> Parser [a]) -> FromJSON a
$cparseJSON :: Value -> Parser MemberUpdate
parseJSON :: Value -> Parser MemberUpdate
$cparseJSONList :: Value -> Parser [MemberUpdate]
parseJSONList :: Value -> Parser [MemberUpdate]
FromJSON, [MemberUpdate] -> Value
[MemberUpdate] -> Encoding
MemberUpdate -> Value
MemberUpdate -> Encoding
(MemberUpdate -> Value)
-> (MemberUpdate -> Encoding)
-> ([MemberUpdate] -> Value)
-> ([MemberUpdate] -> Encoding)
-> ToJSON MemberUpdate
forall a.
(a -> Value)
-> (a -> Encoding)
-> ([a] -> Value)
-> ([a] -> Encoding)
-> ToJSON a
$ctoJSON :: MemberUpdate -> Value
toJSON :: MemberUpdate -> Value
$ctoEncoding :: MemberUpdate -> Encoding
toEncoding :: MemberUpdate -> Encoding
$ctoJSONList :: [MemberUpdate] -> Value
toJSONList :: [MemberUpdate] -> Value
$ctoEncodingList :: [MemberUpdate] -> Encoding
toEncodingList :: [MemberUpdate] -> Encoding
ToJSON, Typeable MemberUpdate
Typeable MemberUpdate =>
(Proxy MemberUpdate -> Declare (Definitions Schema) NamedSchema)
-> ToSchema MemberUpdate
Proxy MemberUpdate -> Declare (Definitions Schema) NamedSchema
forall a.
Typeable a =>
(Proxy a -> Declare (Definitions Schema) NamedSchema) -> ToSchema a
$cdeclareNamedSchema :: Proxy MemberUpdate -> Declare (Definitions Schema) NamedSchema
declareNamedSchema :: Proxy MemberUpdate -> Declare (Definitions Schema) NamedSchema
S.ToSchema) via Schema MemberUpdate

memberUpdate :: MemberUpdate
memberUpdate :: MemberUpdate
memberUpdate = Maybe MutedStatus
-> Maybe Text
-> Maybe Bool
-> Maybe Text
-> Maybe Bool
-> Maybe Text
-> MemberUpdate
MemberUpdate Maybe MutedStatus
forall a. Maybe a
Nothing Maybe Text
forall a. Maybe a
Nothing Maybe Bool
forall a. Maybe a
Nothing Maybe Text
forall a. Maybe a
Nothing Maybe Bool
forall a. Maybe a
Nothing Maybe Text
forall a. Maybe a
Nothing

instance ToSchema MemberUpdate where
  schema :: ValueSchema NamedSwaggerDoc MemberUpdate
schema =
    (ValueSchema NamedSwaggerDoc MemberUpdate
-> (MemberUpdate -> Parser MemberUpdate)
-> ValueSchema NamedSwaggerDoc MemberUpdate
forall doc v w a b b'.
SchemaP doc v w a b -> (b -> Parser b') -> SchemaP doc v w a b'
`withParser` ((String -> Parser MemberUpdate)
-> (MemberUpdate -> Parser MemberUpdate)
-> Either String MemberUpdate
-> Parser MemberUpdate
forall a c b. (a -> c) -> (b -> c) -> Either a b -> c
either String -> Parser MemberUpdate
forall a. String -> Parser a
forall (m :: * -> *) a. MonadFail m => String -> m a
fail MemberUpdate -> Parser MemberUpdate
forall a. a -> Parser a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (Either String MemberUpdate -> Parser MemberUpdate)
-> (MemberUpdate -> Either String MemberUpdate)
-> MemberUpdate
-> Parser MemberUpdate
forall b c a. (b -> c) -> (a -> b) -> a -> c
. MemberUpdate -> Either String MemberUpdate
validateMemberUpdate))
      (ValueSchema NamedSwaggerDoc MemberUpdate
 -> ValueSchema NamedSwaggerDoc MemberUpdate)
-> (SchemaP SwaggerDoc Object [Pair] MemberUpdate MemberUpdate
    -> ValueSchema NamedSwaggerDoc MemberUpdate)
-> SchemaP SwaggerDoc Object [Pair] MemberUpdate MemberUpdate
-> ValueSchema NamedSwaggerDoc MemberUpdate
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Text
-> SchemaP SwaggerDoc Object [Pair] MemberUpdate MemberUpdate
-> ValueSchema NamedSwaggerDoc MemberUpdate
forall doc doc' a b.
HasObject doc doc' =>
Text
-> SchemaP doc Object [Pair] a b -> SchemaP doc' Value Value a b
object Text
"MemberUpdate"
      (SchemaP SwaggerDoc Object [Pair] MemberUpdate MemberUpdate
 -> ValueSchema NamedSwaggerDoc MemberUpdate)
-> SchemaP SwaggerDoc Object [Pair] MemberUpdate MemberUpdate
-> ValueSchema NamedSwaggerDoc MemberUpdate
forall a b. (a -> b) -> a -> b
$ Maybe MutedStatus
-> Maybe Text
-> Maybe Bool
-> Maybe Text
-> Maybe Bool
-> Maybe Text
-> MemberUpdate
MemberUpdate
        (Maybe MutedStatus
 -> Maybe Text
 -> Maybe Bool
 -> Maybe Text
 -> Maybe Bool
 -> Maybe Text
 -> MemberUpdate)
-> SchemaP
     SwaggerDoc Object [Pair] MemberUpdate (Maybe MutedStatus)
-> SchemaP
     SwaggerDoc
     Object
     [Pair]
     MemberUpdate
     (Maybe Text
      -> Maybe Bool
      -> Maybe Text
      -> Maybe Bool
      -> Maybe Text
      -> MemberUpdate)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> MemberUpdate -> Maybe MutedStatus
mupOtrMuteStatus (MemberUpdate -> Maybe MutedStatus)
-> SchemaP
     SwaggerDoc Object [Pair] (Maybe MutedStatus) (Maybe MutedStatus)
-> SchemaP
     SwaggerDoc Object [Pair] MemberUpdate (Maybe MutedStatus)
forall (p :: * -> * -> *) a a' b.
Profunctor p =>
(a -> a') -> p a' b -> p a b
.= SchemaP SwaggerDoc Object [Pair] MutedStatus (Maybe MutedStatus)
-> SchemaP
     SwaggerDoc Object [Pair] (Maybe MutedStatus) (Maybe MutedStatus)
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 MutedStatus MutedStatus
-> SchemaP SwaggerDoc Object [Pair] MutedStatus (Maybe MutedStatus)
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
"otr_muted_status" SchemaP NamedSwaggerDoc Value Value MutedStatus MutedStatus
forall a. ToSchema a => ValueSchema NamedSwaggerDoc a
schema)
        SchemaP
  SwaggerDoc
  Object
  [Pair]
  MemberUpdate
  (Maybe Text
   -> Maybe Bool
   -> Maybe Text
   -> Maybe Bool
   -> Maybe Text
   -> MemberUpdate)
-> SchemaP SwaggerDoc Object [Pair] MemberUpdate (Maybe Text)
-> SchemaP
     SwaggerDoc
     Object
     [Pair]
     MemberUpdate
     (Maybe Bool
      -> Maybe Text -> Maybe Bool -> Maybe Text -> MemberUpdate)
forall a b.
SchemaP SwaggerDoc Object [Pair] MemberUpdate (a -> b)
-> SchemaP SwaggerDoc Object [Pair] MemberUpdate a
-> SchemaP SwaggerDoc Object [Pair] MemberUpdate b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> MemberUpdate -> Maybe Text
mupOtrMuteRef (MemberUpdate -> Maybe Text)
-> SchemaP SwaggerDoc Object [Pair] (Maybe Text) (Maybe Text)
-> SchemaP SwaggerDoc Object [Pair] MemberUpdate (Maybe Text)
forall (p :: * -> * -> *) a a' b.
Profunctor p =>
(a -> a') -> p a' b -> p a b
.= SchemaP SwaggerDoc Object [Pair] Text (Maybe Text)
-> SchemaP SwaggerDoc Object [Pair] (Maybe Text) (Maybe Text)
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 Text Text
-> SchemaP SwaggerDoc Object [Pair] Text (Maybe Text)
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
"otr_muted_ref" SchemaP NamedSwaggerDoc Value Value Text Text
forall a. ToSchema a => ValueSchema NamedSwaggerDoc a
schema)
        SchemaP
  SwaggerDoc
  Object
  [Pair]
  MemberUpdate
  (Maybe Bool
   -> Maybe Text -> Maybe Bool -> Maybe Text -> MemberUpdate)
-> SchemaP SwaggerDoc Object [Pair] MemberUpdate (Maybe Bool)
-> SchemaP
     SwaggerDoc
     Object
     [Pair]
     MemberUpdate
     (Maybe Text -> Maybe Bool -> Maybe Text -> MemberUpdate)
forall a b.
SchemaP SwaggerDoc Object [Pair] MemberUpdate (a -> b)
-> SchemaP SwaggerDoc Object [Pair] MemberUpdate a
-> SchemaP SwaggerDoc Object [Pair] MemberUpdate b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> MemberUpdate -> Maybe Bool
mupOtrArchive (MemberUpdate -> Maybe Bool)
-> SchemaP SwaggerDoc Object [Pair] (Maybe Bool) (Maybe Bool)
-> SchemaP SwaggerDoc Object [Pair] MemberUpdate (Maybe Bool)
forall (p :: * -> * -> *) a a' b.
Profunctor p =>
(a -> a') -> p a' b -> p a b
.= SchemaP SwaggerDoc Object [Pair] Bool (Maybe Bool)
-> SchemaP SwaggerDoc Object [Pair] (Maybe Bool) (Maybe Bool)
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 Bool Bool
-> SchemaP SwaggerDoc Object [Pair] Bool (Maybe Bool)
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
"otr_archived" SchemaP NamedSwaggerDoc Value Value Bool Bool
forall a. ToSchema a => ValueSchema NamedSwaggerDoc a
schema)
        SchemaP
  SwaggerDoc
  Object
  [Pair]
  MemberUpdate
  (Maybe Text -> Maybe Bool -> Maybe Text -> MemberUpdate)
-> SchemaP SwaggerDoc Object [Pair] MemberUpdate (Maybe Text)
-> SchemaP
     SwaggerDoc
     Object
     [Pair]
     MemberUpdate
     (Maybe Bool -> Maybe Text -> MemberUpdate)
forall a b.
SchemaP SwaggerDoc Object [Pair] MemberUpdate (a -> b)
-> SchemaP SwaggerDoc Object [Pair] MemberUpdate a
-> SchemaP SwaggerDoc Object [Pair] MemberUpdate b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> MemberUpdate -> Maybe Text
mupOtrArchiveRef (MemberUpdate -> Maybe Text)
-> SchemaP SwaggerDoc Object [Pair] (Maybe Text) (Maybe Text)
-> SchemaP SwaggerDoc Object [Pair] MemberUpdate (Maybe Text)
forall (p :: * -> * -> *) a a' b.
Profunctor p =>
(a -> a') -> p a' b -> p a b
.= SchemaP SwaggerDoc Object [Pair] Text (Maybe Text)
-> SchemaP SwaggerDoc Object [Pair] (Maybe Text) (Maybe Text)
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 Text Text
-> SchemaP SwaggerDoc Object [Pair] Text (Maybe Text)
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
"otr_archived_ref" SchemaP NamedSwaggerDoc Value Value Text Text
forall a. ToSchema a => ValueSchema NamedSwaggerDoc a
schema)
        SchemaP
  SwaggerDoc
  Object
  [Pair]
  MemberUpdate
  (Maybe Bool -> Maybe Text -> MemberUpdate)
-> SchemaP SwaggerDoc Object [Pair] MemberUpdate (Maybe Bool)
-> SchemaP
     SwaggerDoc Object [Pair] MemberUpdate (Maybe Text -> MemberUpdate)
forall a b.
SchemaP SwaggerDoc Object [Pair] MemberUpdate (a -> b)
-> SchemaP SwaggerDoc Object [Pair] MemberUpdate a
-> SchemaP SwaggerDoc Object [Pair] MemberUpdate b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> MemberUpdate -> Maybe Bool
mupHidden (MemberUpdate -> Maybe Bool)
-> SchemaP SwaggerDoc Object [Pair] (Maybe Bool) (Maybe Bool)
-> SchemaP SwaggerDoc Object [Pair] MemberUpdate (Maybe Bool)
forall (p :: * -> * -> *) a a' b.
Profunctor p =>
(a -> a') -> p a' b -> p a b
.= SchemaP SwaggerDoc Object [Pair] Bool (Maybe Bool)
-> SchemaP SwaggerDoc Object [Pair] (Maybe Bool) (Maybe Bool)
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 Bool Bool
-> SchemaP SwaggerDoc Object [Pair] Bool (Maybe Bool)
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
"hidden" SchemaP NamedSwaggerDoc Value Value Bool Bool
forall a. ToSchema a => ValueSchema NamedSwaggerDoc a
schema)
        SchemaP
  SwaggerDoc Object [Pair] MemberUpdate (Maybe Text -> MemberUpdate)
-> SchemaP SwaggerDoc Object [Pair] MemberUpdate (Maybe Text)
-> SchemaP SwaggerDoc Object [Pair] MemberUpdate MemberUpdate
forall a b.
SchemaP SwaggerDoc Object [Pair] MemberUpdate (a -> b)
-> SchemaP SwaggerDoc Object [Pair] MemberUpdate a
-> SchemaP SwaggerDoc Object [Pair] MemberUpdate b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> MemberUpdate -> Maybe Text
mupHiddenRef (MemberUpdate -> Maybe Text)
-> SchemaP SwaggerDoc Object [Pair] (Maybe Text) (Maybe Text)
-> SchemaP SwaggerDoc Object [Pair] MemberUpdate (Maybe Text)
forall (p :: * -> * -> *) a a' b.
Profunctor p =>
(a -> a') -> p a' b -> p a b
.= SchemaP SwaggerDoc Object [Pair] Text (Maybe Text)
-> SchemaP SwaggerDoc Object [Pair] (Maybe Text) (Maybe Text)
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 Text Text
-> SchemaP SwaggerDoc Object [Pair] Text (Maybe Text)
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
"hidden_ref" SchemaP NamedSwaggerDoc Value Value Text Text
forall a. ToSchema a => ValueSchema NamedSwaggerDoc a
schema)

instance Arbitrary MemberUpdate where
  arbitrary :: Gen MemberUpdate
arbitrary =
    (GenericUniform MemberUpdate -> MemberUpdate
forall a. GenericUniform a -> a
getGenericUniform (GenericUniform MemberUpdate -> MemberUpdate)
-> Gen (GenericUniform MemberUpdate) -> Gen MemberUpdate
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Gen (GenericUniform MemberUpdate)
forall a. Arbitrary a => Gen a
arbitrary)
      Gen MemberUpdate -> (MemberUpdate -> Bool) -> Gen MemberUpdate
forall a. Gen a -> (a -> Bool) -> Gen a
`QC.suchThat` (Either String MemberUpdate -> Bool
forall a b. Either a b -> Bool
isRight (Either String MemberUpdate -> Bool)
-> (MemberUpdate -> Either String MemberUpdate)
-> MemberUpdate
-> Bool
forall b c a. (b -> c) -> (a -> b) -> a -> c
. MemberUpdate -> Either String MemberUpdate
validateMemberUpdate)

validateMemberUpdate :: MemberUpdate -> Either String MemberUpdate
validateMemberUpdate :: MemberUpdate -> Either String MemberUpdate
validateMemberUpdate MemberUpdate
u =
  if Maybe MutedStatus -> Bool
forall a. Maybe a -> Bool
isJust (MemberUpdate -> Maybe MutedStatus
mupOtrMuteStatus MemberUpdate
u)
    Bool -> Bool -> Bool
|| Maybe Text -> Bool
forall a. Maybe a -> Bool
isJust (MemberUpdate -> Maybe Text
mupOtrMuteRef MemberUpdate
u)
    Bool -> Bool -> Bool
|| Maybe Bool -> Bool
forall a. Maybe a -> Bool
isJust (MemberUpdate -> Maybe Bool
mupOtrArchive MemberUpdate
u)
    Bool -> Bool -> Bool
|| Maybe Text -> Bool
forall a. Maybe a -> Bool
isJust (MemberUpdate -> Maybe Text
mupOtrArchiveRef MemberUpdate
u)
    Bool -> Bool -> Bool
|| Maybe Bool -> Bool
forall a. Maybe a -> Bool
isJust (MemberUpdate -> Maybe Bool
mupHidden MemberUpdate
u)
    Bool -> Bool -> Bool
|| Maybe Text -> Bool
forall a. Maybe a -> Bool
isJust (MemberUpdate -> Maybe Text
mupHiddenRef MemberUpdate
u)
    then MemberUpdate -> Either String MemberUpdate
forall a b. b -> Either a b
Right MemberUpdate
u
    else
      String -> Either String MemberUpdate
forall a b. a -> Either a b
Left
        String
"One of { 'otr_muted_ref', 'otr_archived', 'otr_archived_ref', \
        \'hidden', 'hidden_ref', 'conversation_role'} required."

-- | Inbound other member updates.  This is what galley expects on its endpoint.  See also
-- 'MemberUpdateData' - that event is meant to be sent to all users in a conversation.
data OtherMemberUpdate = OtherMemberUpdate
  { OtherMemberUpdate -> Maybe RoleName
omuConvRoleName :: Maybe RoleName
  }
  deriving stock (OtherMemberUpdate -> OtherMemberUpdate -> Bool
(OtherMemberUpdate -> OtherMemberUpdate -> Bool)
-> (OtherMemberUpdate -> OtherMemberUpdate -> Bool)
-> Eq OtherMemberUpdate
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: OtherMemberUpdate -> OtherMemberUpdate -> Bool
== :: OtherMemberUpdate -> OtherMemberUpdate -> Bool
$c/= :: OtherMemberUpdate -> OtherMemberUpdate -> Bool
/= :: OtherMemberUpdate -> OtherMemberUpdate -> Bool
Eq, Int -> OtherMemberUpdate -> ShowS
[OtherMemberUpdate] -> ShowS
OtherMemberUpdate -> String
(Int -> OtherMemberUpdate -> ShowS)
-> (OtherMemberUpdate -> String)
-> ([OtherMemberUpdate] -> ShowS)
-> Show OtherMemberUpdate
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> OtherMemberUpdate -> ShowS
showsPrec :: Int -> OtherMemberUpdate -> ShowS
$cshow :: OtherMemberUpdate -> String
show :: OtherMemberUpdate -> String
$cshowList :: [OtherMemberUpdate] -> ShowS
showList :: [OtherMemberUpdate] -> ShowS
Show, (forall x. OtherMemberUpdate -> Rep OtherMemberUpdate x)
-> (forall x. Rep OtherMemberUpdate x -> OtherMemberUpdate)
-> Generic OtherMemberUpdate
forall x. Rep OtherMemberUpdate x -> OtherMemberUpdate
forall x. OtherMemberUpdate -> Rep OtherMemberUpdate x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cfrom :: forall x. OtherMemberUpdate -> Rep OtherMemberUpdate x
from :: forall x. OtherMemberUpdate -> Rep OtherMemberUpdate x
$cto :: forall x. Rep OtherMemberUpdate x -> OtherMemberUpdate
to :: forall x. Rep OtherMemberUpdate x -> OtherMemberUpdate
Generic)
  deriving (Value -> Parser [OtherMemberUpdate]
Value -> Parser OtherMemberUpdate
(Value -> Parser OtherMemberUpdate)
-> (Value -> Parser [OtherMemberUpdate])
-> FromJSON OtherMemberUpdate
forall a.
(Value -> Parser a) -> (Value -> Parser [a]) -> FromJSON a
$cparseJSON :: Value -> Parser OtherMemberUpdate
parseJSON :: Value -> Parser OtherMemberUpdate
$cparseJSONList :: Value -> Parser [OtherMemberUpdate]
parseJSONList :: Value -> Parser [OtherMemberUpdate]
FromJSON, [OtherMemberUpdate] -> Value
[OtherMemberUpdate] -> Encoding
OtherMemberUpdate -> Value
OtherMemberUpdate -> Encoding
(OtherMemberUpdate -> Value)
-> (OtherMemberUpdate -> Encoding)
-> ([OtherMemberUpdate] -> Value)
-> ([OtherMemberUpdate] -> Encoding)
-> ToJSON OtherMemberUpdate
forall a.
(a -> Value)
-> (a -> Encoding)
-> ([a] -> Value)
-> ([a] -> Encoding)
-> ToJSON a
$ctoJSON :: OtherMemberUpdate -> Value
toJSON :: OtherMemberUpdate -> Value
$ctoEncoding :: OtherMemberUpdate -> Encoding
toEncoding :: OtherMemberUpdate -> Encoding
$ctoJSONList :: [OtherMemberUpdate] -> Value
toJSONList :: [OtherMemberUpdate] -> Value
$ctoEncodingList :: [OtherMemberUpdate] -> Encoding
toEncodingList :: [OtherMemberUpdate] -> Encoding
ToJSON, Typeable OtherMemberUpdate
Typeable OtherMemberUpdate =>
(Proxy OtherMemberUpdate
 -> Declare (Definitions Schema) NamedSchema)
-> ToSchema OtherMemberUpdate
Proxy OtherMemberUpdate -> Declare (Definitions Schema) NamedSchema
forall a.
Typeable a =>
(Proxy a -> Declare (Definitions Schema) NamedSchema) -> ToSchema a
$cdeclareNamedSchema :: Proxy OtherMemberUpdate -> Declare (Definitions Schema) NamedSchema
declareNamedSchema :: Proxy OtherMemberUpdate -> Declare (Definitions Schema) NamedSchema
S.ToSchema) via (Schema OtherMemberUpdate)

instance Arbitrary OtherMemberUpdate where
  arbitrary :: Gen OtherMemberUpdate
arbitrary = Maybe RoleName -> OtherMemberUpdate
OtherMemberUpdate (Maybe RoleName -> OtherMemberUpdate)
-> (RoleName -> Maybe RoleName) -> RoleName -> OtherMemberUpdate
forall b c a. (b -> c) -> (a -> b) -> a -> c
. RoleName -> Maybe RoleName
forall a. a -> Maybe a
Just (RoleName -> OtherMemberUpdate)
-> Gen RoleName -> Gen OtherMemberUpdate
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Gen RoleName
forall a. Arbitrary a => Gen a
arbitrary

instance ToSchema OtherMemberUpdate where
  schema :: ValueSchema NamedSwaggerDoc OtherMemberUpdate
schema =
    (ValueSchema NamedSwaggerDoc OtherMemberUpdate
-> (OtherMemberUpdate -> Parser OtherMemberUpdate)
-> ValueSchema NamedSwaggerDoc OtherMemberUpdate
forall doc v w a b b'.
SchemaP doc v w a b -> (b -> Parser b') -> SchemaP doc v w a b'
`withParser` ((String -> Parser OtherMemberUpdate)
-> (OtherMemberUpdate -> Parser OtherMemberUpdate)
-> Either String OtherMemberUpdate
-> Parser OtherMemberUpdate
forall a c b. (a -> c) -> (b -> c) -> Either a b -> c
either String -> Parser OtherMemberUpdate
forall a. String -> Parser a
forall (m :: * -> *) a. MonadFail m => String -> m a
fail OtherMemberUpdate -> Parser OtherMemberUpdate
forall a. a -> Parser a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (Either String OtherMemberUpdate -> Parser OtherMemberUpdate)
-> (OtherMemberUpdate -> Either String OtherMemberUpdate)
-> OtherMemberUpdate
-> Parser OtherMemberUpdate
forall b c a. (b -> c) -> (a -> b) -> a -> c
. OtherMemberUpdate -> Either String OtherMemberUpdate
validateOtherMemberUpdate))
      (ValueSchema NamedSwaggerDoc OtherMemberUpdate
 -> ValueSchema NamedSwaggerDoc OtherMemberUpdate)
-> (ObjectSchema SwaggerDoc OtherMemberUpdate
    -> ValueSchema NamedSwaggerDoc OtherMemberUpdate)
-> ObjectSchema SwaggerDoc OtherMemberUpdate
-> ValueSchema NamedSwaggerDoc OtherMemberUpdate
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Text
-> (NamedSwaggerDoc -> NamedSwaggerDoc)
-> ObjectSchema SwaggerDoc OtherMemberUpdate
-> ValueSchema NamedSwaggerDoc OtherMemberUpdate
forall doc doc' a.
HasObject doc doc' =>
Text -> (doc' -> doc') -> ObjectSchema doc a -> ValueSchema doc' a
objectWithDocModifier
        Text
"OtherMemberUpdate"
        ((Maybe Text -> Identity (Maybe Text))
-> NamedSwaggerDoc -> Identity NamedSwaggerDoc
forall s a. HasDescription s a => Lens' s a
Lens' NamedSwaggerDoc (Maybe Text)
description ((Maybe Text -> Identity (Maybe Text))
 -> NamedSwaggerDoc -> Identity NamedSwaggerDoc)
-> Text -> NamedSwaggerDoc -> NamedSwaggerDoc
forall s t a b. ASetter s t a (Maybe b) -> b -> s -> t
?~ Text
"Update user properties of other members relative to a conversation")
      (ObjectSchema SwaggerDoc OtherMemberUpdate
 -> ValueSchema NamedSwaggerDoc OtherMemberUpdate)
-> ObjectSchema SwaggerDoc OtherMemberUpdate
-> ValueSchema NamedSwaggerDoc OtherMemberUpdate
forall a b. (a -> b) -> a -> b
$ Maybe RoleName -> OtherMemberUpdate
OtherMemberUpdate
        (Maybe RoleName -> OtherMemberUpdate)
-> SchemaP
     SwaggerDoc Object [Pair] OtherMemberUpdate (Maybe RoleName)
-> ObjectSchema SwaggerDoc OtherMemberUpdate
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> OtherMemberUpdate -> Maybe RoleName
omuConvRoleName (OtherMemberUpdate -> Maybe RoleName)
-> SchemaP
     SwaggerDoc Object [Pair] (Maybe RoleName) (Maybe RoleName)
-> SchemaP
     SwaggerDoc Object [Pair] OtherMemberUpdate (Maybe RoleName)
forall (p :: * -> * -> *) a a' b.
Profunctor p =>
(a -> a') -> p a' b -> p a b
.= SchemaP SwaggerDoc Object [Pair] RoleName (Maybe RoleName)
-> SchemaP
     SwaggerDoc Object [Pair] (Maybe RoleName) (Maybe RoleName)
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 RoleName RoleName
-> SchemaP SwaggerDoc Object [Pair] RoleName (Maybe RoleName)
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
"conversation_role" SchemaP NamedSwaggerDoc Value Value RoleName RoleName
forall a. ToSchema a => ValueSchema NamedSwaggerDoc a
schema)

validateOtherMemberUpdate :: OtherMemberUpdate -> Either String OtherMemberUpdate
validateOtherMemberUpdate :: OtherMemberUpdate -> Either String OtherMemberUpdate
validateOtherMemberUpdate OtherMemberUpdate
u
  | Maybe RoleName -> Bool
forall a. Maybe a -> Bool
isJust (OtherMemberUpdate -> Maybe RoleName
omuConvRoleName OtherMemberUpdate
u) = OtherMemberUpdate -> Either String OtherMemberUpdate
forall a. a -> Either String a
forall (f :: * -> *) a. Applicative f => a -> f a
pure OtherMemberUpdate
u
  | Bool
otherwise = String -> Either String OtherMemberUpdate
forall a b. a -> Either a b
Left String
"'conversation_role' is required"