module Calamity.Types.Model.Channel.Attachment
( Attachment(..) ) where
import Calamity.Internal.AesonThings ()
import Calamity.Types.Snowflake
import Data.Aeson
import Data.Text.Lazy ( Text )
import Data.Word
import GHC.Generics
import TextShow
import qualified TextShow.Generic as TSG
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, Generic )
deriving ( TextShow ) via TSG.FromGeneric Attachment
deriving ( HasID Attachment ) via HasIDField "id" Attachment
instance ToJSON Attachment where
toEncoding Attachment { id, filename, size, url, proxyUrl, dimensions = Just (width, height) } = pairs
("id" .= id <> "filename" .= filename <> "size" .= size <> "url" .= url <> "proxy_url" .= proxyUrl
<> "width" .= width <> "height" .= height)
toEncoding Attachment { id, filename, size, url, proxyUrl } = pairs
("id" .= id <> "filename" .= filename <> "size" .= size <> "url" .= url <> "proxy_url" .= proxyUrl)
instance FromJSON Attachment where
parseJSON = 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))