1
0
mirror of https://github.com/InsanusMokrassar/TelegramBotAPI.git synced 2024-06-03 00:15:27 +00:00
tgbotapi/src/main/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/MessageEntity/RawMessageEntity.kt

42 lines
2.0 KiB
Kotlin
Raw Normal View History

2018-12-26 08:07:24 +00:00
package com.github.insanusmokrassar.TelegramBotAPI.types.MessageEntity
import com.github.insanusmokrassar.TelegramBotAPI.types.User
2019-04-13 02:21:19 +00:00
import kotlinx.serialization.KSerializer
import kotlinx.serialization.Serializable
2018-12-26 08:07:24 +00:00
import kotlinx.serialization.internal.ArrayListSerializer
@Serializable
2019-08-17 16:48:18 +00:00
internal data class RawMessageEntity(
2018-12-26 08:07:24 +00:00
val type: String,
val offset: Int,
val length: Int,
val url: String? = null,
val user: User? = null
) {
fun asMessageEntity(source: String): MessageEntity {
val sourceSubstring = source.substring(offset, offset + length)
return when (type) {
"mention" -> MentionMessageEntity(offset, length, sourceSubstring)
"hashtag" -> HashTagMessageEntity(offset, length, sourceSubstring)
"cashtag" -> TODO()
"bot_command" -> BotCommandMessageEntity(offset, length, sourceSubstring)
"url" -> URLMessageEntity(offset, length, sourceSubstring)
"email" -> EMailMessageEntity(offset, length, sourceSubstring)
"phone_number" -> PhoneNumberMessageEntity(offset, length, sourceSubstring)
"bold" -> BoldTextMessageEntity(offset, length, sourceSubstring)
"italic" -> ItalicTextMessageEntity(offset, length, sourceSubstring)
"code" -> CodeTextMessageEntity(offset, length, sourceSubstring)
"pre" -> PreTextMessageEntity(offset, length, sourceSubstring)
"text_link" -> TextLinkMessageEntity(offset, length, sourceSubstring, url ?: throw IllegalStateException("URL must not be null for text link"))
"text_mention" -> TextMentionMessageEntity(offset, length, sourceSubstring, user ?: throw IllegalStateException("User must not be null for text mention"))
else -> throw IllegalArgumentException("Unknown type of message entity")
}
}
}
2019-08-17 16:48:18 +00:00
internal typealias RawMessageEntities = List<RawMessageEntity>
2018-12-26 08:07:24 +00:00
2019-08-17 16:48:18 +00:00
internal object RawMessageEntitiesSerializer : KSerializer<List<RawMessageEntity>> by ArrayListSerializer(
2018-12-26 08:07:24 +00:00
RawMessageEntity.serializer()
)