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

com.avsystem.commons.redis.TupleSequencers.scala Maven / Gradle / Ivy

package com.avsystem.commons
package redis

import com.avsystem.commons.redis.RedisBatch.Index
import com.avsystem.commons.redis.TupleSequencers.TupleBatch
import com.avsystem.commons.redis.protocol.RedisReply


trait TupleSequencers { this: Sequencer.type =>
  implicit def tuple1Sequencer[O1, R1](implicit
    s1: Sequencer[O1, R1]): Sequencer[Tuple1[O1], Tuple1[R1]] =

    new Sequencer[Tuple1[O1], Tuple1[R1]] {
      def sequence(ops: Tuple1[O1]) = s1.sequence(ops._1).map(Tuple1(_))
    }

  implicit def tuple2Sequencer[O1, O2, R1, R2](implicit
    s1: Sequencer[O1, R1],
    s2: Sequencer[O2, R2]): Sequencer[(O1, O2), (R1, R2)] =

    new Sequencer[(O1, O2), (R1, R2)] {
      def sequence(ops: (O1, O2)) = new TupleBatch((
        s1.sequence(ops._1),
        s2.sequence(ops._2)),
        arr => (
          arr(0).asInstanceOf[R1],
          arr(1).asInstanceOf[R2])
      )
    }

  implicit def tuple3Sequencer[O1, O2, O3, R1, R2, R3](implicit
    s1: Sequencer[O1, R1],
    s2: Sequencer[O2, R2],
    s3: Sequencer[O3, R3]): Sequencer[(O1, O2, O3), (R1, R2, R3)] =

    new Sequencer[(O1, O2, O3), (R1, R2, R3)] {
      def sequence(ops: (O1, O2, O3)) = new TupleBatch((
        s1.sequence(ops._1),
        s2.sequence(ops._2),
        s3.sequence(ops._3)),
        arr => (
          arr(0).asInstanceOf[R1],
          arr(1).asInstanceOf[R2],
          arr(2).asInstanceOf[R3])
      )
    }


  implicit def tuple4Sequencer[O1, O2, O3, O4, R1, R2, R3, R4](implicit
    s1: Sequencer[O1, R1],
    s2: Sequencer[O2, R2],
    s3: Sequencer[O3, R3],
    s4: Sequencer[O4, R4]): Sequencer[(O1, O2, O3, O4), (R1, R2, R3, R4)] =

    new Sequencer[(O1, O2, O3, O4), (R1, R2, R3, R4)] {
      def sequence(ops: (O1, O2, O3, O4)) = new TupleBatch((
        s1.sequence(ops._1),
        s2.sequence(ops._2),
        s3.sequence(ops._3),
        s4.sequence(ops._4)),
        arr => (
          arr(0).asInstanceOf[R1],
          arr(1).asInstanceOf[R2],
          arr(2).asInstanceOf[R3],
          arr(3).asInstanceOf[R4])
      )
    }


  implicit def tuple5Sequencer[O1, O2, O3, O4, O5, R1, R2, R3, R4, R5](implicit
    s1: Sequencer[O1, R1],
    s2: Sequencer[O2, R2],
    s3: Sequencer[O3, R3],
    s4: Sequencer[O4, R4],
    s5: Sequencer[O5, R5]): Sequencer[(O1, O2, O3, O4, O5), (R1, R2, R3, R4, R5)] =

    new Sequencer[(O1, O2, O3, O4, O5), (R1, R2, R3, R4, R5)] {
      def sequence(ops: (O1, O2, O3, O4, O5)) = new TupleBatch((
        s1.sequence(ops._1),
        s2.sequence(ops._2),
        s3.sequence(ops._3),
        s4.sequence(ops._4),
        s5.sequence(ops._5)),
        arr => (
          arr(0).asInstanceOf[R1],
          arr(1).asInstanceOf[R2],
          arr(2).asInstanceOf[R3],
          arr(3).asInstanceOf[R4],
          arr(4).asInstanceOf[R5])
      )
    }


  implicit def tuple6Sequencer[O1, O2, O3, O4, O5, O6, R1, R2, R3, R4, R5, R6](implicit
    s1: Sequencer[O1, R1],
    s2: Sequencer[O2, R2],
    s3: Sequencer[O3, R3],
    s4: Sequencer[O4, R4],
    s5: Sequencer[O5, R5],
    s6: Sequencer[O6, R6]): Sequencer[(O1, O2, O3, O4, O5, O6), (R1, R2, R3, R4, R5, R6)] =

    new Sequencer[(O1, O2, O3, O4, O5, O6), (R1, R2, R3, R4, R5, R6)] {
      def sequence(ops: (O1, O2, O3, O4, O5, O6)) = new TupleBatch((
        s1.sequence(ops._1),
        s2.sequence(ops._2),
        s3.sequence(ops._3),
        s4.sequence(ops._4),
        s5.sequence(ops._5),
        s6.sequence(ops._6)),
        arr => (
          arr(0).asInstanceOf[R1],
          arr(1).asInstanceOf[R2],
          arr(2).asInstanceOf[R3],
          arr(3).asInstanceOf[R4],
          arr(4).asInstanceOf[R5],
          arr(5).asInstanceOf[R6])
      )
    }


  implicit def tuple7Sequencer[O1, O2, O3, O4, O5, O6, O7, R1, R2, R3, R4, R5, R6, R7](implicit
    s1: Sequencer[O1, R1],
    s2: Sequencer[O2, R2],
    s3: Sequencer[O3, R3],
    s4: Sequencer[O4, R4],
    s5: Sequencer[O5, R5],
    s6: Sequencer[O6, R6],
    s7: Sequencer[O7, R7]): Sequencer[(O1, O2, O3, O4, O5, O6, O7), (R1, R2, R3, R4, R5, R6, R7)] =

    new Sequencer[(O1, O2, O3, O4, O5, O6, O7), (R1, R2, R3, R4, R5, R6, R7)] {
      def sequence(ops: (O1, O2, O3, O4, O5, O6, O7)) = new TupleBatch((
        s1.sequence(ops._1),
        s2.sequence(ops._2),
        s3.sequence(ops._3),
        s4.sequence(ops._4),
        s5.sequence(ops._5),
        s6.sequence(ops._6),
        s7.sequence(ops._7)),
        arr => (
          arr(0).asInstanceOf[R1],
          arr(1).asInstanceOf[R2],
          arr(2).asInstanceOf[R3],
          arr(3).asInstanceOf[R4],
          arr(4).asInstanceOf[R5],
          arr(5).asInstanceOf[R6],
          arr(6).asInstanceOf[R7])
      )
    }


