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

org.plasmalabs.sdk.syntax.BoxValueSyntax.scala Maven / Gradle / Ivy

package org.plasmalabs.sdk.syntax

import org.plasmalabs.sdk.models.box.{FungibilityType, QuantityDescriptorType}
import org.plasmalabs.sdk.models.box.Value._
import org.plasmalabs.quivr.models.Int128

import scala.language.implicitConversions

trait BoxValueSyntax {
  implicit def lvlAsBoxVal(lvl:  LVL): Value = Value.Lvl(lvl)
  implicit def toplAsBoxVal(tpl: TOPL): Value = Value.Topl(tpl)
  implicit def groupAsBoxVal(g:  Group): Value = Value.Group(g)
  implicit def seriesAsBoxVal(s: Series): Value = Value.Series(s)
  implicit def assetAsBoxVal(a:  Asset): Value = Value.Asset(a)

  implicit def valueToQuantitySyntaxOps(v: Value): ValueToQuantitySyntaxOps = new ValueToQuantitySyntaxOps(v)

  implicit def valueToQuantityDescriptorSyntaxOps(v: Value): ValueToQuantityDescriptorSyntaxOps =
    new ValueToQuantityDescriptorSyntaxOps(v)
  implicit def valueToFungibilitySyntaxOps(v: Value): ValueToFungibilitySyntaxOps = new ValueToFungibilitySyntaxOps(v)
}

class ValueToQuantitySyntaxOps(val value: Value) extends AnyVal {

  def quantity: Int128 = value match {
    case Value.Lvl(l)    => l.quantity
    case Value.Topl(t)   => t.quantity
    case Value.Group(g)  => g.quantity
    case Value.Series(s) => s.quantity
    case Value.Asset(a)  => a.quantity
    case _               => throw new Exception("Invalid value type")
  }

  def setQuantity(quantity: Int128): Value = value match {
    case Value.Lvl(l)    => l.withQuantity(quantity)
    case Value.Topl(t)   => t.withQuantity(quantity)
    case Value.Group(g)  => g.withQuantity(quantity)
    case Value.Series(s) => s.withQuantity(quantity)
    case Value.Asset(a)  => a.withQuantity(quantity)
    case _               => throw new Exception("Invalid value type")
  }
}

class ValueToQuantityDescriptorSyntaxOps(val value: Value) extends AnyVal {

  def getQuantityDescriptor: Option[QuantityDescriptorType] = value match {
    case Value.Asset(a) => Some(a.quantityDescriptor)
    case _              => None
  }
}

class ValueToFungibilitySyntaxOps(val value: Value) extends AnyVal {

  def getFungibility: Option[FungibilityType] = value match {
    case Value.Asset(a) => Some(a.fungibility)
    case _              => None
  }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy