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