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

com.zendesk.scalaflow.sugar.CaseClassOps.scala Maven / Gradle / Ivy

The newest version!
// auto-generated by sbt-boilerplate
package com.zendesk.scalaflow.sugar

import com.google.cloud.dataflow.sdk.Pipeline
import com.google.cloud.dataflow.sdk.coders.{Coder, DelegateCoder, VoidCoder}
import com.google.cloud.dataflow.sdk.coders.DelegateCoder.CodingFunction

import scala.reflect.ClassTag
import scala.reflect.runtime.universe._

import com.zendesk.scalaflow.coders._

trait CaseClassOps {

  def caseClassCoder[P <: Product](construct: () => P): Coder[P] = {
    val intermediate = VoidCoder.of()
    val to = new CodingFunction[P, Void] {
      override def apply(p: P) = null
    }
    val from = new CodingFunction[Void, P] {
      override def apply(v: Void) = construct()
    }

    DelegateCoder.of(intermediate, to, from)
  }

  def caseClassCoder[V1: Coder, P <: Product](construct: (V1) => P): Coder[P] = {
    val intermediate = implicitly[Coder[V1]]
    val to = new CodingFunction[P, V1] {
      override def apply(p: P) = p.productElement(0).asInstanceOf[V1]
    }
    val from = new CodingFunction[V1, P] {
      override def apply(v: V1) = construct(v)
    }

    DelegateCoder.of(intermediate, to, from)
  }

  def caseClassCoder[V1: Coder, V2: Coder, P <: Product](construct: (V1, V2) => P): Coder[P] = {
    val intermediate = new Tuple2Coder[V1, V2]()
    val to = new CodingFunction[P, Tuple2[V1, V2]] {
      override def apply(p: P) = {
        val v1 = p.productElement(0).asInstanceOf[V1]
        val v2 = p.productElement(1).asInstanceOf[V2]
        Tuple2(v1, v2)
      }
    }
    val from = new CodingFunction[Tuple2[V1, V2], P] {
      override def apply(t: Tuple2[V1, V2]) = {
        construct(t._1, t._2)
      }
    }

    DelegateCoder.of(intermediate, to, from)
  }

  def caseClassCoder[V1: Coder, V2: Coder, V3: Coder, P <: Product](construct: (V1, V2, V3) => P): Coder[P] = {
    val intermediate = new Tuple3Coder[V1, V2, V3]()
    val to = new CodingFunction[P, Tuple3[V1, V2, V3]] {
      override def apply(p: P) = {
        val v1 = p.productElement(0).asInstanceOf[V1]
        val v2 = p.productElement(1).asInstanceOf[V2]
        val v3 = p.productElement(2).asInstanceOf[V3]
        Tuple3(v1, v2, v3)
      }
    }
    val from = new CodingFunction[Tuple3[V1, V2, V3], P] {
      override def apply(t: Tuple3[V1, V2, V3]) = {
        construct(t._1, t._2, t._3)
      }
    }

    DelegateCoder.of(intermediate, to, from)
  }

  def caseClassCoder[V1: Coder, V2: Coder, V3: Coder, V4: Coder, P <: Product](construct: (V1, V2, V3, V4) => P): Coder[P] = {
    val intermediate = new Tuple4Coder[V1, V2, V3, V4]()
    val to = new CodingFunction[P, Tuple4[V1, V2, V3, V4]] {
      override def apply(p: P) = {
        val v1 = p.productElement(0).asInstanceOf[V1]
        val v2 = p.productElement(1).asInstanceOf[V2]
        val v3 = p.productElement(2).asInstanceOf[V3]
        val v4 = p.productElement(3).asInstanceOf[V4]
        Tuple4(v1, v2, v3, v4)
      }
    }
    val from = new CodingFunction[Tuple4[V1, V2, V3, V4], P] {
      override def apply(t: Tuple4[V1, V2, V3, V4]) = {
        construct(t._1, t._2, t._3, t._4)
      }
    }

    DelegateCoder.of(intermediate, to, from)
  }

  def caseClassCoder[V1: Coder, V2: Coder, V3: Coder, V4: Coder, V5: Coder, P <: Product](construct: (V1, V2, V3, V4, V5) => P): Coder[P] = {
    val intermediate = new Tuple5Coder[V1, V2, V3, V4, V5]()
    val to = new CodingFunction[P, Tuple5[V1, V2, V3, V4, V5]] {
      override def apply(p: P) = {
        val v1 = p.productElement(0).asInstanceOf[V1]
        val v2 = p.productElement(1).asInstanceOf[V2]
        val v3 = p.productElement(2).asInstanceOf[V3]
        val v4 = p.productElement(3).asInstanceOf[V4]
        val v5 = p.productElement(4).asInstanceOf[V5]
        Tuple5(v1, v2, v3, v4, v5)
      }
    }
    val from = new CodingFunction[Tuple5[V1, V2, V3, V4, V5], P] {
      override def apply(t: Tuple5[V1, V2, V3, V4, V5]) = {
        construct(t._1, t._2, t._3, t._4, t._5)
      }
    }

    DelegateCoder.of(intermediate, to, from)
  }

