This commit is contained in:
InsanusMokrassar 2020-10-14 17:38:03 +06:00
parent 0ba93d0e60
commit af207d78a4

View File

@ -4,7 +4,7 @@ import dev.inmo.micro_utils.coroutines.BroadcastFlow
import dev.inmo.micro_utils.pagination.* import dev.inmo.micro_utils.pagination.*
import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.Flow
class MapCRUDRepo<ObjectType, IdType>( class ReadMapCRUDRepo<ObjectType, IdType>(
private val map: Map<IdType, ObjectType> = emptyMap() private val map: Map<IdType, ObjectType> = emptyMap()
) : ReadStandardCRUDRepo<ObjectType, IdType> { ) : ReadStandardCRUDRepo<ObjectType, IdType> {
override suspend fun getByPagination(pagination: Pagination): PaginationResult<ObjectType> { override suspend fun getByPagination(pagination: Pagination): PaginationResult<ObjectType> {
@ -21,7 +21,7 @@ class MapCRUDRepo<ObjectType, IdType>(
override suspend fun contains(id: IdType): Boolean = map.containsKey(id) override suspend fun contains(id: IdType): Boolean = map.containsKey(id)
} }
abstract class MutableMapCRUDRepo<ObjectType, IdType, InputValueType>( abstract class WriteMapCRUDRepo<ObjectType, IdType, InputValueType>(
private val map: MutableMap<IdType, ObjectType> = mutableMapOf() private val map: MutableMap<IdType, ObjectType> = mutableMapOf()
) : WriteStandardCRUDRepo<ObjectType, IdType, InputValueType> { ) : WriteStandardCRUDRepo<ObjectType, IdType, InputValueType> {
private val _newObjectsFlow: BroadcastFlow<ObjectType> = BroadcastFlow() private val _newObjectsFlow: BroadcastFlow<ObjectType> = BroadcastFlow()
@ -68,17 +68,17 @@ abstract class MutableMapCRUDRepo<ObjectType, IdType, InputValueType>(
} }
abstract class HashMapCRUDRepo<ObjectType, IdType, InputValueType>( abstract class MapCRUDRepo<ObjectType, IdType, InputValueType>(
map: MutableMap<IdType, ObjectType> map: MutableMap<IdType, ObjectType>
) : StandardCRUDRepo<ObjectType, IdType, InputValueType>, ) : StandardCRUDRepo<ObjectType, IdType, InputValueType>,
ReadStandardCRUDRepo<ObjectType, IdType> by MapCRUDRepo(map), ReadStandardCRUDRepo<ObjectType, IdType> by ReadMapCRUDRepo(map),
MutableMapCRUDRepo<ObjectType, IdType, InputValueType>(map) WriteMapCRUDRepo<ObjectType, IdType, InputValueType>(map)
fun <ObjectType, IdType, InputValueType> HashMapCRUDRepo( fun <ObjectType, IdType, InputValueType> MapCRUDRepo(
map: MutableMap<IdType, ObjectType>, map: MutableMap<IdType, ObjectType>,
updateCallback: suspend (newValue: InputValueType, id: IdType, old: ObjectType) -> ObjectType, updateCallback: suspend (newValue: InputValueType, id: IdType, old: ObjectType) -> ObjectType,
createCallback: suspend (newValue: InputValueType) -> Pair<IdType, ObjectType> createCallback: suspend (newValue: InputValueType) -> Pair<IdType, ObjectType>
) = object : HashMapCRUDRepo<ObjectType, IdType, InputValueType>(map) { ) = object : MapCRUDRepo<ObjectType, IdType, InputValueType>(map) {
override suspend fun updateObject( override suspend fun updateObject(
newValue: InputValueType, newValue: InputValueType,
id: IdType, id: IdType,