  implicit def tuple8Sequencer[O1, O2, O3, O4, O5, O6, O7, O8, R1, R2, R3, R4, R5, R6, R7, R8](implicit
    s1: Sequencer[O1, R1],
    s2: Sequencer[O2, R2],
    s3: Sequencer[O3, R3],
    s4: Sequencer[O4, R4],
    s5: Sequencer[O5, R5],
    s6: Sequencer[O6, R6],
    s7: Sequencer[O7, R7],
    s8: Sequencer[O8, R8]): Sequencer[(O1, O2, O3, O4, O5, O6, O7, O8), (R1, R2, R3, R4, R5, R6, R7, R8)] =

    new Sequencer[(O1, O2, O3, O4, O5, O6, O7, O8), (R1, R2, R3, R4, R5, R6, R7, R8)] {
      def sequence(ops: (O1, O2, O3, O4, O5, O6, O7, O8)) = new TupleBatch((
        s1.sequence(ops._1),
        s2.sequence(ops._2),
        s3.sequence(ops._3),
        s4.sequence(ops._4),
        s5.sequence(ops._5),
        s6.sequence(ops._6),
        s7.sequence(ops._7),
        s8.sequence(ops._8)),
        arr => (
          arr(0).asInstanceOf[R1],
          arr(1).asInstanceOf[R2],
          arr(2).asInstanceOf[R3],
          arr(3).asInstanceOf[R4],
          arr(4).asInstanceOf[R5],
          arr(5).asInstanceOf[R6],
          arr(6).asInstanceOf[R7],
          arr(7).asInstanceOf[R8])
      )
    }


  implicit def tuple9Sequencer[O1, O2, O3, O4, O5, O6, O7, O8, O9, R1, R2, R3, R4, R5, R6, R7, R8, R9](implicit
    s1: Sequencer[O1, R1],
    s2: Sequencer[O2, R2],
    s3: Sequencer[O3, R3],
    s4: Sequencer[O4, R4],
    s5: Sequencer[O5, R5],
    s6: Sequencer[O6, R6],
    s7: Sequencer[O7, R7],
    s8: Sequencer[O8, R8],
    s9: Sequencer[O9, R9]): Sequencer[(O1, O2, O3, O4, O5, O6, O7, O8, O9), (R1, R2, R3, R4, R5, R6, R7, R8, R9)] =

    new Sequencer[(O1, O2, O3, O4, O5, O6, O7, O8, O9), (R1, R2, R3, R4, R5, R6, R7, R8, R9)] {
      def sequence(ops: (O1, O2, O3, O4, O5, O6, O7, O8, O9)) = new TupleBatch((
        s1.sequence(ops._1),
        s2.sequence(ops._2),
        s3.sequence(ops._3),
        s4.sequence(ops._4),
        s5.sequence(ops._5),
        s6.sequence(ops._6),
        s7.sequence(ops._7),
        s8.sequence(ops._8),
        s9.sequence(ops._9)),
        arr => (
          arr(0).asInstanceOf[R1],
          arr(1).asInstanceOf[R2],
          arr(2).asInstanceOf[R3],
          arr(3).asInstanceOf[R4],
          arr(4).asInstanceOf[R5],
          arr(5).asInstanceOf[R6],
          arr(6).asInstanceOf[R7],
          arr(7).asInstanceOf[R8],
          arr(8).asInstanceOf[R9])
      )
    }


  implicit def tuple10Sequencer[O1, O2, O3, O4, O5, O6, O7, O8, O9, O10, R1, R2, R3, R4, R5, R6, R7, R8, R9, R10](implicit
    s1: Sequencer[O1, R1],
    s2: Sequencer[O2, R2],
    s3: Sequencer[O3, R3],
    s4: Sequencer[O4, R4],
    s5: Sequencer[O5, R5],
    s6: Sequencer[O6, R6],
    s7: Sequencer[O7, R7],
    s8: Sequencer[O8, R8],
    s9: Sequencer[O9, R9],
    s10: Sequencer[O10, R10]): Sequencer[(O1, O2, O3, O4, O5, O6, O7, O8, O9, O10), (R1, R2, R3, R4, R5, R6, R7, R8, R9, R10)] =

    new Sequencer[(O1, O2, O3, O4, O5, O6, O7, O8, O9, O10), (R1, R2, R3, R4, R5, R6, R7, R8, R9, R10)] {
      def sequence(ops: (O1, O2, O3, O4, O5, O6, O7, O8, O9, O10)) = new TupleBatch((
        s1.sequence(ops._1),
        s2.sequence(ops._2),
        s3.sequence(ops._3),
        s4.sequence(ops._4),
        s5.sequence(ops._5),
        s6.sequence(ops._6),
        s7.sequence(ops._7),
        s8.sequence(ops._8),
        s9.sequence(ops._9),
        s10.sequence(ops._10)),
        arr => (
          arr(0).asInstanceOf[R1],
          arr(1).asInstanceOf[R2],
          arr(2).asInstanceOf[R3],
          arr(3).asInstanceOf[R4],
          arr(4).asInstanceOf[R5],
          arr(5).asInstanceOf[R6],
          arr(6).asInstanceOf[R7],
          arr(7).asInstanceOf[R8],
          arr(8).asInstanceOf[R9],
          arr(9).asInstanceOf[R10])
      )
    }


  implicit def tuple11Sequencer[O1, O2, O3, O4, O5, O6, O7, O8, O9, O10, O11, R1, R2, R3, R4, R5, R6, R7, R8, R9, R10, R11](implicit
    s1: Sequencer[O1, R1],
    s2: Sequencer[O2, R2],
    s3: Sequencer[O3, R3],
    s4: Sequencer[O4, R4],
    s5: Sequencer[O5, R5],
    s6: Sequencer[O6, R6],
    s7: Sequencer[O7, R7],
    s8: Sequencer[O8, R8],
    s9: Sequencer[O9, R9],
    s10: Sequencer[O10, R10],
    s11: Sequencer[O11, R11]): Sequencer[(O1, O2, O3, O4, O5, O6, O7, O8, O9, O10, O11), (R1, R2, R3, R4, R5, R6, R7, R8, R9, R10, R11)] =