  def caseClassCoder[V1: Coder, V2: Coder, V3: Coder, V4: Coder, V5: Coder, V6: Coder, P <: Product](construct: (V1, V2, V3, V4, V5, V6) => P): Coder[P] = {
    val intermediate = new Tuple6Coder[V1, V2, V3, V4, V5, V6]()
    val to = new CodingFunction[P, Tuple6[V1, V2, V3, V4, V5, V6]] {
      override def apply(p: P) = {
        val v1 = p.productElement(0).asInstanceOf[V1]
        val v2 = p.productElement(1).asInstanceOf[V2]
        val v3 = p.productElement(2).asInstanceOf[V3]
        val v4 = p.productElement(3).asInstanceOf[V4]
        val v5 = p.productElement(4).asInstanceOf[V5]
        val v6 = p.productElement(5).asInstanceOf[V6]
        Tuple6(v1, v2, v3, v4, v5, v6)
      }
    }
    val from = new CodingFunction[Tuple6[V1, V2, V3, V4, V5, V6], P] {
      override def apply(t: Tuple6[V1, V2, V3, V4, V5, V6]) = {
        construct(t._1, t._2, t._3, t._4, t._5, t._6)
      }
    }

    DelegateCoder.of(intermediate, to, from)
  }

  def caseClassCoder[V1: Coder, V2: Coder, V3: Coder, V4: Coder, V5: Coder, V6: Coder, V7: Coder, P <: Product](construct: (V1, V2, V3, V4, V5, V6, V7) => P): Coder[P] = {
    val intermediate = new Tuple7Coder[V1, V2, V3, V4, V5, V6, V7]()
    val to = new CodingFunction[P, Tuple7[V1, V2, V3, V4, V5, V6, V7]] {
      override def apply(p: P) = {
        val v1 = p.productElement(0).asInstanceOf[V1]
        val v2 = p.productElement(1).asInstanceOf[V2]
        val v3 = p.productElement(2).asInstanceOf[V3]
        val v4 = p.productElement(3).asInstanceOf[V4]
        val v5 = p.productElement(4).asInstanceOf[V5]
        val v6 = p.productElement(5).asInstanceOf[V6]
        val v7 = p.productElement(6).asInstanceOf[V7]
        Tuple7(v1, v2, v3, v4, v5, v6, v7)
      }
    }
    val from = new CodingFunction[Tuple7[V1, V2, V3, V4, V5, V6, V7], P] {
      override def apply(t: Tuple7[V1, V2, V3, V4, V5, V6, V7]) = {
        construct(t._1, t._2, t._3, t._4, t._5, t._6, t._7)
      }
    }

    DelegateCoder.of(intermediate, to, from)
  }

  def caseClassCoder[V1: Coder, V2: Coder, V3: Coder, V4: Coder, V5: Coder, V6: Coder, V7: Coder, V8: Coder, P <: Product](construct: (V1, V2, V3, V4, V5, V6, V7, V8) => P): Coder[P] = {
    val intermediate = new Tuple8Coder[V1, V2, V3, V4, V5, V6, V7, V8]()
    val to = new CodingFunction[P, Tuple8[V1, V2, V3, V4, V5, V6, V7, V8]] {
      override def apply(p: P) = {
        val v1 = p.productElement(0).asInstanceOf[V1]
        val v2 = p.productElement(1).asInstanceOf[V2]
        val v3 = p.productElement(2).asInstanceOf[V3]
        val v4 = p.productElement(3).asInstanceOf[V4]
        val v5 = p.productElement(4).asInstanceOf[V5]
        val v6 = p.productElement(5).asInstanceOf[V6]
        val v7 = p.productElement(6).asInstanceOf[V7]
        val v8 = p.productElement(7).asInstanceOf[V8]
        Tuple8(v1, v2, v3, v4, v5, v6, v7, v8)
      }
    }
    val from = new CodingFunction[Tuple8[V1, V2, V3, V4, V5, V6, V7, V8], P] {
      override def apply(t: Tuple8[V1, V2, V3, V4, V5, V6, V7, V8]) = {
        construct(t._1, t._2, t._3, t._4, t._5, t._6, t._7, t._8)
      }
    }

    DelegateCoder.of(intermediate, to, from)
  }

  def caseClassCoder[V1: Coder, V2: Coder, V3: Coder, V4: Coder, V5: Coder, V6: Coder, V7: Coder, V8: Coder, V9: Coder, P <: Product](construct: (V1, V2, V3, V4, V5, V6, V7, V8, V9) => P): Coder[P] = {
    val intermediate = new Tuple9Coder[V1, V2, V3, V4, V5, V6, V7, V8, V9]()
    val to = new CodingFunction[P, Tuple9[V1, V2, V3, V4, V5, V6, V7, V8, V9]] {
      override def apply(p: P) = {
        val v1 = p.productElement(0).asInstanceOf[V1]
        val v2 = p.productElement(1).asInstanceOf[V2]
        val v3 = p.productElement(2).asInstanceOf[V3]
        val v4 = p.productElement(3).asInstanceOf[V4]
        val v5 = p.productElement(4).asInstanceOf[V5]
        val v6 = p.productElement(5).asInstanceOf[V6]
        val v7 = p.productElement(6).asInstanceOf[V7]
        val v8 = p.productElement(7).asInstanceOf[V8]
        val v9 = p.productElement(8).asInstanceOf[V9]
        Tuple9(v1, v2, v3, v4, v5, v6, v7, v8, v9)
      }
    }
    val from = new CodingFunction[Tuple9[V1, V2, V3, V4, V5, V6, V7, V8, V9], P] {
      override def apply(t: Tuple9[V1, V2, V3, V4, V5, V6, V7, V8, V9]) = {
        construct(t._1, t._2, t._3, t._4, t._5, t._6, t._7, t._8, t._9)
      }
    }

    DelegateCoder.of(intermediate, to, from)
  }

