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

me.archdev.foundationdb.utils.KeySelector.scala Maven / Gradle / Ivy

The newest version!
package me.archdev.foundationdb.utils

import com.apple.foundationdb.{ KeySelector => JavaKeySelector }
import me.archdev.foundationdb.namespaces.{ Subspace => Sub }
import me.archdev.foundationdb.serializers.Tupler

case class KeySelector(raw: JavaKeySelector, ksType: KeySelectorType, subspace: Sub) {
  def unpacked = subspace.raw.unpack(raw.getKey)
}

object KeySelector {

  def lastLessThan[K: Tupler](key: K)(implicit sub: Sub = Sub()): KeySelector =
    new KeySelector(JavaKeySelector.lastLessThan(sub.pack(key)), LessThan, sub)

  def lastLessThan[K: Tupler](key: K, subspace: Sub): KeySelector = {
    implicit val sub: Sub = subspace
    lastLessThan(key)
  }

  def lastLessOrEqual[K: Tupler](key: K)(implicit sub: Sub = Sub()): KeySelector =
    new KeySelector(JavaKeySelector.lastLessOrEqual(sub.pack(key)), LessOrEqual, sub)

  def lastLessOrEqual[K: Tupler](key: K, subspace: Sub): KeySelector = {
    implicit val sub: Sub = subspace
    lastLessOrEqual(key)
  }

  def firstGreaterThan[K: Tupler](key: K)(implicit sub: Sub = Sub()): KeySelector =
    new KeySelector(JavaKeySelector.firstGreaterThan(sub.pack(key)), GreaterThan, sub)

  def firstGreaterThan[K: Tupler](key: K, subspace: Sub): KeySelector = {
    implicit val sub: Sub = subspace
    firstGreaterThan(key)
  }

  def firstGreaterOrEqual[K: Tupler](key: K)(implicit sub: Sub = Sub()): KeySelector =
    new KeySelector(JavaKeySelector.firstGreaterOrEqual(sub.pack(key)), GreaterOrEqual, sub)

  def firstGreaterOrEqual[K: Tupler](key: K, subspace: Sub): KeySelector = {
    implicit val sub: Sub = subspace
    firstGreaterOrEqual(key)
  }

}

sealed trait KeySelectorType
case object LessThan       extends KeySelectorType
case object LessOrEqual    extends KeySelectorType
case object GreaterThan    extends KeySelectorType
case object GreaterOrEqual extends KeySelectorType




© 2015 - 2025 Weber Informatics LLC | Privacy Policy