    new Sequencer[(O1, O2, O3, O4, O5, O6, O7, O8, O9, O10, O11), (R1, R2, R3, R4, R5, R6, R7, R8, R9, R10, R11)] {
      def sequence(ops: (O1, O2, O3, O4, O5, O6, O7, O8, O9, O10, O11)) = new TupleBatch((
        s1.sequence(ops._1),
        s2.sequence(ops._2),
        s3.sequence(ops._3),
        s4.sequence(ops._4),
        s5.sequence(ops._5),
        s6.sequence(ops._6),
        s7.sequence(ops._7),
        s8.sequence(ops._8),
        s9.sequence(ops._9),
        s10.sequence(ops._10),
        s11.sequence(ops._11)),
        arr => (
          arr(0).asInstanceOf[R1],
          arr(1).asInstanceOf[R2],
          arr(2).asInstanceOf[R3],
          arr(3).asInstanceOf[R4],
          arr(4).asInstanceOf[R5],
          arr(5).asInstanceOf[R6],
          arr(6).asInstanceOf[R7],
          arr(7).asInstanceOf[R8],
          arr(8).asInstanceOf[R9],
          arr(9).asInstanceOf[R10],
          arr(10).asInstanceOf[R11])
      )
    }


  implicit def tuple12Sequencer[O1, O2, O3, O4, O5, O6, O7, O8, O9, O10, O11, O12, R1, R2, R3, R4, R5, R6, R7, R8, R9, R10, R11, R12](implicit
    s1: Sequencer[O1, R1],
    s2: Sequencer[O2, R2],
    s3: Sequencer[O3, R3],
    s4: Sequencer[O4, R4],
    s5: Sequencer[O5, R5],
    s6: Sequencer[O6, R6],
    s7: Sequencer[O7, R7],
    s8: Sequencer[O8, R8],
    s9: Sequencer[O9, R9],
    s10: Sequencer[O10, R10],
    s11: Sequencer[O11, R11],
    s12: Sequencer[O12, R12]): Sequencer[(O1, O2, O3, O4, O5, O6, O7, O8, O9, O10, O11, O12), (R1, R2, R3, R4, R5, R6, R7, R8, R9, R10, R11, R12)] =

    new Sequencer[(O1, O2, O3, O4, O5, O6, O7, O8, O9, O10, O11, O12), (R1, R2, R3, R4, R5, R6, R7, R8, R9, R10, R11, R12)] {
      def sequence(ops: (O1, O2, O3, O4, O5, O6, O7, O8, O9, O10, O11, O12)) = new TupleBatch((
        s1.sequence(ops._1),
        s2.sequence(ops._2),
        s3.sequence(ops._3),
        s4.sequence(ops._4),
        s5.sequence(ops._5),
        s6.sequence(ops._6),
        s7.sequence(ops._7),
        s8.sequence(ops._8),
        s9.sequence(ops._9),
        s10.sequence(ops._10),
        s11.sequence(ops._11),
        s12.sequence(ops._12)),
        arr => (
          arr(0).asInstanceOf[R1],
          arr(1).asInstanceOf[R2],
          arr(2).asInstanceOf[R3],
          arr(3).asInstanceOf[R4],
          arr(4).asInstanceOf[R5],
          arr(5).asInstanceOf[R6],
          arr(6).asInstanceOf[R7],
          arr(7).asInstanceOf[R8],
          arr(8).asInstanceOf[R9],
          arr(9).asInstanceOf[R10],
          arr(10).asInstanceOf[R11],
          arr(11).asInstanceOf[R12])
      )
    }


  implicit def tuple13Sequencer[O1, O2, O3, O4, O5, O6, O7, O8, O9, O10, O11, O12, O13, R1, R2, R3, R4, R5, R6, R7, R8, R9, R10, R11, R12, R13](implicit
    s1: Sequencer[O1, R1],
    s2: Sequencer[O2, R2],
    s3: Sequencer[O3, R3],
    s4: Sequencer[O4, R4],
    s5: Sequencer[O5, R5],
    s6: Sequencer[O6, R6],
    s7: Sequencer[O7, R7],
    s8: Sequencer[O8, R8],
    s9: Sequencer[O9, R9],
    s10: Sequencer[O10, R10],
    s11: Sequencer[O11, R11],
    s12: Sequencer[O12, R12],
    s13: Sequencer[O13, R13]): Sequencer[(O1, O2, O3, O4, O5, O6, O7, O8, O9, O10, O11, O12, O13), (R1, R2, R3, R4, R5, R6, R7, R8, R9, R10, R11, R12, R13)] =

    new Sequencer[(O1, O2, O3, O4, O5, O6, O7, O8, O9, O10, O11, O12, O13), (R1, R2, R3, R4, R5, R6, R7, R8, R9, R10, R11, R12, R13)] {
      def sequence(ops: (O1, O2, O3, O4, O5, O6, O7, O8, O9, O10, O11, O12, O13)) = new TupleBatch((
        s1.sequence(ops._1),
        s2.sequence(ops._2),
        s3.sequence(ops._3),
        s4.sequence(ops._4),
        s5.sequence(ops._5),
        s6.sequence(ops._6),
        s7.sequence(ops._7),
        s8.sequence(ops._8),
        s9.sequence(ops._9),
        s10.sequence(ops._10),
        s11.sequence(ops._11),
        s12.sequence(ops._12),
        s13.sequence(ops._13)),
        arr => (
          arr(0).asInstanceOf[R1],
          arr(1).asInstanceOf[R2],
          arr(2).asInstanceOf[R3],
          arr(3).asInstanceOf[R4],
          arr(4).asInstanceOf[R5],
          arr(5).asInstanceOf[R6],
          arr(6).asInstanceOf[R7],
          arr(7).asInstanceOf[R8],
          arr(8).asInstanceOf[R9],
          arr(9).asInstanceOf[R10],
          arr(10).asInstanceOf[R11],
          arr(11).asInstanceOf[R12],
          arr(12).asInstanceOf[R13])
      )
    }