  def caseClassCoder[V1: Coder, V2: Coder, V3: Coder, V4: Coder, V5: Coder, V6: Coder, V7: Coder, V8: Coder, V9: Coder, V10: Coder, P <: Product](construct: (V1, V2, V3, V4, V5, V6, V7, V8, V9, V10) => P): Coder[P] = {
    val intermediate = new Tuple10Coder[V1, V2, V3, V4, V5, V6, V7, V8, V9, V10]()
    val to = new CodingFunction[P, Tuple10[V1, V2, V3, V4, V5, V6, V7, V8, V9, V10]] {
      override def apply(p: P) = {
        val v1 = p.productElement(0).asInstanceOf[V1]
        val v2 = p.productElement(1).asInstanceOf[V2]
        val v3 = p.productElement(2).asInstanceOf[V3]
        val v4 = p.productElement(3).asInstanceOf[V4]
        val v5 = p.productElement(4).asInstanceOf[V5]
        val v6 = p.productElement(5).asInstanceOf[V6]
        val v7 = p.productElement(6).asInstanceOf[V7]
        val v8 = p.productElement(7).asInstanceOf[V8]
        val v9 = p.productElement(8).asInstanceOf[V9]
        val v10 = p.productElement(9).asInstanceOf[V10]
        Tuple10(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10)
      }
    }
    val from = new CodingFunction[Tuple10[V1, V2, V3, V4, V5, V6, V7, V8, V9, V10], P] {
      override def apply(t: Tuple10[V1, V2, V3, V4, V5, V6, V7, V8, V9, V10]) = {
        construct(t._1, t._2, t._3, t._4, t._5, t._6, t._7, t._8, t._9, t._10)
      }
    }

    DelegateCoder.of(intermediate, to, from)
  }

  def caseClassCoder[V1: Coder, V2: Coder, V3: Coder, V4: Coder, V5: Coder, V6: Coder, V7: Coder, V8: Coder, V9: Coder, V10: Coder, V11: Coder, P <: Product](construct: (V1, V2, V3, V4, V5, V6, V7, V8, V9, V10, V11) => P): Coder[P] = {
    val intermediate = new Tuple11Coder[V1, V2, V3, V4, V5, V6, V7, V8, V9, V10, V11]()
    val to = new CodingFunction[P, Tuple11[V1, V2, V3, V4, V5, V6, V7, V8, V9, V10, V11]] {
      override def apply(p: P) = {
        val v1 = p.productElement(0).asInstanceOf[V1]
        val v2 = p.productElement(1).asInstanceOf[V2]
        val v3 = p.productElement(2).asInstanceOf[V3]
        val v4 = p.productElement(3).asInstanceOf[V4]
        val v5 = p.productElement(4).asInstanceOf[V5]
        val v6 = p.productElement(5).asInstanceOf[V6]
        val v7 = p.productElement(6).asInstanceOf[V7]
        val v8 = p.productElement(7).asInstanceOf[V8]
        val v9 = p.productElement(8).asInstanceOf[V9]
        val v10 = p.productElement(9).asInstanceOf[V10]
        val v11 = p.productElement(10).asInstanceOf[V11]
        Tuple11(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11)
      }
    }
    val from = new CodingFunction[Tuple11[V1, V2, V3, V4, V5, V6, V7, V8, V9, V10, V11], P] {
      override def apply(t: Tuple11[V1, V2, V3, V4, V5, V6, V7, V8, V9, V10, V11]) = {
        construct(t._1, t._2, t._3, t._4, t._5, t._6, t._7, t._8, t._9, t._10, t._11)
      }
    }

    DelegateCoder.of(intermediate, to, from)
  }

  def caseClassCoder[V1: Coder, V2: Coder, V3: Coder, V4: Coder, V5: Coder, V6: Coder, V7: Coder, V8: Coder, V9: Coder, V10: Coder, V11: Coder, V12: Coder, P <: Product](construct: (V1, V2, V3, V4, V5, V6, V7, V8, V9, V10, V11, V12) => P): Coder[P] = {
    val intermediate = new Tuple12Coder[V1, V2, V3, V4, V5, V6, V7, V8, V9, V10, V11, V12]()
    val to = new CodingFunction[P, Tuple12[V1, V2, V3, V4, V5, V6, V7, V8, V9, V10, V11, V12]] {
      override def apply(p: P) = {
        val v1 = p.productElement(0).asInstanceOf[V1]
        val v2 = p.productElement(1).asInstanceOf[V2]
        val v3 = p.productElement(2).asInstanceOf[V3]
        val v4 = p.productElement(3).asInstanceOf[V4]
        val v5 = p.productElement(4).asInstanceOf[V5]
        val v6 = p.productElement(5).asInstanceOf[V6]
        val v7 = p.productElement(6).asInstanceOf[V7]
        val v8 = p.productElement(7).asInstanceOf[V8]
        val v9 = p.productElement(8).asInstanceOf[V9]
        val v10 = p.productElement(9).asInstanceOf[V10]
        val v11 = p.productElement(10).asInstanceOf[V11]
        val v12 = p.productElement(11).asInstanceOf[V12]
        Tuple12(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12)
      }
    }
    val from = new CodingFunction[Tuple12[V1, V2, V3, V4, V5, V6, V7, V8, V9, V10, V11, V12], P] {
      override def apply(t: Tuple12[V1, V2, V3, V4, V5, V6, V7, V8, V9, V10, V11, V12]) = {
        construct(t._1, t._2, t._3, t._4, t._5, t._6, t._7, t._8, t._9, t._10, t._11, t._12)
      }
    }

    DelegateCoder.of(intermediate, to, from)
  }

