packages feed

matrix-client-0.1.9.0: src/Network/Matrix/Room.hs

{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE OverloadedStrings #-}

-- | Matrix room related data types
module Network.Matrix.Room (RoomCreatePreset (..), RoomCreateRequest (..)) where

import Network.Matrix.Internal (aesonOptions)
import Data.Aeson (ToJSON (..), Value (..), genericToJSON)
import Data.Text (Text)
import GHC.Generics (Generic)

-- | https://matrix.org/docs/spec/client_server/latest#post-matrix-client-r0-createroom
data RoomCreatePreset
    = PrivateChat
    | TrustedPrivateChat
    | PublicChat
    deriving (Eq, Show)

instance ToJSON RoomCreatePreset where
    toJSON preset = String $ case preset of
        PrivateChat -> "private_chat"
        TrustedPrivateChat -> "trusted_private_chat"
        PublicChat -> "public_chat"

data RoomCreateRequest = RoomCreateRequest
    { rcrPreset :: RoomCreatePreset
    , rcrRoomAliasName :: Text
    , rcrName :: Text
    , rcrTopic :: Text
    }
    deriving (Eq, Show, Generic)

instance ToJSON RoomCreateRequest where
    toJSON = genericToJSON aesonOptions