  implicit def tuple14Sequencer[O1, O2, O3, O4, O5, O6, O7, O8, O9, O10, O11, O12, O13, O14, R1, R2, R3, R4, R5, R6, R7, R8, R9, R10, R11, R12, R13, R14](implicit
    s1: Sequencer[O1, R1],
    s2: Sequencer[O2, R2],
    s3: Sequencer[O3, R3],
    s4: Sequencer[O4, R4],
    s5: Sequencer[O5, R5],
    s6: Sequencer[O6, R6],
    s7: Sequencer[O7, R7],
    s8: Sequencer[O8, R8],
    s9: Sequencer[O9, R9],
    s10: Sequencer[O10, R10],
    s11: Sequencer[O11, R11],
    s12: Sequencer[O12, R12],
    s13: Sequencer[O13, R13],
    s14: Sequencer[O14, R14]): Sequencer[(O1, O2, O3, O4, O5, O6, O7, O8, O9, O10, O11, O12, O13, O14), (R1, R2, R3, R4, R5, R6, R7, R8, R9, R10, R11, R12, R13, R14)] =

    new Sequencer[(O1, O2, O3, O4, O5, O6, O7, O8, O9, O10, O11, O12, O13, O14), (R1, R2, R3, R4, R5, R6, R7, R8, R9, R10, R11, R12, R13, R14)] {
      def sequence(ops: (O1, O2, O3, O4, O5, O6, O7, O8, O9, O10, O11, O12, O13, O14)) = new TupleBatch((
        s1.sequence(ops._1),
        s2.sequence(ops._2),
        s3.sequence(ops._3),
        s4.sequence(ops._4),
        s5.sequence(ops._5),
        s6.sequence(ops._6),
        s7.sequence(ops._7),
        s8.sequence(ops._8),
        s9.sequence(ops._9),
        s10.sequence(ops._10),
        s11.sequence(ops._11),
        s12.sequence(ops._12),
        s13.sequence(ops._13),
        s14.sequence(ops._14)),
        arr => (
          arr(0).asInstanceOf[R1],
          arr(1).asInstanceOf[R2],
          arr(2).asInstanceOf[R3],
          arr(3).asInstanceOf[R4],
          arr(4).asInstanceOf[R5],
          arr(5).asInstanceOf[R6],
          arr(6).asInstanceOf[R7],
          arr(7).asInstanceOf[R8],
          arr(8).asInstanceOf[R9],
          arr(9).asInstanceOf[R10],
          arr(10).asInstanceOf[R11],
          arr(11).asInstanceOf[R12],
          arr(12).asInstanceOf[R13],
          arr(13).asInstanceOf[R14])
      )
    }


  implicit def tuple15Sequencer[O1, O2, O3, O4, O5, O6, O7, O8, O9, O10, O11, O12, O13, O14, O15, R1, R2, R3, R4, R5, R6, R7, R8, R9, R10, R11, R12, R13, R14, R15](implicit
    s1: Sequencer[O1, R1],
    s2: Sequencer[O2, R2],
    s3: Sequencer[O3, R3],
    s4: Sequencer[O4, R4],
    s5: Sequencer[O5, R5],
    s6: Sequencer[O6, R6],
    s7: Sequencer[O7, R7],
    s8: Sequencer[O8, R8],
    s9: Sequencer[O9, R9],
    s10: Sequencer[O10, R10],
    s11: Sequencer[O11, R11],
    s12: Sequencer[O12, R12],
    s13: Sequencer[O13, R13],
    s14: Sequencer[O14, R14],
    s15: Sequencer[O15, R15]): Sequencer[(O1, O2, O3, O4, O5, O6, O7, O8, O9, O10, O11, O12, O13, O14, O15), (R1, R2, R3, R4, R5, R6, R7, R8, R9, R10, R11, R12, R13, R14, R15)] =

    new Sequencer[(O1, O2, O3, O4, O5, O6, O7, O8, O9, O10, O11, O12, O13, O14, O15), (R1, R2, R3, R4, R5, R6, R7, R8, R9, R10, R11, R12, R13, R14, R15)] {
      def sequence(ops: (O1, O2, O3, O4, O5, O6, O7, O8, O9, O10, O11, O12, O13, O14, O15)) = new TupleBatch((
        s1.sequence(ops._1),
        s2.sequence(ops._2),
        s3.sequence(ops._3),
        s4.sequence(ops._4),
        s5.sequence(ops._5),
        s6.sequence(ops._6),
        s7.sequence(ops._7),
        s8.sequence(ops._8),
        s9.sequence(ops._9),
        s10.sequence(ops._10),
        s11.sequence(ops._11),
        s12.sequence(ops._12),
        s13.sequence(ops._13),
        s14.sequence(ops._14),
        s15.sequence(ops._15)),
        arr => (
          arr(0).asInstanceOf[R1],
          arr(1).asInstanceOf[R2],
          arr(2).asInstanceOf[R3],
          arr(3).asInstanceOf[R4],
          arr(4).asInstanceOf[R5],
          arr(5).asInstanceOf[R6],
          arr(6).asInstanceOf[R7],
          arr(7).asInstanceOf[R8],
          arr(8).asInstanceOf[R9],
          arr(9).asInstanceOf[R10],
          arr(10).asInstanceOf[R11],
          arr(11).asInstanceOf[R12],
          arr(12).asInstanceOf[R13],
          arr(13).asInstanceOf[R14],
          arr(14).asInstanceOf[R15])
      )
    }


  implicit def tuple16Sequencer[O1, O2, O3, O4, O5, O6, O7, O8, O9, O10, O11, O12, O13, O14, O15, O16, R1, R2, R3, R4, R5, R6, R7, R8, R9, R10, R11, R12, R13, R14, R15, R16](implicit
    s1: Sequencer[O1, R1],
    s2: Sequencer[O2, R2],
    s3: Sequencer[O3, R3],
    s4: Sequencer[O4, R4],
    s5: Sequencer[O5, R5],
    s6: Sequencer[O6, R6],
    s7: Sequencer[O7, R7],
    s8: Sequencer[O8, R8],
    s9: Sequencer[O9, R9],
    s10: Sequencer[O10, R10],
    s11: Sequencer[O11, R11],
    s12: Sequencer[O12, R12],
    s13: Sequencer[O13, R13],
    s14: Sequencer[O14, R14],
    s15: Sequencer[O15, R15],
    s16: Sequencer[O16, R16]): Sequencer[(O1, O2, O3, O4, O5, O6, O7, O8, O9, O10, O11, O12, O13, O14, O15, O16), (R1, R2, R3, R4, R5, R6, R7, R8, R9, R10, R11, R12, R13, R14, R15, R16)] =

    new Sequencer[(O1, O2, O3, O4, O5, O6, O7, O8, O9, O10, O11, O12, O13, O14, O15, O16), (R1, R2, R3, R4, R5, R6, R7, R8, R9, R10, R11, R12, R13, R14, R15, R16)] {
      def sequence(ops: (O1, O2, O3, O4, O5, O6, O7, O8, O9, O10, O11, O12, O13, O14, O15, O16)) = new TupleBatch((
        s1.sequence(ops._1),
        s2.sequence(ops._2),
        s3.sequence(ops._3),
        s4.sequence(ops._4),
        s5.sequence(ops._5),
        s6.sequence(ops._6),
        s7.sequence(ops._7),
        s8.sequence(ops._8),
        s9.sequence(ops._9),
        s10.sequence(ops._10),
        s11.sequence(ops._11),
        s12.sequence(ops._12),
        s13.sequence(ops._13),
        s14.sequence(ops._14),
        s15.sequence(ops._15),
        s16.sequence(ops._16)),
        arr => (
          arr(0).asInstanceOf[R1],
          arr(1).asInstanceOf[R2],
          arr(2).asInstanceOf[R3],
          arr(3).asInstanceOf[R4],
          arr(4).asInstanceOf[R5],
          arr(5).asInstanceOf[R6],
          arr(6).asInstanceOf[R7],
          arr(7).asInstanceOf[R8],
          arr(8).asInstanceOf[R9],
          arr(9).asInstanceOf[R10],
          arr(10).asInstanceOf[R11],
          arr(11).asInstanceOf[R12],
          arr(12).asInstanceOf[R13],
          arr(13).asInstanceOf[R14],
          arr(14).asInstanceOf[R15],
          arr(15).asInstanceOf[R16])
      )
    }


  implicit def tuple17Sequencer[O1, O2, O3, O4, O5, O6, O7, O8, O9, O10, O11, O12, O13, O14, O15, O16, O17, R1, R2, R3, R4, R5, R6, R7, R8, R9, R10, R11, R12, R13, R14, R15, R16, R17](implicit
    s1: Sequencer[O1, R1],
    s2: Sequencer[O2, R2],
    s3: Sequencer[O3, R3],
    s4: Sequencer[O4, R4],
    s5: Sequencer[O5, R5],
    s6: Sequencer[O6, R6],
    s7: Sequencer[O7, R7],
    s8: Sequencer[O8, R8],
    s9: Sequencer[O9, R9],
    s10: Sequencer[O10, R10],
    s11: Sequencer[O11, R11],
    s12: Sequencer[O12, R12],
    s13: Sequencer[O13, R13],
    s14: Sequencer[O14, R14],
    s15: Sequencer[O15, R15],
    s16: Sequencer[O16, R16],
    s17: Sequencer[O17, R17]): Sequencer[(O1, O2, O3, O4, O5, O6, O7, O8, O9, O10, O11, O12, O13, O14, O15, O16, O17), (R1, R2, R3, R4, R5, R6, R7, R8, R9, R10, R11, R12, R13, R14, R15, R16, R17)] =

    new Sequencer[(O1, O2, O3, O4, O5, O6, O7, O8, O9, O10, O11, O12, O13, O14, O15, O16, O17), (R1, R2, R3, R4, R5, R6, R7, R8, R9, R10, R11, R12, R13, R14, R15, R16, R17)] {
      def sequence(ops: (O1, O2, O3, O4, O5, O6, O7, O8, O9, O10, O11, O12, O13, O14, O15, O16, O17)) = new TupleBatch((
        s1.sequence(ops._1),
        s2.sequence(ops._2),
        s3.sequence(ops._3),
        s4.sequence(ops._4),
        s5.sequence(ops._5),
        s6.sequence(ops._6),
        s7.sequence(ops._7),
        s8.sequence(ops._8),
        s9.sequence(ops._9),
        s10.sequence(ops._10),
        s11.sequence(ops._11),
        s12.sequence(ops._12),
        s13.sequence(ops._13),
        s14.sequence(ops._14),
        s15.sequence(ops._15),
        s16.sequence(ops._16),
        s17.sequence(ops._17)),
        arr => (
          arr(0).asInstanceOf[R1],
          arr(1).asInstanceOf[R2],
          arr(2).asInstanceOf[R3],
          arr(3).asInstanceOf[R4],
          arr(4).asInstanceOf[R5],
          arr(5).asInstanceOf[R6],
          arr(6).asInstanceOf[R7],
          arr(7).asInstanceOf[R8],
          arr(8).asInstanceOf[R9],
          arr(9).asInstanceOf[R10],
          arr(10).asInstanceOf[R11],
          arr(11).asInstanceOf[R12],
          arr(12).asInstanceOf[R13],
          arr(13).asInstanceOf[R14],
          arr(14).asInstanceOf[R15],
          arr(15).asInstanceOf[R16],
          arr(16).asInstanceOf[R17])
      )
    }


  implicit def tuple18Sequencer[O1, O2, O3, O4, O5, O6, O7, O8, O9, O10, O11, O12, O13, O14, O15, O16, O17, O18, R1, R2, R3, R4, R5, R6, R7, R8, R9, R10, R11, R12, R13, R14, R15, R16, R17, R18](implicit
    s1: Sequencer[O1, R1],
    s2: Sequencer[O2, R2],
    s3: Sequencer[O3, R3],
    s4: Sequencer[O4, R4],
    s5: Sequencer[O5, R5],
    s6: Sequencer[O6, R6],
    s7: Sequencer[O7, R7],
    s8: Sequencer[O8, R8],
    s9: Sequencer[O9, R9],
    s10: Sequencer[O10, R10],
    s11: Sequencer[O11, R11],
    s12: Sequencer[O12, R12],
    s13: Sequencer[O13, R13],
    s14: Sequencer[O14, R14],
    s15: Sequencer[O15, R15],
    s16: Sequencer[O16, R16],
    s17: Sequencer[O17, R17],
    s18: Sequencer[O18, R18]): Sequencer[(O1, O2, O3, O4, O5, O6, O7, O8, O9, O10, O11, O12, O13, O14, O15, O16, O17, O18), (R1, R2, R3, R4, R5, R6, R7, R8, R9, R10, R11, R12, R13, R14, R15, R16, R17, R18)] =