  def caseClassCoder[V1: Coder, V2: Coder, V3: Coder, V4: Coder, V5: Coder, V6: Coder, V7: Coder, V8: Coder, V9: Coder, V10: Coder, V11: Coder, V12: Coder, V13: Coder, P <: Product](construct: (V1, V2, V3, V4, V5, V6, V7, V8, V9, V10, V11, V12, V13) => P): Coder[P] = {
    val intermediate = new Tuple13Coder[V1, V2, V3, V4, V5, V6, V7, V8, V9, V10, V11, V12, V13]()
    val to = new CodingFunction[P, Tuple13[V1, V2, V3, V4, V5, V6, V7, V8, V9, V10, V11, V12, V13]] {
      override def apply(p: P) = {
        val v1 = p.productElement(0).asInstanceOf[V1]
        val v2 = p.productElement(1).asInstanceOf[V2]
        val v3 = p.productElement(2).asInstanceOf[V3]
        val v4 = p.productElement(3).asInstanceOf[V4]
        val v5 = p.productElement(4).asInstanceOf[V5]
        val v6 = p.productElement(5).asInstanceOf[V6]
        val v7 = p.productElement(6).asInstanceOf[V7]
        val v8 = p.productElement(7).asInstanceOf[V8]
        val v9 = p.productElement(8).asInstanceOf[V9]
        val v10 = p.productElement(9).asInstanceOf[V10]
        val v11 = p.productElement(10).asInstanceOf[V11]
        val v12 = p.productElement(11).asInstanceOf[V12]
        val v13 = p.productElement(12).asInstanceOf[V13]
        Tuple13(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13)
      }
    }
    val from = new CodingFunction[Tuple13[V1, V2, V3, V4, V5, V6, V7, V8, V9, V10, V11, V12, V13], P] {
      override def apply(t: Tuple13[V1, V2, V3, V4, V5, V6, V7, V8, V9, V10, V11, V12, V13]) = {
        construct(t._1, t._2, t._3, t._4, t._5, t._6, t._7, t._8, t._9, t._10, t._11, t._12, t._13)
      }
    }

    DelegateCoder.of(intermediate, to, from)
  }

  def caseClassCoder[V1: Coder, V2: Coder, V3: Coder, V4: Coder, V5: Coder, V6: Coder, V7: Coder, V8: Coder, V9: Coder, V10: Coder, V11: Coder, V12: Coder, V13: Coder, V14: Coder, P <: Product](construct: (V1, V2, V3, V4, V5, V6, V7, V8, V9, V10, V11, V12, V13, V14) => P): Coder[P] = {
    val intermediate = new Tuple14Coder[V1, V2, V3, V4, V5, V6, V7, V8, V9, V10, V11, V12, V13, V14]()
    val to = new CodingFunction[P, Tuple14[V1, V2, V3, V4, V5, V6, V7, V8, V9, V10, V11, V12, V13, V14]] {
      override def apply(p: P) = {
        val v1 = p.productElement(0).asInstanceOf[V1]
        val v2 = p.productElement(1).asInstanceOf[V2]
        val v3 = p.productElement(2).asInstanceOf[V3]
        val v4 = p.productElement(3).asInstanceOf[V4]
        val v5 = p.productElement(4).asInstanceOf[V5]
        val v6 = p.productElement(5).asInstanceOf[V6]
        val v7 = p.productElement(6).asInstanceOf[V7]
        val v8 = p.productElement(7).asInstanceOf[V8]
        val v9 = p.productElement(8).asInstanceOf[V9]
        val v10 = p.productElement(9).asInstanceOf[V10]
        val v11 = p.productElement(10).asInstanceOf[V11]
        val v12 = p.productElement(11).asInstanceOf[V12]
        val v13 = p.productElement(12).asInstanceOf[V13]
        val v14 = p.productElement(13).asInstanceOf[V14]
        Tuple14(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14)
      }
    }
    val from = new CodingFunction[Tuple14[V1, V2, V3, V4, V5, V6, V7, V8, V9, V10, V11, V12, V13, V14], P] {
      override def apply(t: Tuple14[V1, V2, V3, V4, V5, V6, V7, V8, V9, V10, V11, V12, V13, V14]) = {
        construct(t._1, t._2, t._3, t._4, t._5, t._6, t._7, t._8, t._9, t._10, t._11, t._12, t._13, t._14)
      }
    }

    DelegateCoder.of(intermediate, to, from)
  }

