All Downloads are FREE. Search and download functionalities are using the official Maven repository.

commonMain.com.harmony.kotlin.data.datasource.DataSourceQueryMapper.kt Maven / Gradle / Ivy

package com.harmony.kotlin.data.datasource

import com.harmony.kotlin.data.mapper.Mapper
import com.harmony.kotlin.data.query.Query

/**
 * This data source uses mappers to map queries and redirects them to the contained data source, acting as a simple "translator".
 *
 * @param getDataSource Data source with get operations
 * @param putDataSource Data source with put operations
 * @param deleteDataSource Data source with delete operations
 * @param getQueryMapper Mapper for get operations
 * @param putQueryMapper Mapper for put operations
 * @param deleteQueryMapper Mapper for delete operations
 */
@Suppress("UNCHECKED_CAST")
class DataSourceQueryMapper(
  private val getDataSource: GetDataSource,
  private val putDataSource: PutDataSource,
  private val deleteDataSource: DeleteDataSource,
  private val getQueryMapper: Mapper,
  private val putQueryMapper: Mapper,
  private val deleteQueryMapper: Mapper
) : GetDataSource, PutDataSource, DeleteDataSource {

  override suspend fun get(query: Query): V {
    val queryOut = getQueryMapper.map(query as GetQueryIn)
    return getDataSource.get(queryOut)
  }

  @Deprecated("Use get instead")
  override suspend fun getAll(query: Query): List {
    val queryOut = getQueryMapper.map(query as GetQueryIn)
    return getDataSource.getAll(queryOut)
  }

  override suspend fun put(query: Query, value: V?): V {
    val queryOut = putQueryMapper.map(query as PutQueryIn)
    return putDataSource.put(queryOut, value)
  }

  @Deprecated("Use put instead")
  override suspend fun putAll(query: Query, value: List?): List {
    val queryOut = putQueryMapper.map(query as PutQueryIn)
    return putDataSource.putAll(queryOut, value)
  }

  override suspend fun delete(query: Query) {
    val queryOut = deleteQueryMapper.map(query as DeleteQueryIn)
    return deleteDataSource.delete(queryOut)
  }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy