{-# LANGUAGE GeneralizedNewtypeDeriving #-}
{-# OPTIONS_GHC -fno-warn-orphans #-}
module Galley.Cassandra.Instances
(
)
where
import Cassandra.CQL
import Control.Error (note)
import Data.ByteString.Conversion
import Data.ByteString.Lazy qualified as LBS
import Data.Text qualified as T
import Data.Text.Encoding qualified as T
import Imports
import Wire.API.Bot ()
import Wire.API.Conversation
import Wire.API.Conversation.Protocol
import Wire.API.MLS.CipherSuite
import Wire.API.MLS.GroupInfo
import Wire.API.MLS.Proposal
import Wire.API.MLS.Serialisation
import Wire.API.MLS.SubConversation
import Wire.API.Routes.Internal.Galley.TeamsIntra
import Wire.API.Team
import Wire.API.Team.Feature qualified as Public
import Wire.API.Team.SearchVisibility
deriving instance Cql MutedStatus
deriving instance Cql ReceiptMode
instance Cql ConvType where
ctype :: Tagged ConvType ColumnType
ctype = ColumnType -> Tagged ConvType ColumnType
forall a b. b -> Tagged a b
Tagged ColumnType
IntColumn
toCql :: ConvType -> Value
toCql ConvType
RegularConv = Int32 -> Value
CqlInt Int32
0
toCql ConvType
SelfConv = Int32 -> Value
CqlInt Int32
1
toCql ConvType
One2OneConv = Int32 -> Value
CqlInt Int32
2
toCql ConvType
ConnectConv = Int32 -> Value
CqlInt Int32
3
fromCql :: Value -> Either String ConvType
fromCql (CqlInt Int32
i) = case Int32
i of
Int32
0 -> ConvType -> Either String ConvType
forall a. a -> Either String a
forall (f :: * -> *) a. Applicative f => a -> f a
pure ConvType
RegularConv
Int32
1 -> ConvType -> Either String ConvType
forall a. a -> Either String a
forall (f :: * -> *) a. Applicative f => a -> f a
pure ConvType
SelfConv
Int32
2 -> ConvType -> Either String ConvType
forall a. a -> Either String a
forall (f :: * -> *) a. Applicative f => a -> f a
pure ConvType
One2OneConv
Int32
3 -> ConvType -> Either String ConvType
forall a. a -> Either String a
forall (f :: * -> *) a. Applicative f => a -> f a
pure ConvType
ConnectConv
Int32
n -> String -> Either String ConvType
forall a b. a -> Either a b
Left (String -> Either String ConvType)
-> String -> Either String ConvType
forall a b. (a -> b) -> a -> b
$ String
"unexpected conversation-type: " String -> String -> String
forall a. [a] -> [a] -> [a]
++ Int32 -> String
forall a. Show a => a -> String
show Int32
n
fromCql Value
_ = String -> Either String ConvType
forall a b. a -> Either a b
Left String
"conv-type: int expected"
instance Cql Access where
ctype :: Tagged Access ColumnType
ctype = ColumnType -> Tagged Access ColumnType
forall a b. b -> Tagged a b
Tagged ColumnType
IntColumn
toCql :: Access -> Value
toCql Access
PrivateAccess = Int32 -> Value
CqlInt Int32
1
toCql Access
InviteAccess = Int32 -> Value
CqlInt Int32
2
toCql Access
LinkAccess = Int32 -> Value
CqlInt Int32
3
toCql Access
CodeAccess = Int32 -> Value
CqlInt Int32
4
fromCql :: Value -> Either String Access
fromCql (CqlInt Int32
i) = case Int32
i of
Int32
1 -> Access -> Either String Access
forall a. a -> Either String a
forall (f :: * -> *) a. Applicative f => a -> f a
pure Access
PrivateAccess
Int32
2 -> Access -> Either String Access
forall a. a -> Either String a
forall (f :: * -> *) a. Applicative f => a -> f a
pure Access
InviteAccess
Int32
3 -> Access -> Either String Access
forall a. a -> Either String a
forall (f :: * -> *) a. Applicative f => a -> f a
pure Access
LinkAccess
Int32
4 -> Access -> Either String Access
forall a. a -> Either String a
forall (f :: * -> *) a. Applicative f => a -> f a
pure Access
CodeAccess
Int32
n -> String -> Either String Access
forall a b. a -> Either a b
Left (String -> Either String Access) -> String -> Either String Access
forall a b. (a -> b) -> a -> b
$ String
"Unexpected Access value: " String -> String -> String
forall a. [a] -> [a] -> [a]
++ Int32 -> String
forall a. Show a => a -> String
show Int32
n
fromCql Value
_ = String -> Either String Access
forall a b. a -> Either a b
Left String
"Access value: int expected"
instance Cql AccessRoleLegacy where
ctype :: Tagged AccessRoleLegacy ColumnType
ctype = ColumnType -> Tagged AccessRoleLegacy ColumnType
forall a b. b -> Tagged a b
Tagged ColumnType
IntColumn
toCql :: AccessRoleLegacy -> Value
toCql AccessRoleLegacy
PrivateAccessRole = Int32 -> Value
CqlInt Int32
1
toCql AccessRoleLegacy
TeamAccessRole = Int32 -> Value
CqlInt Int32
2
toCql AccessRoleLegacy
ActivatedAccessRole = Int32 -> Value
CqlInt Int32
3
toCql AccessRoleLegacy
NonActivatedAccessRole = Int32 -> Value
CqlInt Int32
4
fromCql :: Value -> Either String AccessRoleLegacy
fromCql (CqlInt Int32
i) = case Int32
i of
Int32
1 -> AccessRoleLegacy -> Either String AccessRoleLegacy
forall a. a -> Either String a
forall (f :: * -> *) a. Applicative f => a -> f a
pure AccessRoleLegacy
PrivateAccessRole
Int32
2 -> AccessRoleLegacy -> Either String AccessRoleLegacy
forall a. a -> Either String a
forall (f :: * -> *) a. Applicative f => a -> f a
pure AccessRoleLegacy
TeamAccessRole
Int32
3 -> AccessRoleLegacy -> Either String AccessRoleLegacy
forall a. a -> Either String a
forall (f :: * -> *) a. Applicative f => a -> f a
pure AccessRoleLegacy
ActivatedAccessRole
Int32
4 -> AccessRoleLegacy -> Either String AccessRoleLegacy
forall a. a -> Either String a
forall (f :: * -> *) a. Applicative f => a -> f a
pure AccessRoleLegacy
NonActivatedAccessRole
Int32
n -> String -> Either String AccessRoleLegacy
forall a b. a -> Either a b
Left (String -> Either String AccessRoleLegacy)
-> String -> Either String AccessRoleLegacy
forall a b. (a -> b) -> a -> b
$ String
"Unexpected AccessRole value: " String -> String -> String
forall a. [a] -> [a] -> [a]
++ Int32 -> String
forall a. Show a => a -> String
show Int32
n
fromCql Value
_ = String -> Either String AccessRoleLegacy
forall a b. a -> Either a b
Left String
"AccessRole value: int expected"
instance Cql AccessRole where
ctype :: Tagged AccessRole ColumnType
ctype = ColumnType -> Tagged AccessRole ColumnType
forall a b. b -> Tagged a b
Tagged ColumnType
IntColumn
toCql :: AccessRole -> Value
toCql = \case
AccessRole
TeamMemberAccessRole -> Int32 -> Value
CqlInt Int32
1
AccessRole
NonTeamMemberAccessRole -> Int32 -> Value
CqlInt Int32
2
AccessRole
GuestAccessRole -> Int32 -> Value
CqlInt Int32
3
AccessRole
ServiceAccessRole -> Int32 -> Value
CqlInt Int32
4
fromCql :: Value -> Either String AccessRole
fromCql (CqlInt Int32
i) = case Int32
i of
Int32
1 -> AccessRole -> Either String AccessRole
forall a. a -> Either String a
forall (f :: * -> *) a. Applicative f => a -> f a
pure AccessRole
TeamMemberAccessRole
Int32
2 -> AccessRole -> Either String AccessRole
forall a. a -> Either String a
forall (f :: * -> *) a. Applicative f => a -> f a
pure AccessRole
NonTeamMemberAccessRole
Int32
3 -> AccessRole -> Either String AccessRole
forall a. a -> Either String a
forall (f :: * -> *) a. Applicative f => a -> f a
pure AccessRole
GuestAccessRole
Int32
4 -> AccessRole -> Either String AccessRole
forall a. a -> Either String a
forall (f :: * -> *) a. Applicative f => a -> f a
pure AccessRole
ServiceAccessRole
Int32
n -> String -> Either String AccessRole
forall a b. a -> Either a b
Left (String -> Either String AccessRole)
-> String -> Either String AccessRole
forall a b. (a -> b) -> a -> b
$ String
"Unexpected AccessRoleV2 value: " String -> String -> String
forall a. [a] -> [a] -> [a]
++ Int32 -> String
forall a. Show a => a -> String
show Int32
n
fromCql Value
_ = String -> Either String AccessRole
forall a b. a -> Either a b
Left String
"AccessRoleV2 value: int expected"
instance Cql ConvTeamInfo where
ctype :: Tagged ConvTeamInfo ColumnType
ctype = ColumnType -> Tagged ConvTeamInfo ColumnType
forall a b. b -> Tagged a b
Tagged (ColumnType -> Tagged ConvTeamInfo ColumnType)
-> ColumnType -> Tagged ConvTeamInfo ColumnType
forall a b. (a -> b) -> a -> b
$ Text -> [(Text, ColumnType)] -> ColumnType
UdtColumn Text
"teaminfo" [(Text
"teamid", ColumnType
UuidColumn), (Text
"managed", ColumnType
BooleanColumn)]
toCql :: ConvTeamInfo -> Value
toCql ConvTeamInfo
t = [(Text, Value)] -> Value
CqlUdt [(Text
"teamid", TeamId -> Value
forall a. Cql a => a -> Value
toCql (ConvTeamInfo -> TeamId
cnvTeamId ConvTeamInfo
t)), (Text
"managed", Bool -> Value
forall a. Cql a => a -> Value
toCql Bool
False)]
fromCql :: Value -> Either String ConvTeamInfo
fromCql (CqlUdt [(Text, Value)]
u) =
String -> Maybe Value -> Either String Value
forall a b. a -> Maybe b -> Either a b
note String
"missing 'teamid' in teaminfo" (Text
"teamid" Text -> [(Text, Value)] -> Maybe Value
forall a b. Eq a => a -> [(a, b)] -> Maybe b
`lookup` [(Text, Value)]
u) Either String Value
-> (Value -> Either String ConvTeamInfo)
-> Either String ConvTeamInfo
forall a b.
Either String a -> (a -> Either String b) -> Either String b
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= (TeamId -> ConvTeamInfo)
-> Either String TeamId -> Either String ConvTeamInfo
forall a b. (a -> b) -> Either String a -> Either String b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap TeamId -> ConvTeamInfo
ConvTeamInfo (Either String TeamId -> Either String ConvTeamInfo)
-> (Value -> Either String TeamId)
-> Value
-> Either String ConvTeamInfo
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Value -> Either String TeamId
forall a. Cql a => Value -> Either String a
fromCql
fromCql Value
_ = String -> Either String ConvTeamInfo
forall a b. a -> Either a b
Left String
"teaminfo: udt expected"
instance Cql TeamBinding where
ctype :: Tagged TeamBinding ColumnType
ctype = ColumnType -> Tagged TeamBinding ColumnType
forall a b. b -> Tagged a b
Tagged ColumnType
BooleanColumn
toCql :: TeamBinding -> Value
toCql TeamBinding
Binding = Bool -> Value
CqlBoolean Bool
True
toCql TeamBinding
NonBinding = Bool -> Value
CqlBoolean Bool
False
fromCql :: Value -> Either String TeamBinding
fromCql (CqlBoolean Bool
True) = TeamBinding -> Either String TeamBinding
forall a. a -> Either String a
forall (f :: * -> *) a. Applicative f => a -> f a
pure TeamBinding
Binding
fromCql (CqlBoolean Bool
False) = TeamBinding -> Either String TeamBinding
forall a. a -> Either String a
forall (f :: * -> *) a. Applicative f => a -> f a
pure TeamBinding
NonBinding
fromCql Value
_ = String -> Either String TeamBinding
forall a b. a -> Either a b
Left String
"teambinding: boolean expected"
instance Cql TeamStatus where
ctype :: Tagged TeamStatus ColumnType
ctype = ColumnType -> Tagged TeamStatus ColumnType
forall a b. b -> Tagged a b
Tagged ColumnType
IntColumn
toCql :: TeamStatus -> Value
toCql TeamStatus
Active = Int32 -> Value
CqlInt Int32
0
toCql TeamStatus
PendingDelete = Int32 -> Value
CqlInt Int32
1
toCql TeamStatus
Deleted = Int32 -> Value
CqlInt Int32
2
toCql TeamStatus
Suspended = Int32 -> Value
CqlInt Int32
3
toCql TeamStatus
PendingActive = Int32 -> Value
CqlInt Int32
4
fromCql :: Value -> Either String TeamStatus
fromCql (CqlInt Int32
i) = case Int32
i of
Int32
0 -> TeamStatus -> Either String TeamStatus
forall a. a -> Either String a
forall (f :: * -> *) a. Applicative f => a -> f a
pure TeamStatus
Active
Int32
1 -> TeamStatus -> Either String TeamStatus
forall a. a -> Either String a
forall (f :: * -> *) a. Applicative f => a -> f a
pure TeamStatus
PendingDelete
Int32
2 -> TeamStatus -> Either String TeamStatus
forall a. a -> Either String a
forall (f :: * -> *) a. Applicative f => a -> f a
pure TeamStatus
Deleted
Int32
3 -> TeamStatus -> Either String TeamStatus
forall a. a -> Either String a
forall (f :: * -> *) a. Applicative f => a -> f a
pure TeamStatus
Suspended
Int32
4 -> TeamStatus -> Either String TeamStatus
forall a. a -> Either String a
forall (f :: * -> *) a. Applicative f => a -> f a
pure TeamStatus
PendingActive
Int32
n -> String -> Either String TeamStatus
forall a b. a -> Either a b
Left (String -> Either String TeamStatus)
-> String -> Either String TeamStatus
forall a b. (a -> b) -> a -> b
$ String
"unexpected team-status: " String -> String -> String
forall a. [a] -> [a] -> [a]
++ Int32 -> String
forall a. Show a => a -> String
show Int32
n
fromCql Value
_ = String -> Either String TeamStatus
forall a b. a -> Either a b
Left String
"team-status: int expected"
instance Cql TeamSearchVisibility where
ctype :: Tagged TeamSearchVisibility ColumnType
ctype = ColumnType -> Tagged TeamSearchVisibility ColumnType
forall a b. b -> Tagged a b
Tagged ColumnType
IntColumn
fromCql :: Value -> Either String TeamSearchVisibility
fromCql (CqlInt Int32
n) = case Int32
n of
Int32
0 -> TeamSearchVisibility -> Either String TeamSearchVisibility
forall a. a -> Either String a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (TeamSearchVisibility -> Either String TeamSearchVisibility)
-> TeamSearchVisibility -> Either String TeamSearchVisibility
forall a b. (a -> b) -> a -> b
$ TeamSearchVisibility
SearchVisibilityStandard
Int32
1 -> TeamSearchVisibility -> Either String TeamSearchVisibility
forall a. a -> Either String a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (TeamSearchVisibility -> Either String TeamSearchVisibility)
-> TeamSearchVisibility -> Either String TeamSearchVisibility
forall a b. (a -> b) -> a -> b
$ TeamSearchVisibility
SearchVisibilityNoNameOutsideTeam
Int32
_ -> String -> Either String TeamSearchVisibility
forall a b. a -> Either a b
Left String
"fromCql: Invalid TeamSearchVisibility"
fromCql Value
_ = String -> Either String TeamSearchVisibility
forall a b. a -> Either a b
Left String
"fromCql: TeamSearchVisibility: CqlInt expected"
toCql :: TeamSearchVisibility -> Value
toCql TeamSearchVisibility
SearchVisibilityStandard = Int32 -> Value
CqlInt Int32
0
toCql TeamSearchVisibility
SearchVisibilityNoNameOutsideTeam = Int32 -> Value
CqlInt Int32
1
instance Cql Public.EnforceAppLock where
ctype :: Tagged EnforceAppLock ColumnType
ctype = ColumnType -> Tagged EnforceAppLock ColumnType
forall a b. b -> Tagged a b
Tagged ColumnType
IntColumn
toCql :: EnforceAppLock -> Value
toCql (Public.EnforceAppLock Bool
False) = Int32 -> Value
CqlInt Int32
0
toCql (Public.EnforceAppLock Bool
True) = Int32 -> Value
CqlInt Int32
1
fromCql :: Value -> Either String EnforceAppLock
fromCql (CqlInt Int32
n) = case Int32
n of
Int32
0 -> EnforceAppLock -> Either String EnforceAppLock
forall a. a -> Either String a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (Bool -> EnforceAppLock
Public.EnforceAppLock Bool
False)
Int32
1 -> EnforceAppLock -> Either String EnforceAppLock
forall a. a -> Either String a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (Bool -> EnforceAppLock
Public.EnforceAppLock Bool
True)
Int32
_ -> String -> Either String EnforceAppLock
forall a b. a -> Either a b
Left String
"fromCql EnforceAppLock: int out of range"
fromCql Value
_ = String -> Either String EnforceAppLock
forall a b. a -> Either a b
Left String
"fromCql EnforceAppLock: int expected"
instance Cql ProtocolTag where
ctype :: Tagged ProtocolTag ColumnType
ctype = ColumnType -> Tagged ProtocolTag ColumnType
forall a b. b -> Tagged a b
Tagged ColumnType
IntColumn
toCql :: ProtocolTag -> Value
toCql = Int32 -> Value
CqlInt (Int32 -> Value) -> (ProtocolTag -> Int32) -> ProtocolTag -> Value
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Int -> Int32
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Int -> Int32) -> (ProtocolTag -> Int) -> ProtocolTag -> Int32
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ProtocolTag -> Int
forall a. Enum a => a -> Int
fromEnum
fromCql :: Value -> Either String ProtocolTag
fromCql (CqlInt Int32
i) = do
let i' :: Int
i' = Int32 -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral Int32
i
if Int
i' Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
< forall a. Enum a => a -> Int
fromEnum @ProtocolTag ProtocolTag
forall a. Bounded a => a
minBound
Bool -> Bool -> Bool
|| Int
i' Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
> forall a. Enum a => a -> Int
fromEnum @ProtocolTag ProtocolTag
forall a. Bounded a => a
maxBound
then String -> Either String ProtocolTag
forall a b. a -> Either a b
Left (String -> Either String ProtocolTag)
-> String -> Either String ProtocolTag
forall a b. (a -> b) -> a -> b
$ String
"unexpected protocol: " String -> String -> String
forall a. [a] -> [a] -> [a]
++ Int32 -> String
forall a. Show a => a -> String
show Int32
i
else ProtocolTag -> Either String ProtocolTag
forall a b. b -> Either a b
Right (ProtocolTag -> Either String ProtocolTag)
-> ProtocolTag -> Either String ProtocolTag
forall a b. (a -> b) -> a -> b
$ Int -> ProtocolTag
forall a. Enum a => Int -> a
toEnum Int
i'
fromCql Value
_ = String -> Either String ProtocolTag
forall a b. a -> Either a b
Left String
"protocol: int expected"
instance Cql GroupId where
ctype :: Tagged GroupId ColumnType
ctype = ColumnType -> Tagged GroupId ColumnType
forall a b. b -> Tagged a b
Tagged ColumnType
BlobColumn
toCql :: GroupId -> Value
toCql = ByteString -> Value
CqlBlob (ByteString -> Value)
-> (GroupId -> ByteString) -> GroupId -> Value
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ByteString -> ByteString
LBS.fromStrict (ByteString -> ByteString)
-> (GroupId -> ByteString) -> GroupId -> ByteString
forall b c a. (b -> c) -> (a -> b) -> a -> c
. GroupId -> ByteString
unGroupId
fromCql :: Value -> Either String GroupId
fromCql (CqlBlob ByteString
b) = GroupId -> Either String GroupId
forall a b. b -> Either a b
Right (GroupId -> Either String GroupId)
-> (ByteString -> GroupId) -> ByteString -> Either String GroupId
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ByteString -> GroupId
GroupId (ByteString -> GroupId)
-> (ByteString -> ByteString) -> ByteString -> GroupId
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ByteString -> ByteString
LBS.toStrict (ByteString -> Either String GroupId)
-> ByteString -> Either String GroupId
forall a b. (a -> b) -> a -> b
$ ByteString
b
fromCql Value
_ = String -> Either String GroupId
forall a b. a -> Either a b
Left String
"group_id: blob expected"
instance Cql GroupInfoData where
ctype :: Tagged GroupInfoData ColumnType
ctype = ColumnType -> Tagged GroupInfoData ColumnType
forall a b. b -> Tagged a b
Tagged ColumnType
BlobColumn
toCql :: GroupInfoData -> Value
toCql = ByteString -> Value
CqlBlob (ByteString -> Value)
-> (GroupInfoData -> ByteString) -> GroupInfoData -> Value
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ByteString -> ByteString
LBS.fromStrict (ByteString -> ByteString)
-> (GroupInfoData -> ByteString) -> GroupInfoData -> ByteString
forall b c a. (b -> c) -> (a -> b) -> a -> c
. GroupInfoData -> ByteString
unGroupInfoData
fromCql :: Value -> Either String GroupInfoData
fromCql (CqlBlob ByteString
b) = GroupInfoData -> Either String GroupInfoData
forall a b. b -> Either a b
Right (GroupInfoData -> Either String GroupInfoData)
-> GroupInfoData -> Either String GroupInfoData
forall a b. (a -> b) -> a -> b
$ ByteString -> GroupInfoData
GroupInfoData (ByteString -> ByteString
LBS.toStrict ByteString
b)
fromCql Value
_ = String -> Either String GroupInfoData
forall a b. a -> Either a b
Left String
"GroupInfoData: blob expected"
instance Cql Icon where
ctype :: Tagged Icon ColumnType
ctype = ColumnType -> Tagged Icon ColumnType
forall a b. b -> Tagged a b
Tagged ColumnType
TextColumn
toCql :: Icon -> Value
toCql = Text -> Value
CqlText (Text -> Value) -> (Icon -> Text) -> Icon -> Value
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ByteString -> Text
T.decodeUtf8 (ByteString -> Text) -> (Icon -> ByteString) -> Icon -> Text
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Icon -> ByteString
forall a. ToByteString a => a -> ByteString
toByteString'
fromCql :: Value -> Either String Icon
fromCql (CqlText Text
txt) = Icon -> Either String Icon
forall a. a -> Either String a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (Icon -> Either String Icon)
-> (Text -> Icon) -> Text -> Either String Icon
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Icon -> Either String Icon -> Icon
forall b a. b -> Either a b -> b
fromRight Icon
DefaultIcon (Either String Icon -> Icon)
-> (Text -> Either String Icon) -> Text -> Icon
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Parser Icon -> ByteString -> Either String Icon
forall a. Parser a -> ByteString -> Either String a
runParser Parser Icon
forall a. FromByteString a => Parser a
parser (ByteString -> Either String Icon)
-> (Text -> ByteString) -> Text -> Either String Icon
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Text -> ByteString
T.encodeUtf8 (Text -> Either String Icon) -> Text -> Either String Icon
forall a b. (a -> b) -> a -> b
$ Text
txt
fromCql Value
_ = String -> Either String Icon
forall a b. a -> Either a b
Left String
"Icon: Text expected"
instance Cql Epoch where
ctype :: Tagged Epoch ColumnType
ctype = ColumnType -> Tagged Epoch ColumnType
forall a b. b -> Tagged a b
Tagged ColumnType
BigIntColumn
toCql :: Epoch -> Value
toCql = Int64 -> Value
CqlBigInt (Int64 -> Value) -> (Epoch -> Int64) -> Epoch -> Value
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Word64 -> Int64
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Word64 -> Int64) -> (Epoch -> Word64) -> Epoch -> Int64
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Epoch -> Word64
epochNumber
fromCql :: Value -> Either String Epoch
fromCql (CqlBigInt Int64
n) = Epoch -> Either String Epoch
forall a. a -> Either String a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (Word64 -> Epoch
Epoch (Int64 -> Word64
forall a b. (Integral a, Num b) => a -> b
fromIntegral Int64
n))
fromCql Value
_ = String -> Either String Epoch
forall a b. a -> Either a b
Left String
"epoch: bigint expected"
instance Cql ProposalRef where
ctype :: Tagged ProposalRef ColumnType
ctype = ColumnType -> Tagged ProposalRef ColumnType
forall a b. b -> Tagged a b
Tagged ColumnType
BlobColumn
toCql :: ProposalRef -> Value
toCql = ByteString -> Value
CqlBlob (ByteString -> Value)
-> (ProposalRef -> ByteString) -> ProposalRef -> Value
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ByteString -> ByteString
LBS.fromStrict (ByteString -> ByteString)
-> (ProposalRef -> ByteString) -> ProposalRef -> ByteString
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ProposalRef -> ByteString
unProposalRef
fromCql :: Value -> Either String ProposalRef
fromCql (CqlBlob ByteString
b) = ProposalRef -> Either String ProposalRef
forall a b. b -> Either a b
Right (ProposalRef -> Either String ProposalRef)
-> (ByteString -> ProposalRef)
-> ByteString
-> Either String ProposalRef
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ByteString -> ProposalRef
ProposalRef (ByteString -> ProposalRef)
-> (ByteString -> ByteString) -> ByteString -> ProposalRef
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ByteString -> ByteString
LBS.toStrict (ByteString -> Either String ProposalRef)
-> ByteString -> Either String ProposalRef
forall a b. (a -> b) -> a -> b
$ ByteString
b
fromCql Value
_ = String -> Either String ProposalRef
forall a b. a -> Either a b
Left String
"ProposalRef: blob expected"
instance Cql (RawMLS Proposal) where
ctype :: Tagged (RawMLS Proposal) ColumnType
ctype = ColumnType -> Tagged (RawMLS Proposal) ColumnType
forall a b. b -> Tagged a b
Tagged ColumnType
BlobColumn
toCql :: RawMLS Proposal -> Value
toCql = ByteString -> Value
CqlBlob (ByteString -> Value)
-> (RawMLS Proposal -> ByteString) -> RawMLS Proposal -> Value
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ByteString -> ByteString
LBS.fromStrict (ByteString -> ByteString)
-> (RawMLS Proposal -> ByteString) -> RawMLS Proposal -> ByteString
forall b c a. (b -> c) -> (a -> b) -> a -> c
. RawMLS Proposal -> ByteString
forall a. RawMLS a -> ByteString
raw
fromCql :: Value -> Either String (RawMLS Proposal)
fromCql (CqlBlob ByteString
b) = (Text -> String)
-> Either Text (RawMLS Proposal) -> Either String (RawMLS Proposal)
forall a c b. (a -> c) -> Either a b -> Either c b
mapLeft Text -> String
T.unpack (Either Text (RawMLS Proposal) -> Either String (RawMLS Proposal))
-> Either Text (RawMLS Proposal) -> Either String (RawMLS Proposal)
forall a b. (a -> b) -> a -> b
$ ByteString -> Either Text (RawMLS Proposal)
forall a. ParseMLS a => ByteString -> Either Text a
decodeMLS ByteString
b
fromCql Value
_ = String -> Either String (RawMLS Proposal)
forall a b. a -> Either a b
Left String
"Proposal: blob expected"
instance Cql CipherSuite where
ctype :: Tagged CipherSuite ColumnType
ctype = ColumnType -> Tagged CipherSuite ColumnType
forall a b. b -> Tagged a b
Tagged ColumnType
IntColumn
toCql :: CipherSuite -> Value
toCql = Int32 -> Value
CqlInt (Int32 -> Value) -> (CipherSuite -> Int32) -> CipherSuite -> Value
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Word16 -> Int32
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Word16 -> Int32)
-> (CipherSuite -> Word16) -> CipherSuite -> Int32
forall b c a. (b -> c) -> (a -> b) -> a -> c
. CipherSuite -> Word16
cipherSuiteNumber
fromCql :: Value -> Either String CipherSuite
fromCql (CqlInt Int32
i) =
if Int32
i Int32 -> Int32 -> Bool
forall a. Ord a => a -> a -> Bool
< Int32
2 Int32 -> Integer -> Int32
forall a b. (Num a, Integral b) => a -> b -> a
^ (Integer
16 :: Integer)
then CipherSuite -> Either String CipherSuite
forall a b. b -> Either a b
Right (CipherSuite -> Either String CipherSuite)
-> (Int32 -> CipherSuite) -> Int32 -> Either String CipherSuite
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Word16 -> CipherSuite
CipherSuite (Word16 -> CipherSuite)
-> (Int32 -> Word16) -> Int32 -> CipherSuite
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Int32 -> Word16
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Int32 -> Either String CipherSuite)
-> Int32 -> Either String CipherSuite
forall a b. (a -> b) -> a -> b
$ Int32
i
else String -> Either String CipherSuite
forall a b. a -> Either a b
Left String
"CipherSuite: an out of bounds value for Word16"
fromCql Value
_ = String -> Either String CipherSuite
forall a b. a -> Either a b
Left String
"CipherSuite: int expected"
instance Cql SubConvId where
ctype :: Tagged SubConvId ColumnType
ctype = ColumnType -> Tagged SubConvId ColumnType
forall a b. b -> Tagged a b
Tagged ColumnType
TextColumn
toCql :: SubConvId -> Value
toCql = Text -> Value
CqlText (Text -> Value) -> (SubConvId -> Text) -> SubConvId -> Value
forall b c a. (b -> c) -> (a -> b) -> a -> c
. SubConvId -> Text
unSubConvId
fromCql :: Value -> Either String SubConvId
fromCql (CqlText Text
txt) = SubConvId -> Either String SubConvId
forall a b. b -> Either a b
Right (Text -> SubConvId
SubConvId Text
txt)
fromCql Value
_ = String -> Either String SubConvId
forall a b. a -> Either a b
Left String
"SubConvId: Text expected"