mateamt/src/Types/Avatar.hs

64 lines
1.3 KiB
Haskell
Raw Normal View History

2019-09-07 18:05:24 +00:00
{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE TypeFamilies #-}
2019-09-07 18:05:24 +00:00
module Types.Avatar where
import Data.ByteString
2019-09-07 18:05:24 +00:00
import qualified Data.Text as T
2022-04-16 10:40:23 +00:00
import Data.Text.Encoding (decodeUtf8)
2019-09-07 18:05:24 +00:00
import Data.Word (Word8)
2019-09-07 18:05:24 +00:00
import Data.Aeson
2022-07-17 19:28:22 +00:00
import Data.OpenApi (ToSchema)
2019-09-07 18:05:24 +00:00
import GHC.Generics
-- internal imports
import Classes
2019-09-07 18:05:24 +00:00
data Avatar = Avatar
{ avatarId :: Int
, avatarName :: T.Text
2022-04-16 10:40:23 +00:00
, avatarHash :: T.Text
, avatarData :: [Word8]
2019-09-07 18:05:24 +00:00
}
deriving (Show, Generic)
instance ToJSON Avatar where
toEncoding = genericToEncoding defaultOptions
instance FromJSON Avatar
2022-07-17 19:28:22 +00:00
instance ToSchema Avatar
2019-09-07 18:05:24 +00:00
instance DatabaseRepresentation Avatar where
type Representation Avatar = (Int, T.Text, ByteString, ByteString)
instance FromDatabase Avatar where
fromDatabase (id_, name, hash, data_) =
2022-04-16 10:40:23 +00:00
Avatar id_ name (decodeUtf8 hash) (unpack data_)
2019-09-07 18:05:24 +00:00
data AvatarData = AvatarData
{ avatarDataName :: T.Text
, avatarDataData :: [Word8]
2019-09-07 18:05:24 +00:00
}
deriving (Show, Generic)
instance ToJSON AvatarData where
toEncoding = genericToEncoding defaultOptions
instance FromJSON AvatarData
2022-07-17 19:28:22 +00:00
instance ToSchema AvatarData
instance DatabaseRepresentation AvatarData where
type Representation AvatarData = (T.Text, ByteString)
instance FromDatabase AvatarData where
fromDatabase (name, data_) =
AvatarData name (unpack data_)