    new Sequencer[(O1, O2, O3, O4, O5, O6, O7, O8, O9, O10, O11, O12, O13, O14, O15, O16, O17, O18), (R1, R2, R3, R4, R5, R6, R7, R8, R9, R10, R11, R12, R13, R14, R15, R16, R17, R18)] {
      def sequence(ops: (O1, O2, O3, O4, O5, O6, O7, O8, O9, O10, O11, O12, O13, O14, O15, O16, O17, O18)) = new TupleBatch((
        s1.sequence(ops._1),
        s2.sequence(ops._2),
        s3.sequence(ops._3),
        s4.sequence(ops._4),
        s5.sequence(ops._5),
        s6.sequence(ops._6),
        s7.sequence(ops._7),
        s8.sequence(ops._8),
        s9.sequence(ops._9),
        s10.sequence(ops._10),
        s11.sequence(ops._11),
        s12.sequence(ops._12),
        s13.sequence(ops._13),
        s14.sequence(ops._14),
        s15.sequence(ops._15),
        s16.sequence(ops._16),
        s17.sequence(ops._17),
        s18.sequence(ops._18)),
        arr => (
          arr(0).asInstanceOf[R1],
          arr(1).asInstanceOf[R2],
          arr(2).asInstanceOf[R3],
          arr(3).asInstanceOf[R4],
          arr(4).asInstanceOf[R5],
          arr(5).asInstanceOf[R6],
          arr(6).asInstanceOf[R7],
          arr(7).asInstanceOf[R8],
          arr(8).asInstanceOf[R9],
          arr(9).asInstanceOf[R10],
          arr(10).asInstanceOf[R11],
          arr(11).asInstanceOf[R12],
          arr(12).asInstanceOf[R13],
          arr(13).asInstanceOf[R14],
          arr(14).asInstanceOf[R15],
          arr(15).asInstanceOf[R16],
          arr(16).asInstanceOf[R17],
          arr(17).asInstanceOf[R18])
      )
    }


  implicit def tuple19Sequencer[O1, O2, O3, O4, O5, O6, O7, O8, O9, O10, O11, O12, O13, O14, O15, O16, O17, O18, O19, R1, R2, R3, R4, R5, R6, R7, R8, R9, R10, R11, R12, R13, R14, R15, R16, R17, R18, R19](implicit
    s1: Sequencer[O1, R1],
    s2: Sequencer[O2, R2],
    s3: Sequencer[O3, R3],
    s4: Sequencer[O4, R4],
    s5: Sequencer[O5, R5],
    s6: Sequencer[O6, R6],
    s7: Sequencer[O7, R7],
    s8: Sequencer[O8, R8],
    s9: Sequencer[O9, R9],
    s10: Sequencer[O10, R10],
    s11: Sequencer[O11, R11],
    s12: Sequencer[O12, R12],
    s13: Sequencer[O13, R13],
    s14: Sequencer[O14, R14],
    s15: Sequencer[O15, R15],
    s16: Sequencer[O16, R16],
    s17: Sequencer[O17, R17],
    s18: Sequencer[O18, R18],
    s19: Sequencer[O19, R19]): Sequencer[(O1, O2, O3, O4, O5, O6, O7, O8, O9, O10, O11, O12, O13, O14, O15, O16, O17, O18, O19), (R1, R2, R3, R4, R5, R6, R7, R8, R9, R10, R11, R12, R13, R14, R15, R16, R17, R18, R19)] =

    new Sequencer[(O1, O2, O3, O4, O5, O6, O7, O8, O9, O10, O11, O12, O13, O14, O15, O16, O17, O18, O19), (R1, R2, R3, R4, R5, R6, R7, R8, R9, R10, R11, R12, R13, R14, R15, R16, R17, R18, R19)] {
      def sequence(ops: (O1, O2, O3, O4, O5, O6, O7, O8, O9, O10, O11, O12, O13, O14, O15, O16, O17, O18, O19)) = new TupleBatch((
        s1.sequence(ops._1),
        s2.sequence(ops._2),
        s3.sequence(ops._3),
        s4.sequence(ops._4),
        s5.sequence(ops._5),
        s6.sequence(ops._6),
        s7.sequence(ops._7),
        s8.sequence(ops._8),
        s9.sequence(ops._9),
        s10.sequence(ops._10),
        s11.sequence(ops._11),
        s12.sequence(ops._12),
        s13.sequence(ops._13),
        s14.sequence(ops._14),
        s15.sequence(ops._15),
        s16.sequence(ops._16),
        s17.sequence(ops._17),
        s18.sequence(ops._18),
        s19.sequence(ops._19)),
        arr => (
          arr(0).asInstanceOf[R1],
          arr(1).asInstanceOf[R2],
          arr(2).asInstanceOf[R3],
          arr(3).asInstanceOf[R4],
          arr(4).asInstanceOf[R5],
          arr(5).asInstanceOf[R6],
          arr(6).asInstanceOf[R7],
          arr(7).asInstanceOf[R8],
          arr(8).asInstanceOf[R9],
          arr(9).asInstanceOf[R10],
          arr(10).asInstanceOf[R11],
          arr(11).asInstanceOf[R12],
          arr(12).asInstanceOf[R13],
          arr(13).asInstanceOf[R14],
          arr(14).asInstanceOf[R15],
          arr(15).asInstanceOf[R16],
          arr(16).asInstanceOf[R17],
          arr(17).asInstanceOf[R18],
          arr(18).asInstanceOf[R19])
      )
    }


  implicit def tuple20Sequencer[O1, O2, O3, O4, O5, O6, O7, O8, O9, O10, O11, O12, O13, O14, O15, O16, O17, O18, O19, O20, R1, R2, R3, R4, R5, R6, R7, R8, R9, R10, R11, R12, R13, R14, R15, R16, R17, R18, R19, R20](implicit
    s1: Sequencer[O1, R1],
    s2: Sequencer[O2, R2],
    s3: Sequencer[O3, R3],
    s4: Sequencer[O4, R4],
    s5: Sequencer[O5, R5],
    s6: Sequencer[O6, R6],
    s7: Sequencer[O7, R7],
    s8: Sequencer[O8, R8],
    s9: Sequencer[O9, R9],
    s10: Sequencer[O10, R10],
    s11: Sequencer[O11, R11],
    s12: Sequencer[O12, R12],
    s13: Sequencer[O13, R13],
    s14: Sequencer[O14, R14],
    s15: Sequencer[O15, R15],
    s16: Sequencer[O16, R16],
    s17: Sequencer[O17, R17],
    s18: Sequencer[O18, R18],
    s19: Sequencer[O19, R19],
    s20: Sequencer[O20, R20]): Sequencer[(O1, O2, O3, O4, O5, O6, O7, O8, O9, O10, O11, O12, O13, O14, O15, O16, O17, O18, O19, O20), (R1, R2, R3, R4, R5, R6, R7, R8, R9, R10, R11, R12, R13, R14, R15, R16, R17, R18, R19, R20)] =

