54 lines
1.1 KiB
Haskell
54 lines
1.1 KiB
Haskell
{-# LANGUAGE DeriveGeneric #-}
|
|
{-# LANGUAGE TypeFamilies #-}
|
|
module Types.Avatar where
|
|
|
|
import Data.ByteString
|
|
|
|
import qualified Data.Text as T
|
|
|
|
import Data.Word (Word8)
|
|
|
|
import Data.Aeson
|
|
|
|
import GHC.Generics
|
|
|
|
-- internal imports
|
|
import Classes
|
|
|
|
data Avatar = Avatar
|
|
{ avatarId :: Int
|
|
, avatarName :: T.Text
|
|
, avatarHash :: [Word8]
|
|
, avatarData :: [Word8]
|
|
}
|
|
deriving (Show, Generic)
|
|
|
|
instance ToJSON Avatar where
|
|
toEncoding = genericToEncoding defaultOptions
|
|
|
|
instance FromJSON Avatar
|
|
|
|
instance FromDatabase Avatar where
|
|
type OutTuple Avatar = (Int, T.Text, ByteString, ByteString)
|
|
|
|
fromDatabase (id_, name, hash, data_) =
|
|
Avatar id_ name (unpack hash) (unpack data_)
|
|
|
|
|
|
data AvatarData = AvatarData
|
|
{ avatarDataName :: T.Text
|
|
, avatarDataData :: [Word8]
|
|
}
|
|
deriving (Show, Generic)
|
|
|
|
instance ToJSON AvatarData where
|
|
toEncoding = genericToEncoding defaultOptions
|
|
|
|
instance FromJSON AvatarData
|
|
|
|
instance FromDatabase AvatarData where
|
|
type OutTuple AvatarData = (T.Text, ByteString)
|
|
|
|
fromDatabase (name, data_) =
|
|
AvatarData name (unpack data_)
|