  def caseClassCoder[V1: Coder, V2: Coder, V3: Coder, V4: Coder, V5: Coder, V6: Coder, V7: Coder, V8: Coder, V9: Coder, V10: Coder, V11: Coder, V12: Coder, V13: Coder, V14: Coder, V15: Coder, P <: Product](construct: (V1, V2, V3, V4, V5, V6, V7, V8, V9, V10, V11, V12, V13, V14, V15) => P): Coder[P] = {
    val intermediate = new Tuple15Coder[V1, V2, V3, V4, V5, V6, V7, V8, V9, V10, V11, V12, V13, V14, V15]()
    val to = new CodingFunction[P, Tuple15[V1, V2, V3, V4, V5, V6, V7, V8, V9, V10, V11, V12, V13, V14, V15]] {
      override def apply(p: P) = {
        val v1 = p.productElement(0).asInstanceOf[V1]
        val v2 = p.productElement(1).asInstanceOf[V2]
        val v3 = p.productElement(2).asInstanceOf[V3]
        val v4 = p.productElement(3).asInstanceOf[V4]
        val v5 = p.productElement(4).asInstanceOf[V5]
        val v6 = p.productElement(5).asInstanceOf[V6]
        val v7 = p.productElement(6).asInstanceOf[V7]
        val v8 = p.productElement(7).asInstanceOf[V8]
        val v9 = p.productElement(8).asInstanceOf[V9]
        val v10 = p.productElement(9).asInstanceOf[V10]
        val v11 = p.productElement(10).asInstanceOf[V11]
        val v12 = p.productElement(11).asInstanceOf[V12]
        val v13 = p.productElement(12).asInstanceOf[V13]
        val v14 = p.productElement(13).asInstanceOf[V14]
        val v15 = p.productElement(14).asInstanceOf[V15]
        Tuple15(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15)
      }
    }
    val from = new CodingFunction[Tuple15[V1, V2, V3, V4, V5, V6, V7, V8, V9, V10, V11, V12, V13, V14, V15], P] {
      override def apply(t: Tuple15[V1, V2, V3, V4, V5, V6, V7, V8, V9, V10, V11, V12, V13, V14, V15]) = {
        construct(t._1, t._2, t._3, t._4, t._5, t._6, t._7, t._8, t._9, t._10, t._11, t._12, t._13, t._14, t._15)
      }
    }

    DelegateCoder.of(intermediate, to, from)
  }

  def caseClassCoder[V1: Coder, V2: Coder, V3: Coder, V4: Coder, V5: Coder, V6: Coder, V7: Coder, V8: Coder, V9: Coder, V10: Coder, V11: Coder, V12: Coder, V13: Coder, V14: Coder, V15: Coder, V16: Coder, P <: Product](construct: (V1, V2, V3, V4, V5, V6, V7, V8, V9, V10, V11, V12, V13, V14, V15, V16) => P): Coder[P] = {
    val intermediate = new Tuple16Coder[V1, V2, V3, V4, V5, V6, V7, V8, V9, V10, V11, V12, V13, V14, V15, V16]()
    val to = new CodingFunction[P, Tuple16[V1, V2, V3, V4, V5, V6, V7, V8, V9, V10, V11, V12, V13, V14, V15, V16]] {
      override def apply(p: P) = {
        val v1 = p.productElement(0).asInstanceOf[V1]
        val v2 = p.productElement(1).asInstanceOf[V2]
        val v3 = p.productElement(2).asInstanceOf[V3]
        val v4 = p.productElement(3).asInstanceOf[V4]
        val v5 = p.productElement(4).asInstanceOf[V5]
        val v6 = p.productElement(5).asInstanceOf[V6]
        val v7 = p.productElement(6).asInstanceOf[V7]
        val v8 = p.productElement(7).asInstanceOf[V8]
        val v9 = p.productElement(8).asInstanceOf[V9]
        val v10 = p.productElement(9).asInstanceOf[V10]
        val v11 = p.productElement(10).asInstanceOf[V11]
        val v12 = p.productElement(11).asInstanceOf[V12]
        val v13 = p.productElement(12).asInstanceOf[V13]
        val v14 = p.productElement(13).asInstanceOf[V14]
        val v15 = p.productElement(14).asInstanceOf[V15]
        val v16 = p.productElement(15).asInstanceOf[V16]
        Tuple16(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16)
      }
    }
    val from = new CodingFunction[Tuple16[V1, V2, V3, V4, V5, V6, V7, V8, V9, V10, V11, V12, V13, V14, V15, V16], P] {
      override def apply(t: Tuple16[V1, V2, V3, V4, V5, V6, V7, V8, V9, V10, V11, V12, V13, V14, V15, V16]) = {
        construct(t._1, t._2, t._3, t._4, t._5, t._6, t._7, t._8, t._9, t._10, t._11, t._12, t._13, t._14, t._15, t._16)
      }
    }

    DelegateCoder.of(intermediate, to, from)
  }

  def caseClassCoder[V1: Coder, V2: Coder, V3: Coder, V4: Coder, V5: Coder, V6: Coder, V7: Coder, V8: Coder, V9: Coder, V10: Coder, V11: Coder, V12: Coder, V13: Coder, V14: Coder, V15: Coder, V16: Coder, V17: Coder, P <: Product](construct: (V1, V2, V3, V4, V5, V6, V7, V8, V9, V10, V11, V12, V13, V14, V15, V16, V17) => P): Coder[P] = {
    val intermediate = new Tuple17Coder[V1, V2, V3, V4, V5, V6, V7, V8, V9, V10, V11, V12, V13, V14, V15, V16, V17]()
    val to = new CodingFunction[P, Tuple17[V1, V2, V3, V4, V5, V6, V7, V8, V9, V10, V11, V12, V13, V14, V15, V16, V17]] {
      override def apply(p: P) = {
        val v1 = p.productElement(0).asInstanceOf[V1]
        val v2 = p.productElement(1).asInstanceOf[V2]
        val v3 = p.productElement(2).asInstanceOf[V3]
        val v4 = p.productElement(3).asInstanceOf[V4]
        val v5 = p.productElement(4).asInstanceOf[V5]
        val v6 = p.productElement(5).asInstanceOf[V6]
        val v7 = p.productElement(6).asInstanceOf[V7]
        val v8 = p.productElement(7).asInstanceOf[V8]
        val v9 = p.productElement(8).asInstanceOf[V9]
        val v10 = p.productElement(9).asInstanceOf[V10]
        val v11 = p.productElement(10).asInstanceOf[V11]
        val v12 = p.productElement(11).asInstanceOf[V12]
        val v13 = p.productElement(12).asInstanceOf[V13]
        val v14 = p.productElement(13).asInstanceOf[V14]
        val v15 = p.productElement(14).asInstanceOf[V15]
        val v16 = p.productElement(15).asInstanceOf[V16]
        val v17 = p.productElement(16).asInstanceOf[V17]
        Tuple17(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17)
      }
    }
    val from = new CodingFunction[Tuple17[V1, V2, V3, V4, V5, V6, V7, V8, V9, V10, V11, V12, V13, V14, V15, V16, V17], P] {
      override def apply(t: Tuple17[V1, V2, V3, V4, V5, V6, V7, V8, V9, V10, V11, V12, V13, V14, V15, V16, V17]) = {
        construct(t._1, t._2, t._3, t._4, t._5, t._6, t._7, t._8, t._9, t._10, t._11, t._12, t._13, t._14, t._15, t._16, t._17)
      }
    }

    DelegateCoder.of(intermediate, to, from)
  }

