mateamt/src/Types/Avatar.hs

64 lines
1.3 KiB
Haskell

{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE TypeFamilies #-}
module Types.Avatar where
import Data.ByteString
import qualified Data.Text as T
import Data.Text.Encoding (decodeUtf8)
import Data.Word (Word8)
import Data.Aeson
import Data.OpenApi (ToSchema)
import GHC.Generics
-- internal imports
import Classes
data Avatar = Avatar
{ avatarId :: Int
, avatarName :: T.Text
, avatarHash :: T.Text
, avatarData :: [Word8]
}
deriving (Show, Generic)
instance ToJSON Avatar where
toEncoding = genericToEncoding defaultOptions
instance FromJSON Avatar
instance ToSchema Avatar
instance DatabaseRepresentation Avatar where
type Representation Avatar = (Int, T.Text, ByteString, ByteString)
instance FromDatabase Avatar where
fromDatabase (id_, name, hash, data_) =
Avatar id_ name (decodeUtf8 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 ToSchema AvatarData
instance DatabaseRepresentation AvatarData where
type Representation AvatarData = (T.Text, ByteString)
instance FromDatabase AvatarData where
fromDatabase (name, data_) =
AvatarData name (unpack data_)