    new Sequencer[(O1, O2, O3, O4, O5, O6, O7, O8, O9, O10, O11, O12, O13, O14, O15, O16, O17, O18, O19, O20), (R1, R2, R3, R4, R5, R6, R7, R8, R9, R10, R11, R12, R13, R14, R15, R16, R17, R18, R19, R20)] {
      def sequence(ops: (O1, O2, O3, O4, O5, O6, O7, O8, O9, O10, O11, O12, O13, O14, O15, O16, O17, O18, O19, O20)) = new TupleBatch((
        s1.sequence(ops._1),
        s2.sequence(ops._2),
        s3.sequence(ops._3),
        s4.sequence(ops._4),
        s5.sequence(ops._5),
        s6.sequence(ops._6),
        s7.sequence(ops._7),
        s8.sequence(ops._8),
        s9.sequence(ops._9),
        s10.sequence(ops._10),
        s11.sequence(ops._11),
        s12.sequence(ops._12),
        s13.sequence(ops._13),
        s14.sequence(ops._14),
        s15.sequence(ops._15),
        s16.sequence(ops._16),
        s17.sequence(ops._17),
        s18.sequence(ops._18),
        s19.sequence(ops._19),
        s20.sequence(ops._20)),
        arr => (
          arr(0).asInstanceOf[R1],
          arr(1).asInstanceOf[R2],
          arr(2).asInstanceOf[R3],
          arr(3).asInstanceOf[R4],
          arr(4).asInstanceOf[R5],
          arr(5).asInstanceOf[R6],
          arr(6).asInstanceOf[R7],
          arr(7).asInstanceOf[R8],
          arr(8).asInstanceOf[R9],
          arr(9).asInstanceOf[R10],
          arr(10).asInstanceOf[R11],
          arr(11).asInstanceOf[R12],
          arr(12).asInstanceOf[R13],
          arr(13).asInstanceOf[R14],
          arr(14).asInstanceOf[R15],
          arr(15).asInstanceOf[R16],
          arr(16).asInstanceOf[R17],
          arr(17).asInstanceOf[R18],
          arr(18).asInstanceOf[R19],
          arr(19).asInstanceOf[R20])
      )
    }


  implicit def tuple21Sequencer[O1, O2, O3, O4, O5, O6, O7, O8, O9, O10, O11, O12, O13, O14, O15, O16, O17, O18, O19, O20, O21, R1, R2, R3, R4, R5, R6, R7, R8, R9, R10, R11, R12, R13, R14, R15, R16, R17, R18, R19, R20, R21](implicit
    s1: Sequencer[O1, R1],
    s2: Sequencer[O2, R2],
    s3: Sequencer[O3, R3],
    s4: Sequencer[O4, R4],
    s5: Sequencer[O5, R5],
    s6: Sequencer[O6, R6],
    s7: Sequencer[O7, R7],
    s8: Sequencer[O8, R8],
    s9: Sequencer[O9, R9],
    s10: Sequencer[O10, R10],
    s11: Sequencer[O11, R11],
    s12: Sequencer[O12, R12],
    s13: Sequencer[O13, R13],
    s14: Sequencer[O14, R14],
    s15: Sequencer[O15, R15],
    s16: Sequencer[O16, R16],
    s17: Sequencer[O17, R17],
    s18: Sequencer[O18, R18],
    s19: Sequencer[O19, R19],
    s20: Sequencer[O20, R20],
    s21: Sequencer[O21, R21]): Sequencer[(O1, O2, O3, O4, O5, O6, O7, O8, O9, O10, O11, O12, O13, O14, O15, O16, O17, O18, O19, O20, O21), (R1, R2, R3, R4, R5, R6, R7, R8, R9, R10, R11, R12, R13, R14, R15, R16, R17, R18, R19, R20, R21)] =

    new Sequencer[(O1, O2, O3, O4, O5, O6, O7, O8, O9, O10, O11, O12, O13, O14, O15, O16, O17, O18, O19, O20, O21), (R1, R2, R3, R4, R5, R6, R7, R8, R9, R10, R11, R12, R13, R14, R15, R16, R17, R18, R19, R20, R21)] {
      def sequence(ops: (O1, O2, O3, O4, O5, O6, O7, O8, O9, O10, O11, O12, O13, O14, O15, O16, O17, O18, O19, O20, O21)) = new TupleBatch((
        s1.sequence(ops._1),
        s2.sequence(ops._2),
        s3.sequence(ops._3),
        s4.sequence(ops._4),
        s5.sequence(ops._5),
        s6.sequence(ops._6),
        s7.sequence(ops._7),
        s8.sequence(ops._8),
        s9.sequence(ops._9),
        s10.sequence(ops._10),
        s11.sequence(ops._11),
        s12.sequence(ops._12),
        s13.sequence(ops._13),
        s14.sequence(ops._14),
        s15.sequence(ops._15),
        s16.sequence(ops._16),
        s17.sequence(ops._17),
        s18.sequence(ops._18),
        s19.sequence(ops._19),
        s20.sequence(ops._20),
        s21.sequence(ops._21)),
        arr => (
          arr(0).asInstanceOf[R1],
          arr(1).asInstanceOf[R2],
          arr(2).asInstanceOf[R3],
          arr(3).asInstanceOf[R4],
          arr(4).asInstanceOf[R5],
          arr(5).asInstanceOf[R6],
          arr(6).asInstanceOf[R7],
          arr(7).asInstanceOf[R8],
          arr(8).asInstanceOf[R9],
          arr(9).asInstanceOf[R10],
          arr(10).asInstanceOf[R11],
          arr(11).asInstanceOf[R12],
          arr(12).asInstanceOf[R13],
          arr(13).asInstanceOf[R14],
          arr(14).asInstanceOf[R15],
          arr(15).asInstanceOf[R16],
          arr(16).asInstanceOf[R17],
          arr(17).asInstanceOf[R18],
          arr(18).asInstanceOf[R19],
          arr(19).asInstanceOf[R20],
          arr(20).asInstanceOf[R21])
      )
    }


