Compare commits

...

8 Commits

4 changed files with 72 additions and 5 deletions

View File

@@ -1,5 +1,21 @@
# Changelog # Changelog
## 0.5.21
* `Versions`
* `Klock`: `2.3.1` -> `2.3.2`
* `Serialization`
* `Typed Serializer`:
* `TypedSerializer` Descriptor serial name has been fixed
## 0.5.20
* `Repos`:
* `Common`
* `Android`:
* `*OrNull` analogs of `Cursor.get*(String)` extensions have been added
* Extensions `Cursor.getFloat` and `Cursor.getFloatOrNull` have been added
## 0.5.19 ## 0.5.19
* `LanguageCode`: * `LanguageCode`:

View File

@@ -14,7 +14,7 @@ kotlin_exposed_version=0.33.1
ktor_version=1.6.2 ktor_version=1.6.2
klockVersion=2.3.1 klockVersion=2.3.2
github_release_plugin_version=2.2.12 github_release_plugin_version=2.2.12
@@ -45,5 +45,5 @@ dokka_version=1.5.0
# Project data # Project data
group=dev.inmo group=dev.inmo
version=0.5.19 version=0.5.21
android_code_version=60 android_code_version=62

View File

@@ -2,6 +2,8 @@ package dev.inmo.micro_utils.repos
import android.database.Cursor import android.database.Cursor
import android.database.sqlite.SQLiteDatabase import android.database.sqlite.SQLiteDatabase
import androidx.core.database.*
import dev.inmo.micro_utils.repos.getLongOrNull
fun createTableQuery( fun createTableQuery(
tableName: String, tableName: String,
@@ -32,6 +34,11 @@ fun SQLiteDatabase.createTable(
fun Cursor.getString(columnName: String): String = getString( fun Cursor.getString(columnName: String): String = getString(
getColumnIndexOrThrow(columnName) getColumnIndexOrThrow(columnName)
) )
fun Cursor.getStringOrNull(columnName: String): String? {
return getStringOrNull(
getColumnIndex(columnName).takeIf { it != -1 } ?: return null
)
}
/** /**
* @throws IllegalArgumentException * @throws IllegalArgumentException
@@ -39,6 +46,11 @@ fun Cursor.getString(columnName: String): String = getString(
fun Cursor.getShort(columnName: String): Short = getShort( fun Cursor.getShort(columnName: String): Short = getShort(
getColumnIndexOrThrow(columnName) getColumnIndexOrThrow(columnName)
) )
fun Cursor.getShortOrNull(columnName: String): Short? {
return getShortOrNull(
getColumnIndex(columnName).takeIf { it != -1 } ?: return null
)
}
/** /**
* @throws IllegalArgumentException * @throws IllegalArgumentException
@@ -46,6 +58,11 @@ fun Cursor.getShort(columnName: String): Short = getShort(
fun Cursor.getLong(columnName: String): Long = getLong( fun Cursor.getLong(columnName: String): Long = getLong(
getColumnIndexOrThrow(columnName) getColumnIndexOrThrow(columnName)
) )
fun Cursor.getLongOrNull(columnName: String): Long? {
return getLongOrNull(
getColumnIndex(columnName).takeIf { it != -1 } ?: return null
)
}
/** /**
* @throws IllegalArgumentException * @throws IllegalArgumentException
@@ -53,6 +70,23 @@ fun Cursor.getLong(columnName: String): Long = getLong(
fun Cursor.getInt(columnName: String): Int = getInt( fun Cursor.getInt(columnName: String): Int = getInt(
getColumnIndexOrThrow(columnName) getColumnIndexOrThrow(columnName)
) )
fun Cursor.getIntOrNull(columnName: String): Int? {
return getIntOrNull(
getColumnIndex(columnName).takeIf { it != -1 } ?: return null
)
}
/**
* @throws IllegalArgumentException
*/
fun Cursor.getFloat(columnName: String): Float = getFloat(
getColumnIndexOrThrow(columnName)
)
fun Cursor.getFloatOrNull(columnName: String): Float? {
return getFloatOrNull(
getColumnIndex(columnName).takeIf { it != -1 } ?: return null
)
}
/** /**
* @throws IllegalArgumentException * @throws IllegalArgumentException
@@ -60,6 +94,11 @@ fun Cursor.getInt(columnName: String): Int = getInt(
fun Cursor.getDouble(columnName: String): Double = getDouble( fun Cursor.getDouble(columnName: String): Double = getDouble(
getColumnIndexOrThrow(columnName) getColumnIndexOrThrow(columnName)
) )
fun Cursor.getDoubleOrNull(columnName: String): Double? {
return getDoubleOrNull(
getColumnIndex(columnName).takeIf { it != -1 } ?: return null
)
}
fun SQLiteDatabase.select( fun SQLiteDatabase.select(
table: String, table: String,

View File

@@ -8,11 +8,23 @@ import kotlin.reflect.KClass
open class TypedSerializer<T : Any>( open class TypedSerializer<T : Any>(
kClass: KClass<T>, kClass: KClass<T>,
presetSerializers: Map<String, KSerializer<out T>> = emptyMap() presetSerializers: Map<String, KSerializer<out T>> = emptyMap(),
) : KSerializer<T> { ) : KSerializer<T> {
protected val serializers = presetSerializers.toMutableMap() protected val serializers = presetSerializers.toMutableMap()
@InternalSerializationApi @InternalSerializationApi
open override val descriptor: SerialDescriptor = buildSerialDescriptor( override val descriptor: SerialDescriptor = buildSerialDescriptor(
"TypedSerializer",
SerialKind.CONTEXTUAL
) {
element("type", String.serializer().descriptor)
element("value", ContextualSerializer(kClass).descriptor)
}
@InternalSerializationApi
@Deprecated(
"This descriptor was deprecated due to incorrect serial name. You may use it in case something require it, " +
"but it is strongly recommended to migrate onto new descriptor"
)
protected val oldDescriptor: SerialDescriptor = buildSerialDescriptor(
"TextSourceSerializer", "TextSourceSerializer",
SerialKind.CONTEXTUAL SerialKind.CONTEXTUAL
) { ) {