Signal-Android/core-util/src/main/java/org/signal/core/util/CursorExtensions.kt

95 wiersze
2.3 KiB
Kotlin
Czysty Zwykły widok Historia

package org.signal.core.util
2021-12-01 18:34:21 +00:00
import android.database.Cursor
2022-03-14 19:49:46 +00:00
import java.util.Optional
2021-12-01 18:34:21 +00:00
fun Cursor.requireString(column: String): String? {
return CursorUtil.requireString(this, column)
}
fun Cursor.requireNonNullString(column: String): String {
return CursorUtil.requireString(this, column)!!
}
fun Cursor.optionalString(column: String): Optional<String> {
return CursorUtil.getString(this, column)
}
fun Cursor.requireInt(column: String): Int {
return CursorUtil.requireInt(this, column)
}
fun Cursor.optionalInt(column: String): Optional<Int> {
return CursorUtil.getInt(this, column)
}
fun Cursor.requireFloat(column: String): Float {
return CursorUtil.requireFloat(this, column)
}
fun Cursor.requireLong(column: String): Long {
return CursorUtil.requireLong(this, column)
}
fun Cursor.optionalLong(column: String): Optional<Long> {
return CursorUtil.getLong(this, column)
}
2021-12-01 18:34:21 +00:00
fun Cursor.requireBoolean(column: String): Boolean {
return CursorUtil.requireInt(this, column) != 0
}
fun Cursor.optionalBoolean(column: String): Optional<Boolean> {
return CursorUtil.getBoolean(this, column)
}
fun Cursor.requireBlob(column: String): ByteArray? {
return CursorUtil.requireBlob(this, column)
}
fun Cursor.requireNonNullBlob(column: String): ByteArray {
return CursorUtil.requireBlob(this, column)!!
}
fun Cursor.optionalBlob(column: String): Optional<ByteArray> {
return CursorUtil.getBlob(this, column)
}
fun Cursor.isNull(column: String): Boolean {
return CursorUtil.isNull(this, column)
}
2021-12-08 18:22:36 +00:00
2022-06-24 14:51:26 +00:00
fun <T> Cursor.requireObject(column: String, serializer: LongSerializer<T>): T {
return serializer.deserialize(CursorUtil.requireLong(this, column))
}
fun <T> Cursor.requireObject(column: String, serializer: StringSerializer<T>): T {
return serializer.deserialize(CursorUtil.requireString(this, column))
}
@JvmOverloads
fun Cursor.readToSingleLong(defaultValue: Long = 0): Long {
return use {
if (it.moveToFirst()) {
it.getLong(0)
} else {
defaultValue
}
}
}
2022-06-24 14:51:26 +00:00
inline fun <T> Cursor.readToList(predicate: (T) -> Boolean = { true }, mapper: (Cursor) -> T): List<T> {
2022-05-11 18:33:54 +00:00
val list = mutableListOf<T>()
use {
while (moveToNext()) {
2022-06-24 14:51:26 +00:00
val record = mapper(this)
if (predicate(record)) {
list += mapper(this)
}
2022-05-11 18:33:54 +00:00
}
}
return list
}
2021-12-08 18:22:36 +00:00
fun Boolean.toInt(): Int = if (this) 1 else 0