  implicit def tuple22Sequencer[O1, O2, O3, O4, O5, O6, O7, O8, O9, O10, O11, O12, O13, O14, O15, O16, O17, O18, O19, O20, O21, O22, R1, R2, R3, R4, R5, R6, R7, R8, R9, R10, R11, R12, R13, R14, R15, R16, R17, R18, R19, R20, R21, R22](implicit
    s1: Sequencer[O1, R1],
    s2: Sequencer[O2, R2],
    s3: Sequencer[O3, R3],
    s4: Sequencer[O4, R4],
    s5: Sequencer[O5, R5],
    s6: Sequencer[O6, R6],
    s7: Sequencer[O7, R7],
    s8: Sequencer[O8, R8],
    s9: Sequencer[O9, R9],
    s10: Sequencer[O10, R10],
    s11: Sequencer[O11, R11],
    s12: Sequencer[O12, R12],
    s13: Sequencer[O13, R13],
    s14: Sequencer[O14, R14],
    s15: Sequencer[O15, R15],
    s16: Sequencer[O16, R16],
    s17: Sequencer[O17, R17],
    s18: Sequencer[O18, R18],
    s19: Sequencer[O19, R19],
    s20: Sequencer[O20, R20],
    s21: Sequencer[O21, R21],
    s22: Sequencer[O22, R22]): Sequencer[(O1, O2, O3, O4, O5, O6, O7, O8, O9, O10, O11, O12, O13, O14, O15, O16, O17, O18, O19, O20, O21, O22), (R1, R2, R3, R4, R5, R6, R7, R8, R9, R10, R11, R12, R13, R14, R15, R16, R17, R18, R19, R20, R21, R22)] =

    new Sequencer[(O1, O2, O3, O4, O5, O6, O7, O8, O9, O10, O11, O12, O13, O14, O15, O16, O17, O18, O19, O20, O21, O22), (R1, R2, R3, R4, R5, R6, R7, R8, R9, R10, R11, R12, R13, R14, R15, R16, R17, R18, R19, R20, R21, R22)] {
      def sequence(ops: (O1, O2, O3, O4, O5, O6, O7, O8, O9, O10, O11, O12, O13, O14, O15, O16, O17, O18, O19, O20, O21, O22)) = new TupleBatch((
        s1.sequence(ops._1),
        s2.sequence(ops._2),
        s3.sequence(ops._3),
        s4.sequence(ops._4),
        s5.sequence(ops._5),
        s6.sequence(ops._6),
        s7.sequence(ops._7),
        s8.sequence(ops._8),
        s9.sequence(ops._9),
        s10.sequence(ops._10),
        s11.sequence(ops._11),
        s12.sequence(ops._12),
        s13.sequence(ops._13),
        s14.sequence(ops._14),
        s15.sequence(ops._15),
        s16.sequence(ops._16),
        s17.sequence(ops._17),
        s18.sequence(ops._18),
        s19.sequence(ops._19),
        s20.sequence(ops._20),
        s21.sequence(ops._21),
        s22.sequence(ops._22)),
        arr => (
          arr(0).asInstanceOf[R1],
          arr(1).asInstanceOf[R2],
          arr(2).asInstanceOf[R3],
          arr(3).asInstanceOf[R4],
          arr(4).asInstanceOf[R5],
          arr(5).asInstanceOf[R6],
          arr(6).asInstanceOf[R7],
          arr(7).asInstanceOf[R8],
          arr(8).asInstanceOf[R9],
          arr(9).asInstanceOf[R10],
          arr(10).asInstanceOf[R11],
          arr(11).asInstanceOf[R12],
          arr(12).asInstanceOf[R13],
          arr(13).asInstanceOf[R14],
          arr(14).asInstanceOf[R15],
          arr(15).asInstanceOf[R16],
          arr(16).asInstanceOf[R17],
          arr(17).asInstanceOf[R18],
          arr(18).asInstanceOf[R19],
          arr(19).asInstanceOf[R20],
          arr(20).asInstanceOf[R21],
          arr(21).asInstanceOf[R22])
      )
    }
}

object TupleSequencers {
  private class TupleBatch[T](batches: Product, fun: Array[Any] => T) extends RedisBatch[T] with RawCommandPacks {
    def rawCommandPacks = this
    def emitCommandPacks(consumer: RawCommandPack => Unit) = {
      var i = 0
      while (i < batches.productArity) {
        batches.productElement(i).asInstanceOf[RedisBatch[Any]].rawCommandPacks.emitCommandPacks(consumer)
        i += 1
      }
    }
    def computeSize(limit: Int) = {
      var res = 0
      var i = 0
      while (i < batches.productArity && res < limit) {
        res += batches.productElement(i).asInstanceOf[RedisBatch[Any]].rawCommandPacks.computeSize(limit - res)
        i += 1
      }
      res
    }
    def decodeReplies(replies: Int => RedisReply, index: Index, inTransaction: Boolean) = {
      val result = new Array[Any](batches.productArity)
      var failure: Opt[Throwable] = Opt.Empty
      var i = 0
      while (i < batches.productArity) {
        try {
          result(i) = batches.productElement(i).asInstanceOf[RedisBatch[Any]].decodeReplies(replies, index, inTransaction)
        } catch {
          case NonFatal(cause) =>
            failure = failure orElse cause.opt
        }
        i += 1
      }
      failure.fold(fun(result))(throw _)
    }
  }
}

object Gen {
  def main(args: Array[String]): Unit = {
    for (n <- 2 to 22) {
      val is = 1 to n
      val os = is.map(i => s"O$i").mkString(", ")
      val rs = is.map(i => s"R$i").mkString(", ")
      val sequencers = is.map(i => s"s$i: Sequencer[O$i, R$i]").mkString(",\n")
      val batches = is.map(i => s"s$i.sequence(ops._$i)").mkString(",\n")
      val result = is.map(i => s"arr(${i - 1}).asInstanceOf[R$i]").mkString(",\n")

      val code =
        s"""
           |implicit def tuple${n}Sequencer[$os, $rs](implicit
           |  $sequencers): Sequencer[($os), ($rs)] =
           |
           |  new Sequencer[($os), ($rs)] {
           |    def sequence(ops: ($os)) = new TupleBatch((
           |      $batches),
           |      arr => (
           |        $result)
           |    )
           |  }
        """.stripMargin

      println(code)
    }
  }
}






© 2015 - 2025 Weber Informatics LLC | Privacy Policy