Closed
Description
I was using the firebase encoder to encode a single values to be used in where statements. It was not flawless because the encoder ignored my @Serializable(with = ...)
for some reason, but it worked really well.
But now the encode
& firebaseSerializer
methods have been made internal, so I can't use them anymore. And I struggle to find any alternatives. Why is this functionality internal all of the sudden? Does this mean I am just screwed now?
My use case:
import dev.gitlive.firebase.FirebaseEncoder
import dev.gitlive.firebase.encode
import dev.gitlive.firebase.firebaseSerializer
... // These imports no longer work, even the @file:Suppress("INVISIBLE_MEMBER", "INVISIBlE_REFERENCE") hack does not help
internal object PrimitiveFirebaseEncoder {
inline fun <reified T> encodeToAny(value: T): Any? = value?.let {
encode(it.firebasePrimitiveSerializer(), it) {
encodeDefaults = true
}
}
/**
* Allows to override/specify default serializer for a standalone primitive value serialization using [FirebaseEncoder].
*/
@Suppress("UNCHECKED_CAST")
private inline fun <reified T : Any> T.firebasePrimitiveSerializer() = when (this) {
is Instant -> InstantTimestampSerializer
is LocalDate -> LocalDateTimestampSerializer
is LocalTime -> LocalTimeIntSerializer
is LocalDateTime -> LocalDateTimeTimestampSerializer
is Duration -> DurationSecondsSerializer
is DayOfWeek -> DayOfWeekIntSerializer
else -> this.firebaseSerializer()
} as KSerializer<T>
}
Usage:
val time: Instant = ...
query
.where { "time" greaterThan PrimitiveFirebaseEncoder.encodeToAny(time) }
...
Metadata
Metadata
Assignees
Labels
No labels