  def caseClassCoder[V1: Coder, V2: Coder, V3: Coder, V4: Coder, V5: Coder, V6: Coder, V7: Coder, V8: Coder, V9: Coder, V10: Coder, V11: Coder, V12: Coder, V13: Coder, V14: Coder, V15: Coder, V16: Coder, V17: Coder, V18: Coder, P <: Product](construct: (V1, V2, V3, V4, V5, V6, V7, V8, V9, V10, V11, V12, V13, V14, V15, V16, V17, V18) => P): Coder[P] = {
    val intermediate = new Tuple18Coder[V1, V2, V3, V4, V5, V6, V7, V8, V9, V10, V11, V12, V13, V14, V15, V16, V17, V18]()
    val to = new CodingFunction[P, Tuple18[V1, V2, V3, V4, V5, V6, V7, V8, V9, V10, V11, V12, V13, V14, V15, V16, V17, V18]] {
      override def apply(p: P) = {
        val v1 = p.productElement(0).asInstanceOf[V1]
        val v2 = p.productElement(1).asInstanceOf[V2]
        val v3 = p.productElement(2).asInstanceOf[V3]
        val v4 = p.productElement(3).asInstanceOf[V4]
        val v5 = p.productElement(4).asInstanceOf[V5]
        val v6 = p.productElement(5).asInstanceOf[V6]
        val v7 = p.productElement(6).asInstanceOf[V7]
        val v8 = p.productElement(7).asInstanceOf[V8]
        val v9 = p.productElement(8).asInstanceOf[V9]
        val v10 = p.productElement(9).asInstanceOf[V10]
        val v11 = p.productElement(10).asInstanceOf[V11]
        val v12 = p.productElement(11).asInstanceOf[V12]
        val v13 = p.productElement(12).asInstanceOf[V13]
        val v14 = p.productElement(13).asInstanceOf[V14]
        val v15 = p.productElement(14).asInstanceOf[V15]
        val v16 = p.productElement(15).asInstanceOf[V16]
        val v17 = p.productElement(16).asInstanceOf[V17]
        val v18 = p.productElement(17).asInstanceOf[V18]
        Tuple18(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18)
      }
    }
    val from = new CodingFunction[Tuple18[V1, V2, V3, V4, V5, V6, V7, V8, V9, V10, V11, V12, V13, V14, V15, V16, V17, V18], P] {
      override def apply(t: Tuple18[V1, V2, V3, V4, V5, V6, V7, V8, V9, V10, V11, V12, V13, V14, V15, V16, V17, V18]) = {
        construct(t._1, t._2, t._3, t._4, t._5, t._6, t._7, t._8, t._9, t._10, t._11, t._12, t._13, t._14, t._15, t._16, t._17, t._18)
      }
    }

    DelegateCoder.of(intermediate, to, from)
  }

  def caseClassCoder[V1: Coder, V2: Coder, V3: Coder, V4: Coder, V5: Coder, V6: Coder, V7: Coder, V8: Coder, V9: Coder, V10: Coder, V11: Coder, V12: Coder, V13: Coder, V14: Coder, V15: Coder, V16: Coder, V17: Coder, V18: Coder, V19: Coder, P <: Product](construct: (V1, V2, V3, V4, V5, V6, V7, V8, V9, V10, V11, V12, V13, V14, V15, V16, V17, V18, V19) => P): Coder[P] = {
    val intermediate = new Tuple19Coder[V1, V2, V3, V4, V5, V6, V7, V8, V9, V10, V11, V12, V13, V14, V15, V16, V17, V18, V19]()
    val to = new CodingFunction[P, Tuple19[V1, V2, V3, V4, V5, V6, V7, V8, V9, V10, V11, V12, V13, V14, V15, V16, V17, V18, V19]] {
      override def apply(p: P) = {
        val v1 = p.productElement(0).asInstanceOf[V1]
        val v2 = p.productElement(1).asInstanceOf[V2]
        val v3 = p.productElement(2).asInstanceOf[V3]
        val v4 = p.productElement(3).asInstanceOf[V4]
        val v5 = p.productElement(4).asInstanceOf[V5]
        val v6 = p.productElement(5).asInstanceOf[V6]
        val v7 = p.productElement(6).asInstanceOf[V7]
        val v8 = p.productElement(7).asInstanceOf[V8]
        val v9 = p.productElement(8).asInstanceOf[V9]
        val v10 = p.productElement(9).asInstanceOf[V10]
        val v11 = p.productElement(10).asInstanceOf[V11]
        val v12 = p.productElement(11).asInstanceOf[V12]
        val v13 = p.productElement(12).asInstanceOf[V13]
        val v14 = p.productElement(13).asInstanceOf[V14]
        val v15 = p.productElement(14).asInstanceOf[V15]
        val v16 = p.productElement(15).asInstanceOf[V16]
        val v17 = p.productElement(16).asInstanceOf[V17]
        val v18 = p.productElement(17).asInstanceOf[V18]
        val v19 = p.productElement(18).asInstanceOf[V19]
        Tuple19(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19)
      }
    }
    val from = new CodingFunction[Tuple19[V1, V2, V3, V4, V5, V6, V7, V8, V9, V10, V11, V12, V13, V14, V15, V16, V17, V18, V19], P] {
      override def apply(t: Tuple19[V1, V2, V3, V4, V5, V6, V7, V8, V9, V10, V11, V12, V13, V14, V15, V16, V17, V18, V19]) = {
        construct(t._1, t._2, t._3, t._4, t._5, t._6, t._7, t._8, t._9, t._10, t._11, t._12, t._13, t._14, t._15, t._16, t._17, t._18, t._19)
      }
    }

    DelegateCoder.of(intermediate, to, from)
  }

  def caseClassCoder[V1: Coder, V2: Coder, V3: Coder, V4: Coder, V5: Coder, V6: Coder, V7: Coder, V8: Coder, V9: Coder, V10: Coder, V11: Coder, V12: Coder, V13: Coder, V14: Coder, V15: Coder, V16: Coder, V17: Coder, V18: Coder, V19: Coder, V20: Coder, P <: Product](construct: (V1, V2, V3, V4, V5, V6, V7, V8, V9, V10, V11, V12, V13, V14, V15, V16, V17, V18, V19, V20) => P): Coder[P] = {
    val intermediate = new Tuple20Coder[V1, V2, V3, V4, V5, V6, V7, V8, V9, V10, V11, V12, V13, V14, V15, V16, V17, V18, V19, V20]()
    val to = new CodingFunction[P, Tuple20[V1, V2, V3, V4, V5, V6, V7, V8, V9, V10, V11, V12, V13, V14, V15, V16, V17, V18, V19, V20]] {
      override def apply(p: P) = {
        val v1 = p.productElement(0).asInstanceOf[V1]
        val v2 = p.productElement(1).asInstanceOf[V2]
        val v3 = p.productElement(2).asInstanceOf[V3]
        val v4 = p.productElement(3).asInstanceOf[V4]
        val v5 = p.productElement(4).asInstanceOf[V5]
        val v6 = p.productElement(5).asInstanceOf[V6]
        val v7 = p.productElement(6).asInstanceOf[V7]
        val v8 = p.productElement(7).asInstanceOf[V8]
        val v9 = p.productElement(8).asInstanceOf[V9]
        val v10 = p.productElement(9).asInstanceOf[V10]
        val v11 = p.productElement(10).asInstanceOf[V11]
        val v12 = p.productElement(11).asInstanceOf[V12]
        val v13 = p.productElement(12).asInstanceOf[V13]
        val v14 = p.productElement(13).asInstanceOf[V14]
        val v15 = p.productElement(14).asInstanceOf[V15]
        val v16 = p.productElement(15).asInstanceOf[V16]
        val v17 = p.productElement(16).asInstanceOf[V17]
        val v18 = p.productElement(17).asInstanceOf[V18]
        val v19 = p.productElement(18).asInstanceOf[V19]
        val v20 = p.productElement(19).asInstanceOf[V20]
        Tuple20(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20)
      }
    }
    val from = new CodingFunction[Tuple20[V1, V2, V3, V4, V5, V6, V7, V8, V9, V10, V11, V12, V13, V14, V15, V16, V17, V18, V19, V20], P] {
      override def apply(t: Tuple20[V1, V2, V3, V4, V5, V6, V7, V8, V9, V10, V11, V12, V13, V14, V15, V16, V17, V18, V19, V20]) = {
        construct(t._1, t._2, t._3, t._4, t._5, t._6, t._7, t._8, t._9, t._10, t._11, t._12, t._13, t._14, t._15, t._16, t._17, t._18, t._19, t._20)
      }
    }

    DelegateCoder.of(intermediate, to, from)
  }

  def caseClassCoder[V1: Coder, V2: Coder, V3: Coder, V4: Coder, V5: Coder, V6: Coder, V7: Coder, V8: Coder, V9: Coder, V10: Coder, V11: Coder, V12: Coder, V13: Coder, V14: Coder, V15: Coder, V16: Coder, V17: Coder, V18: Coder, V19: Coder, V20: Coder, V21: Coder, P <: Product](construct: (V1, V2, V3, V4, V5, V6, V7, V8, V9, V10, V11, V12, V13, V14, V15, V16, V17, V18, V19, V20, V21) => P): Coder[P] = {
    val intermediate = new Tuple21Coder[V1, V2, V3, V4, V5, V6, V7, V8, V9, V10, V11, V12, V13, V14, V15, V16, V17, V18, V19, V20, V21]()
    val to = new CodingFunction[P, Tuple21[V1, V2, V3, V4, V5, V6, V7, V8, V9, V10, V11, V12, V13, V14, V15, V16, V17, V18, V19, V20, V21]] {
      override def apply(p: P) = {
        val v1 = p.productElement(0).asInstanceOf[V1]
        val v2 = p.productElement(1).asInstanceOf[V2]
        val v3 = p.productElement(2).asInstanceOf[V3]
        val v4 = p.productElement(3).asInstanceOf[V4]
        val v5 = p.productElement(4).asInstanceOf[V5]
        val v6 = p.productElement(5).asInstanceOf[V6]
        val v7 = p.productElement(6).asInstanceOf[V7]
        val v8 = p.productElement(7).asInstanceOf[V8]
        val v9 = p.productElement(8).asInstanceOf[V9]
        val v10 = p.productElement(9).asInstanceOf[V10]
        val v11 = p.productElement(10).asInstanceOf[V11]
        val v12 = p.productElement(11).asInstanceOf[V12]
        val v13 = p.productElement(12).asInstanceOf[V13]
        val v14 = p.productElement(13).asInstanceOf[V14]
        val v15 = p.productElement(14).asInstanceOf[V15]
        val v16 = p.productElement(15).asInstanceOf[V16]
        val v17 = p.productElement(16).asInstanceOf[V17]
        val v18 = p.productElement(17).asInstanceOf[V18]
        val v19 = p.productElement(18).asInstanceOf[V19]
        val v20 = p.productElement(19).asInstanceOf[V20]
        val v21 = p.productElement(20).asInstanceOf[V21]
        Tuple21(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21)
      }
    }
    val from = new CodingFunction[Tuple21[V1, V2, V3, V4, V5, V6, V7, V8, V9, V10, V11, V12, V13, V14, V15, V16, V17, V18, V19, V20, V21], P] {
      override def apply(t: Tuple21[V1, V2, V3, V4, V5, V6, V7, V8, V9, V10, V11, V12, V13, V14, V15, V16, V17, V18, V19, V20, V21]) = {
        construct(t._1, t._2, t._3, t._4, t._5, t._6, t._7, t._8, t._9, t._10, t._11, t._12, t._13, t._14, t._15, t._16, t._17, t._18, t._19, t._20, t._21)
      }
    }

    DelegateCoder.of(intermediate, to, from)
  }

  def caseClassCoder[V1: Coder, V2: Coder, V3: Coder, V4: Coder, V5: Coder, V6: Coder, V7: Coder, V8: Coder, V9: Coder, V10: Coder, V11: Coder, V12: Coder, V13: Coder, V14: Coder, V15: Coder, V16: Coder, V17: Coder, V18: Coder, V19: Coder, V20: Coder, V21: Coder, V22: Coder, P <: Product](construct: (V1, V2, V3, V4, V5, V6, V7, V8, V9, V10, V11, V12, V13, V14, V15, V16, V17, V18, V19, V20, V21, V22) => P): Coder[P] = {
    val intermediate = new Tuple22Coder[V1, V2, V3, V4, V5, V6, V7, V8, V9, V10, V11, V12, V13, V14, V15, V16, V17, V18, V19, V20, V21, V22]()
    val to = new CodingFunction[P, Tuple22[V1, V2, V3, V4, V5, V6, V7, V8, V9, V10, V11, V12, V13, V14, V15, V16, V17, V18, V19, V20, V21, V22]] {
      override def apply(p: P) = {
        val v1 = p.productElement(0).asInstanceOf[V1]
        val v2 = p.productElement(1).asInstanceOf[V2]
        val v3 = p.productElement(2).asInstanceOf[V3]
        val v4 = p.productElement(3).asInstanceOf[V4]
        val v5 = p.productElement(4).asInstanceOf[V5]
        val v6 = p.productElement(5).asInstanceOf[V6]
        val v7 = p.productElement(6).asInstanceOf[V7]
        val v8 = p.productElement(7).asInstanceOf[V8]
        val v9 = p.productElement(8).asInstanceOf[V9]
        val v10 = p.productElement(9).asInstanceOf[V10]
        val v11 = p.productElement(10).asInstanceOf[V11]
        val v12 = p.productElement(11).asInstanceOf[V12]
        val v13 = p.productElement(12).asInstanceOf[V13]
        val v14 = p.productElement(13).asInstanceOf[V14]
        val v15 = p.productElement(14).asInstanceOf[V15]
        val v16 = p.productElement(15).asInstanceOf[V16]
        val v17 = p.productElement(16).asInstanceOf[V17]
        val v18 = p.productElement(17).asInstanceOf[V18]
        val v19 = p.productElement(18).asInstanceOf[V19]
        val v20 = p.productElement(19).asInstanceOf[V20]
        val v21 = p.productElement(20).asInstanceOf[V21]
        val v22 = p.productElement(21).asInstanceOf[V22]
        Tuple22(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22)
      }
    }
    val from = new CodingFunction[Tuple22[V1, V2, V3, V4, V5, V6, V7, V8, V9, V10, V11, V12, V13, V14, V15, V16, V17, V18, V19, V20, V21, V22], P] {
      override def apply(t: Tuple22[V1, V2, V3, V4, V5, V6, V7, V8, V9, V10, V11, V12, V13, V14, V15, V16, V17, V18, V19, V20, V21, V22]) = {
        construct(t._1, t._2, t._3, t._4, t._5, t._6, t._7, t._8, t._9, t._10, t._11, t._12, t._13, t._14, t._15, t._16, t._17, t._18, t._19, t._20, t._21, t._22)
      }
    }

    DelegateCoder.of(intermediate, to, from)
  }
}

object CaseClassOps extends CaseClassOps




© 2015 - 2025 Weber Informatics LLC | Privacy Policy