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

com.digitalasset.ledger.client.binding.binding.encoding.LfEncodable.scala Maven / Gradle / Ivy

There is a newer version: 3.0.0-snapshot.20240126.12648.0.va9dc2d63
Show newest version
// Copyright (c) 2022 Digital Asset (Switzerland) GmbH and/or its affiliates. All rights reserved.
// SPDX-License-Identifier: Apache-2.0

package com.daml.ledger.client
package binding
package encoding

import binding.{Primitive => P}

@annotation.implicitNotFound(msg = "Cannot find LfEncodable type class for ${A}")
abstract class LfEncodable[A] {
  def encoding(lte: LfTypeEncoding): lte.Out[A]
}

object LfEncodable extends ValuePrimitiveEncoding[LfEncodable] {
  @inline def encoding[A](lte: LfTypeEncoding)(implicit le: LfEncodable[A]): lte.Out[A] =
    le.encoding(lte)

  override implicit val valueInt64: LfEncodable[P.Int64] = new LfEncodable[P.Int64] {
    override def encoding(lte: LfTypeEncoding): lte.Out[P.Int64] = lte.primitive.valueInt64
  }

  override implicit val valueNumeric: LfEncodable[P.Numeric] = new LfEncodable[P.Numeric] {
    override def encoding(lte: LfTypeEncoding): lte.Out[P.Numeric] = lte.primitive.valueNumeric
  }

  override implicit val valueParty: LfEncodable[P.Party] = new LfEncodable[P.Party] {
    override def encoding(lte: LfTypeEncoding): lte.Out[P.Party] = lte.primitive.valueParty
  }

  override implicit val valueText: LfEncodable[P.Text] = new LfEncodable[P.Text] {
    override def encoding(lte: LfTypeEncoding): lte.Out[P.Text] = lte.primitive.valueText
  }

  override implicit val valueDate: LfEncodable[P.Date] = new LfEncodable[P.Date] {
    override def encoding(lte: LfTypeEncoding): lte.Out[P.Date] = lte.primitive.valueDate
  }

  override implicit val valueTimestamp: LfEncodable[P.Timestamp] = new LfEncodable[P.Timestamp] {
    override def encoding(lte: LfTypeEncoding): lte.Out[P.Timestamp] = lte.primitive.valueTimestamp
  }

  override implicit val valueUnit: LfEncodable[P.Unit] = new LfEncodable[P.Unit] {
    override def encoding(lte: LfTypeEncoding): lte.Out[P.Unit] = lte.primitive.valueUnit
  }

  override implicit val valueBool: LfEncodable[P.Bool] = new LfEncodable[P.Bool] {
    override def encoding(lte: LfTypeEncoding): lte.Out[P.Bool] = lte.primitive.valueBool
  }

  override implicit def valueList[A: LfEncodable]: LfEncodable[P.List[A]] =
    new LfEncodable[P.List[A]] {
      override def encoding(lte: LfTypeEncoding): lte.Out[P.List[A]] =
        lte.primitive.valueList(LfEncodable.encoding[A](lte))
    }

  override implicit def valueContractId[A]: LfEncodable[P.ContractId[A]] =
    new LfEncodable[P.ContractId[A]] {
      override def encoding(lte: LfTypeEncoding): lte.Out[P.ContractId[A]] =
        lte.primitive.valueContractId
    }

  override implicit def valueOptional[A: LfEncodable]: LfEncodable[P.Optional[A]] =
    new LfEncodable[P.Optional[A]] {
      override def encoding(lte: LfTypeEncoding): lte.Out[P.Optional[A]] =
        lte.primitive.valueOptional(LfEncodable.encoding[A](lte))
    }

  override implicit def valueTextMap[A: LfEncodable]: LfEncodable[P.TextMap[A]] =
    new LfEncodable[P.TextMap[A]] {
      override def encoding(lte: LfTypeEncoding): lte.Out[P.TextMap[A]] =
        lte.primitive.valueTextMap(LfEncodable.encoding[A](lte))
    }

  override implicit def valueGenMap[K: LfEncodable, V: LfEncodable]: LfEncodable[P.GenMap[K, V]] =
    new LfEncodable[P.GenMap[K, V]] {
      override def encoding(lte: LfTypeEncoding): lte.Out[P.GenMap[K, V]] =
        lte.primitive.valueGenMap(LfEncodable.encoding[K](lte), LfEncodable.encoding[V](lte))
    }

  trait ViaFields[T] {

    /** The fields of `T`'s associated record type, each in some
      * type constructor `C`.
      *
      * @note Lowercase because `T.View` is a valid Daml type name,
      *       and this trait describes codegen output.
      */
    type view[C[_]] <: RecordView[C, view]

    def fieldEncoding(lte: LfTypeEncoding): view[lte.Field]

    def encoding(lte: LfTypeEncoding)(view: view[lte.Field]): lte.Out[T]
  }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy