module TD.Data.DraftMessageContent
(DraftMessageContent(..)) where
import qualified Data.Aeson as A
import qualified Data.Aeson.Types as AT
import qualified TD.Lib.Internal as I
import qualified TD.Data.FormattedText as FormattedText
import qualified TD.Data.LinkPreviewOptions as LinkPreviewOptions
import qualified TD.Data.RichMessage as RichMessage
import qualified Data.Text as T
import qualified TD.Data.MessageSelfDestructType as MessageSelfDestructType
import qualified Data.ByteString as BS
data DraftMessageContent
= DraftMessageContentText
{ DraftMessageContent -> Maybe FormattedText
text :: Maybe FormattedText.FormattedText
, DraftMessageContent -> Maybe LinkPreviewOptions
link_preview_options :: Maybe LinkPreviewOptions.LinkPreviewOptions
}
| DraftMessageContentRichMessage
{ DraftMessageContent -> Maybe RichMessage
message :: Maybe RichMessage.RichMessage
}
| DraftMessageContentVideoNote
{ DraftMessageContent -> Maybe Text
file_path :: Maybe T.Text
, DraftMessageContent -> Maybe Int
duration :: Maybe Int
, DraftMessageContent -> Maybe Int
_length :: Maybe Int
, DraftMessageContent -> Maybe MessageSelfDestructType
self_destruct_type :: Maybe MessageSelfDestructType.MessageSelfDestructType
}
| DraftMessageContentVoiceNote
{ file_path :: Maybe T.Text
, duration :: Maybe Int
, DraftMessageContent -> Maybe ByteString
waveform :: Maybe BS.ByteString
, self_destruct_type :: Maybe MessageSelfDestructType.MessageSelfDestructType
}
deriving (DraftMessageContent -> DraftMessageContent -> Bool
(DraftMessageContent -> DraftMessageContent -> Bool)
-> (DraftMessageContent -> DraftMessageContent -> Bool)
-> Eq DraftMessageContent
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: DraftMessageContent -> DraftMessageContent -> Bool
== :: DraftMessageContent -> DraftMessageContent -> Bool
$c/= :: DraftMessageContent -> DraftMessageContent -> Bool
/= :: DraftMessageContent -> DraftMessageContent -> Bool
Eq, Int -> DraftMessageContent -> ShowS
[DraftMessageContent] -> ShowS
DraftMessageContent -> String
(Int -> DraftMessageContent -> ShowS)
-> (DraftMessageContent -> String)
-> ([DraftMessageContent] -> ShowS)
-> Show DraftMessageContent
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> DraftMessageContent -> ShowS
showsPrec :: Int -> DraftMessageContent -> ShowS
$cshow :: DraftMessageContent -> String
show :: DraftMessageContent -> String
$cshowList :: [DraftMessageContent] -> ShowS
showList :: [DraftMessageContent] -> ShowS
Show)
instance I.ShortShow DraftMessageContent where
shortShow :: DraftMessageContent -> String
shortShow DraftMessageContentText
{ text :: DraftMessageContent -> Maybe FormattedText
text = Maybe FormattedText
text_
, link_preview_options :: DraftMessageContent -> Maybe LinkPreviewOptions
link_preview_options = Maybe LinkPreviewOptions
link_preview_options_
}
= String
"DraftMessageContentText"
String -> ShowS
forall a. [a] -> [a] -> [a]
++ [String] -> String
I.cc
[ String
"text" String -> Maybe FormattedText -> String
forall a. ShortShow a => String -> Maybe a -> String
`I.p` Maybe FormattedText
text_
, String
"link_preview_options" String -> Maybe LinkPreviewOptions -> String
forall a. ShortShow a => String -> Maybe a -> String
`I.p` Maybe LinkPreviewOptions
link_preview_options_
]
shortShow DraftMessageContentRichMessage
{ message :: DraftMessageContent -> Maybe RichMessage
message = Maybe RichMessage
message_
}
= String
"DraftMessageContentRichMessage"
String -> ShowS
forall a. [a] -> [a] -> [a]
++ [String] -> String
I.cc
[ String
"message" String -> Maybe RichMessage -> String
forall a. ShortShow a => String -> Maybe a -> String
`I.p` Maybe RichMessage
message_
]
shortShow DraftMessageContentVideoNote
{ file_path :: DraftMessageContent -> Maybe Text
file_path = Maybe Text
file_path_
, duration :: DraftMessageContent -> Maybe Int
duration = Maybe Int
duration_
, _length :: DraftMessageContent -> Maybe Int
_length = Maybe Int
_length_
, self_destruct_type :: DraftMessageContent -> Maybe MessageSelfDestructType
self_destruct_type = Maybe MessageSelfDestructType
self_destruct_type_
}
= String
"DraftMessageContentVideoNote"
String -> ShowS
forall a. [a] -> [a] -> [a]
++ [String] -> String
I.cc
[ String
"file_path" String -> Maybe Text -> String
forall a. ShortShow a => String -> Maybe a -> String
`I.p` Maybe Text
file_path_
, String
"duration" String -> Maybe Int -> String
forall a. ShortShow a => String -> Maybe a -> String
`I.p` Maybe Int
duration_
, String
"_length" String -> Maybe Int -> String
forall a. ShortShow a => String -> Maybe a -> String
`I.p` Maybe Int
_length_
, String
"self_destruct_type" String -> Maybe MessageSelfDestructType -> String
forall a. ShortShow a => String -> Maybe a -> String
`I.p` Maybe MessageSelfDestructType
self_destruct_type_
]
shortShow DraftMessageContentVoiceNote
{ file_path :: DraftMessageContent -> Maybe Text
file_path = Maybe Text
file_path_
, duration :: DraftMessageContent -> Maybe Int
duration = Maybe Int
duration_
, waveform :: DraftMessageContent -> Maybe ByteString
waveform = Maybe ByteString
waveform_
, self_destruct_type :: DraftMessageContent -> Maybe MessageSelfDestructType
self_destruct_type = Maybe MessageSelfDestructType
self_destruct_type_
}
= String
"DraftMessageContentVoiceNote"
String -> ShowS
forall a. [a] -> [a] -> [a]
++ [String] -> String
I.cc
[ String
"file_path" String -> Maybe Text -> String
forall a. ShortShow a => String -> Maybe a -> String
`I.p` Maybe Text
file_path_
, String
"duration" String -> Maybe Int -> String
forall a. ShortShow a => String -> Maybe a -> String
`I.p` Maybe Int
duration_
, String
"waveform" String -> Maybe ByteString -> String
forall a. ShortShow a => String -> Maybe a -> String
`I.p` Maybe ByteString
waveform_
, String
"self_destruct_type" String -> Maybe MessageSelfDestructType -> String
forall a. ShortShow a => String -> Maybe a -> String
`I.p` Maybe MessageSelfDestructType
self_destruct_type_
]
instance AT.FromJSON DraftMessageContent where
parseJSON :: Value -> Parser DraftMessageContent
parseJSON v :: Value
v@(AT.Object Object
obj) = do
String
t <- Object
obj Object -> Key -> Parser String
forall a. FromJSON a => Object -> Key -> Parser a
A..: Key
"@type" :: AT.Parser String
case String
t of
String
"draftMessageContentText" -> Value -> Parser DraftMessageContent
parseDraftMessageContentText Value
v
String
"draftMessageContentRichMessage" -> Value -> Parser DraftMessageContent
parseDraftMessageContentRichMessage Value
v
String
"draftMessageContentVideoNote" -> Value -> Parser DraftMessageContent
parseDraftMessageContentVideoNote Value
v
String
"draftMessageContentVoiceNote" -> Value -> Parser DraftMessageContent
parseDraftMessageContentVoiceNote Value
v
String
_ -> Parser DraftMessageContent
forall a. Monoid a => a
mempty
where
parseDraftMessageContentText :: A.Value -> AT.Parser DraftMessageContent
parseDraftMessageContentText :: Value -> Parser DraftMessageContent
parseDraftMessageContentText = String
-> (Object -> Parser DraftMessageContent)
-> Value
-> Parser DraftMessageContent
forall a. String -> (Object -> Parser a) -> Value -> Parser a
A.withObject String
"DraftMessageContentText" ((Object -> Parser DraftMessageContent)
-> Value -> Parser DraftMessageContent)
-> (Object -> Parser DraftMessageContent)
-> Value
-> Parser DraftMessageContent
forall a b. (a -> b) -> a -> b
$ \Object
o -> do
Maybe FormattedText
text_ <- Object
o Object -> Key -> Parser (Maybe FormattedText)
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
A..:? Key
"text"
Maybe LinkPreviewOptions
link_preview_options_ <- Object
o Object -> Key -> Parser (Maybe LinkPreviewOptions)
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
A..:? Key
"link_preview_options"
DraftMessageContent -> Parser DraftMessageContent
forall a. a -> Parser a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (DraftMessageContent -> Parser DraftMessageContent)
-> DraftMessageContent -> Parser DraftMessageContent
forall a b. (a -> b) -> a -> b
$ DraftMessageContentText
{ text :: Maybe FormattedText
text = Maybe FormattedText
text_
, link_preview_options :: Maybe LinkPreviewOptions
link_preview_options = Maybe LinkPreviewOptions
link_preview_options_
}
parseDraftMessageContentRichMessage :: A.Value -> AT.Parser DraftMessageContent
parseDraftMessageContentRichMessage :: Value -> Parser DraftMessageContent
parseDraftMessageContentRichMessage = String
-> (Object -> Parser DraftMessageContent)
-> Value
-> Parser DraftMessageContent
forall a. String -> (Object -> Parser a) -> Value -> Parser a
A.withObject String
"DraftMessageContentRichMessage" ((Object -> Parser DraftMessageContent)
-> Value -> Parser DraftMessageContent)
-> (Object -> Parser DraftMessageContent)
-> Value
-> Parser DraftMessageContent
forall a b. (a -> b) -> a -> b
$ \Object
o -> do
Maybe RichMessage
message_ <- Object
o Object -> Key -> Parser (Maybe RichMessage)
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
A..:? Key
"message"
DraftMessageContent -> Parser DraftMessageContent
forall a. a -> Parser a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (DraftMessageContent -> Parser DraftMessageContent)
-> DraftMessageContent -> Parser DraftMessageContent
forall a b. (a -> b) -> a -> b
$ DraftMessageContentRichMessage
{ message :: Maybe RichMessage
message = Maybe RichMessage
message_
}
parseDraftMessageContentVideoNote :: A.Value -> AT.Parser DraftMessageContent
parseDraftMessageContentVideoNote :: Value -> Parser DraftMessageContent
parseDraftMessageContentVideoNote = String
-> (Object -> Parser DraftMessageContent)
-> Value
-> Parser DraftMessageContent
forall a. String -> (Object -> Parser a) -> Value -> Parser a
A.withObject String
"DraftMessageContentVideoNote" ((Object -> Parser DraftMessageContent)
-> Value -> Parser DraftMessageContent)
-> (Object -> Parser DraftMessageContent)
-> Value
-> Parser DraftMessageContent
forall a b. (a -> b) -> a -> b
$ \Object
o -> do
Maybe Text
file_path_ <- Object
o Object -> Key -> Parser (Maybe Text)
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
A..:? Key
"file_path"
Maybe Int
duration_ <- Object
o Object -> Key -> Parser (Maybe Int)
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
A..:? Key
"duration"
Maybe Int
_length_ <- Object
o Object -> Key -> Parser (Maybe Int)
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
A..:? Key
"length"
Maybe MessageSelfDestructType
self_destruct_type_ <- Object
o Object -> Key -> Parser (Maybe MessageSelfDestructType)
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
A..:? Key
"self_destruct_type"
DraftMessageContent -> Parser DraftMessageContent
forall a. a -> Parser a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (DraftMessageContent -> Parser DraftMessageContent)
-> DraftMessageContent -> Parser DraftMessageContent
forall a b. (a -> b) -> a -> b
$ DraftMessageContentVideoNote
{ file_path :: Maybe Text
file_path = Maybe Text
file_path_
, duration :: Maybe Int
duration = Maybe Int
duration_
, _length :: Maybe Int
_length = Maybe Int
_length_
, self_destruct_type :: Maybe MessageSelfDestructType
self_destruct_type = Maybe MessageSelfDestructType
self_destruct_type_
}
parseDraftMessageContentVoiceNote :: A.Value -> AT.Parser DraftMessageContent
parseDraftMessageContentVoiceNote :: Value -> Parser DraftMessageContent
parseDraftMessageContentVoiceNote = String
-> (Object -> Parser DraftMessageContent)
-> Value
-> Parser DraftMessageContent
forall a. String -> (Object -> Parser a) -> Value -> Parser a
A.withObject String
"DraftMessageContentVoiceNote" ((Object -> Parser DraftMessageContent)
-> Value -> Parser DraftMessageContent)
-> (Object -> Parser DraftMessageContent)
-> Value
-> Parser DraftMessageContent
forall a b. (a -> b) -> a -> b
$ \Object
o -> do
Maybe Text
file_path_ <- Object
o Object -> Key -> Parser (Maybe Text)
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
A..:? Key
"file_path"
Maybe Int
duration_ <- Object
o Object -> Key -> Parser (Maybe Int)
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
A..:? Key
"duration"
Maybe ByteString
waveform_ <- (String -> ByteString) -> Maybe String -> Maybe ByteString
forall a b. (a -> b) -> Maybe a -> Maybe b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap String -> ByteString
I.readBytes (Maybe String -> Maybe ByteString)
-> Parser (Maybe String) -> Parser (Maybe ByteString)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Object
o Object -> Key -> Parser (Maybe String)
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
A..:? Key
"waveform"
Maybe MessageSelfDestructType
self_destruct_type_ <- Object
o Object -> Key -> Parser (Maybe MessageSelfDestructType)
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
A..:? Key
"self_destruct_type"
DraftMessageContent -> Parser DraftMessageContent
forall a. a -> Parser a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (DraftMessageContent -> Parser DraftMessageContent)
-> DraftMessageContent -> Parser DraftMessageContent
forall a b. (a -> b) -> a -> b
$ DraftMessageContentVoiceNote
{ file_path :: Maybe Text
file_path = Maybe Text
file_path_
, duration :: Maybe Int
duration = Maybe Int
duration_
, waveform :: Maybe ByteString
waveform = Maybe ByteString
waveform_
, self_destruct_type :: Maybe MessageSelfDestructType
self_destruct_type = Maybe MessageSelfDestructType
self_destruct_type_
}
parseJSON Value
_ = Parser DraftMessageContent
forall a. Monoid a => a
mempty
instance AT.ToJSON DraftMessageContent where
toJSON :: DraftMessageContent -> Value
toJSON DraftMessageContentText
{ text :: DraftMessageContent -> Maybe FormattedText
text = Maybe FormattedText
text_
, link_preview_options :: DraftMessageContent -> Maybe LinkPreviewOptions
link_preview_options = Maybe LinkPreviewOptions
link_preview_options_
}
= [Pair] -> Value
A.object
[ Key
"@type" Key -> Value -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
forall v. ToJSON v => Key -> v -> Pair
A..= Text -> Value
AT.String Text
"draftMessageContentText"
, Key
"text" Key -> Maybe FormattedText -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
forall v. ToJSON v => Key -> v -> Pair
A..= Maybe FormattedText
text_
, Key
"link_preview_options" Key -> Maybe LinkPreviewOptions -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
forall v. ToJSON v => Key -> v -> Pair
A..= Maybe LinkPreviewOptions
link_preview_options_
]
toJSON DraftMessageContentRichMessage
{ message :: DraftMessageContent -> Maybe RichMessage
message = Maybe RichMessage
message_
}
= [Pair] -> Value
A.object
[ Key
"@type" Key -> Value -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
forall v. ToJSON v => Key -> v -> Pair
A..= Text -> Value
AT.String Text
"draftMessageContentRichMessage"
, Key
"message" Key -> Maybe RichMessage -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
forall v. ToJSON v => Key -> v -> Pair
A..= Maybe RichMessage
message_
]
toJSON DraftMessageContentVideoNote
{ file_path :: DraftMessageContent -> Maybe Text
file_path = Maybe Text
file_path_
, duration :: DraftMessageContent -> Maybe Int
duration = Maybe Int
duration_
, _length :: DraftMessageContent -> Maybe Int
_length = Maybe Int
_length_
, self_destruct_type :: DraftMessageContent -> Maybe MessageSelfDestructType
self_destruct_type = Maybe MessageSelfDestructType
self_destruct_type_
}
= [Pair] -> Value
A.object
[ Key
"@type" Key -> Value -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
forall v. ToJSON v => Key -> v -> Pair
A..= Text -> Value
AT.String Text
"draftMessageContentVideoNote"
, Key
"file_path" Key -> Maybe Text -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
forall v. ToJSON v => Key -> v -> Pair
A..= Maybe Text
file_path_
, Key
"duration" Key -> Maybe Int -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
forall v. ToJSON v => Key -> v -> Pair
A..= Maybe Int
duration_
, Key
"length" Key -> Maybe Int -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
forall v. ToJSON v => Key -> v -> Pair
A..= Maybe Int
_length_
, Key
"self_destruct_type" Key -> Maybe MessageSelfDestructType -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
forall v. ToJSON v => Key -> v -> Pair
A..= Maybe MessageSelfDestructType
self_destruct_type_
]
toJSON DraftMessageContentVoiceNote
{ file_path :: DraftMessageContent -> Maybe Text
file_path = Maybe Text
file_path_
, duration :: DraftMessageContent -> Maybe Int
duration = Maybe Int
duration_
, waveform :: DraftMessageContent -> Maybe ByteString
waveform = Maybe ByteString
waveform_
, self_destruct_type :: DraftMessageContent -> Maybe MessageSelfDestructType
self_destruct_type = Maybe MessageSelfDestructType
self_destruct_type_
}
= [Pair] -> Value
A.object
[ Key
"@type" Key -> Value -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
forall v. ToJSON v => Key -> v -> Pair
A..= Text -> Value
AT.String Text
"draftMessageContentVoiceNote"
, Key
"file_path" Key -> Maybe Text -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
forall v. ToJSON v => Key -> v -> Pair
A..= Maybe Text
file_path_
, Key
"duration" Key -> Maybe Int -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
forall v. ToJSON v => Key -> v -> Pair
A..= Maybe Int
duration_
, Key
"waveform" Key -> Maybe Value -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
forall v. ToJSON v => Key -> v -> Pair
A..= (ByteString -> Value) -> Maybe ByteString -> Maybe Value
forall a b. (a -> b) -> Maybe a -> Maybe b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap ByteString -> Value
I.writeBytes Maybe ByteString
waveform_
, Key
"self_destruct_type" Key -> Maybe MessageSelfDestructType -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
forall v. ToJSON v => Key -> v -> Pair
A..= Maybe MessageSelfDestructType
self_destruct_type_
]