Skip to content

Instantly share code, notes, and snippets.

import kotlinx.coroutines.reactor.mono
import org.ton.api.tonnode.TonNodeBlockIdExt
import org.ton.bigint.BigInt
import org.ton.block.*
import org.ton.crypto.base64
import org.ton.lite.api.liteserver.LiteServerBlockTransactions
import org.ton.lite.api.liteserver.LiteServerTransactionId3
import org.ton.lite.client.LiteClient
import reactor.kotlin.core.publisher.toFlux
@90K2
90K2 / TelegramVerifier.kt
Created July 13, 2022 10:49
Kotlin implementation of telegram verification flow
@JsonIgnoreProperties(ignoreUnknown = true)
data class TelegramAuthRequestDTO(
@JsonProperty("auth_date")
val authDate: Long,
@JsonProperty("first_name")
val firstName: String?,
@JsonProperty("last_name")
val lastName: String?,
@90K2
90K2 / Extension.kt
Created July 12, 2022 17:58
Kotlin extension for serialization data objects with @JsonProperty annotated values instead of field names. Reflextion style
fun Any.forceSerialize(separator: String, sorted: Boolean = false): String {
var fieldNameToAnnotatedNameMap = this.javaClass.declaredFields.map { it.name }.associateWith { fieldName ->
val jsonFieldName =
this::class.primaryConstructor?.parameters?.first { it.name == fieldName }?.annotations?.firstOrNull { it is JsonProperty }
val serializedName = if (jsonFieldName != null) (jsonFieldName as JsonProperty).value else fieldName
serializedName
}
if (sorted)
fieldNameToAnnotatedNameMap = fieldNameToAnnotatedNameMap.toList().sortedBy { (_, value) -> value}.toMap()
return fieldNameToAnnotatedNameMap.entries.joinToString(separator) { e ->
@90K2
90K2 / Trie.kt
Last active July 8, 2022 09:07
Kotlin realization of Trie data structure
class TrieNode<T>(
val key: String?, var value: T?
) {
var parent: TrieNode<T>? = null
val children: HashMap<String, TrieNode<T>> = hashMapOf()
var end: Boolean = false
fun getWord(): String {
val output = mutableListOf<String?>()
var node: TrieNode<T>? = this