{-# 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_)