calamity-0.11.0.0: Calamity/Types/Model/Channel/Attachment.hs
{-# LANGUAGE TemplateHaskell #-}
-- | Message attachments
module Calamity.Types.Model.Channel.Attachment (
Attachment (..),
) where
import Calamity.Types.Snowflake
import Data.Aeson ((.:), (.:?))
import Data.Aeson qualified as Aeson
import Data.Text (Text)
import Data.Word
import Optics.TH
import TextShow.TH
fuseTup2 :: (Monad f) => (f a, f b) -> f (a, b)
fuseTup2 (a, b) = do
!a' <- a
!b' <- b
pure (a', b')
data Attachment = Attachment
{ id :: Snowflake Attachment
, filename :: Text
, size :: Word64
, url :: Text
, proxyUrl :: Text
, dimensions :: Maybe (Word64, Word64)
}
deriving (Eq, Show)
deriving (HasID Attachment) via HasIDField "id" Attachment
$(deriveTextShow ''Attachment)
$(makeFieldLabelsNoPrefix ''Attachment)
instance Aeson.FromJSON Attachment where
parseJSON = Aeson.withObject "Attachment" $ \v -> do
width <- v .:? "width"
height <- v .:? "height"
Attachment
<$> v .: "id"
<*> v .: "filename"
<*> v .: "size"
<*> v .: "url"
<*> v .: "proxy_url"
<*> pure
(fuseTup2 (width, height))