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

org.json4s.WriterFunctions.scala Maven / Gradle / Ivy

There is a newer version: 4.1.0-M8
Show newest version
package org.json4s

trait WriterFunctions { self: Writer.type =>
  def writer[A1, A2, X](f: X => (A1, A2))(key1: String, key2: String)(implicit
    A1: Writer[A1], A2: Writer[A2]
  ): Writer[X] =
    writer2[A1, A2, X](f)(key1, key2)

  def writer2[A1, A2, X](f: X => (A1, A2))(key1: String, key2: String)(implicit
    A1: Writer[A1], A2: Writer[A2]
  ): Writer[X] = new Writer[X] {
    def write(obj: X): JValue = {
      val (a1, a2) = f(obj)
      JObject(
        (key1, A1.write(a1)) :: (key2, A2.write(a2)) :: Nil
      )
    }
  }

  def writer[A1, A2, A3, X](f: X => (A1, A2, A3))(key1: String, key2: String, key3: String)(implicit
    A1: Writer[A1], A2: Writer[A2], A3: Writer[A3]
  ): Writer[X] =
    writer3[A1, A2, A3, X](f)(key1, key2, key3)

  def writer3[A1, A2, A3, X](f: X => (A1, A2, A3))(key1: String, key2: String, key3: String)(implicit
    A1: Writer[A1], A2: Writer[A2], A3: Writer[A3]
  ): Writer[X] = new Writer[X] {
    def write(obj: X): JValue = {
      val (a1, a2, a3) = f(obj)
      JObject(
        (key1, A1.write(a1)) :: (key2, A2.write(a2)) :: (key3, A3.write(a3)) :: Nil
      )
    }
  }

  def writer[A1, A2, A3, A4, X](f: X => (A1, A2, A3, A4))(key1: String, key2: String, key3: String, key4: String)(implicit
    A1: Writer[A1], A2: Writer[A2], A3: Writer[A3], A4: Writer[A4]
  ): Writer[X] =
    writer4[A1, A2, A3, A4, X](f)(key1, key2, key3, key4)

  def writer4[A1, A2, A3, A4, X](f: X => (A1, A2, A3, A4))(key1: String, key2: String, key3: String, key4: String)(implicit
    A1: Writer[A1], A2: Writer[A2], A3: Writer[A3], A4: Writer[A4]
  ): Writer[X] = new Writer[X] {
    def write(obj: X): JValue = {
      val (a1, a2, a3, a4) = f(obj)
      JObject(
        (key1, A1.write(a1)) :: (key2, A2.write(a2)) :: (key3, A3.write(a3)) :: (key4, A4.write(a4)) :: Nil
      )
    }
  }

  def writer[A1, A2, A3, A4, A5, X](f: X => (A1, A2, A3, A4, A5))(key1: String, key2: String, key3: String, key4: String, key5: String)(implicit
    A1: Writer[A1], A2: Writer[A2], A3: Writer[A3], A4: Writer[A4], A5: Writer[A5]
  ): Writer[X] =
    writer5[A1, A2, A3, A4, A5, X](f)(key1, key2, key3, key4, key5)

  def writer5[A1, A2, A3, A4, A5, X](f: X => (A1, A2, A3, A4, A5))(key1: String, key2: String, key3: String, key4: String, key5: String)(implicit
    A1: Writer[A1], A2: Writer[A2], A3: Writer[A3], A4: Writer[A4], A5: Writer[A5]
  ): Writer[X] = new Writer[X] {
    def write(obj: X): JValue = {
      val (a1, a2, a3, a4, a5) = f(obj)
      JObject(
        (key1, A1.write(a1)) :: (key2, A2.write(a2)) :: (key3, A3.write(a3)) :: (key4, A4.write(a4)) :: (key5, A5.write(a5)) :: Nil
      )
    }
  }

  def writer[A1, A2, A3, A4, A5, A6, X](f: X => (A1, A2, A3, A4, A5, A6))(key1: String, key2: String, key3: String, key4: String, key5: String, key6: String)(implicit
    A1: Writer[A1], A2: Writer[A2], A3: Writer[A3], A4: Writer[A4], A5: Writer[A5], A6: Writer[A6]
  ): Writer[X] =
    writer6[A1, A2, A3, A4, A5, A6, X](f)(key1, key2, key3, key4, key5, key6)

  def writer6[A1, A2, A3, A4, A5, A6, X](f: X => (A1, A2, A3, A4, A5, A6))(key1: String, key2: String, key3: String, key4: String, key5: String, key6: String)(implicit
    A1: Writer[A1], A2: Writer[A2], A3: Writer[A3], A4: Writer[A4], A5: Writer[A5], A6: Writer[A6]
  ): Writer[X] = new Writer[X] {
    def write(obj: X): JValue = {
      val (a1, a2, a3, a4, a5, a6) = f(obj)
      JObject(
        (key1, A1.write(a1)) :: (key2, A2.write(a2)) :: (key3, A3.write(a3)) :: (key4, A4.write(a4)) :: (key5, A5.write(a5)) :: (key6, A6.write(a6)) :: Nil
      )
    }
  }

  def writer[A1, A2, A3, A4, A5, A6, A7, X](f: X => (A1, A2, A3, A4, A5, A6, A7))(key1: String, key2: String, key3: String, key4: String, key5: String, key6: String, key7: String)(implicit
    A1: Writer[A1], A2: Writer[A2], A3: Writer[A3], A4: Writer[A4], A5: Writer[A5], A6: Writer[A6], A7: Writer[A7]
  ): Writer[X] =
    writer7[A1, A2, A3, A4, A5, A6, A7, X](f)(key1, key2, key3, key4, key5, key6, key7)

  def writer7[A1, A2, A3, A4, A5, A6, A7, X](f: X => (A1, A2, A3, A4, A5, A6, A7))(key1: String, key2: String, key3: String, key4: String, key5: String, key6: String, key7: String)(implicit
    A1: Writer[A1], A2: Writer[A2], A3: Writer[A3], A4: Writer[A4], A5: Writer[A5], A6: Writer[A6], A7: Writer[A7]
  ): Writer[X] = new Writer[X] {
    def write(obj: X): JValue = {
      val (a1, a2, a3, a4, a5, a6, a7) = f(obj)
      JObject(
        (key1, A1.write(a1)) :: (key2, A2.write(a2)) :: (key3, A3.write(a3)) :: (key4, A4.write(a4)) :: (key5, A5.write(a5)) :: (key6, A6.write(a6)) :: (key7, A7.write(a7)) :: Nil
      )
    }
  }

  def writer[A1, A2, A3, A4, A5, A6, A7, A8, X](f: X => (A1, A2, A3, A4, A5, A6, A7, A8))(key1: String, key2: String, key3: String, key4: String, key5: String, key6: String, key7: String, key8: String)(implicit
    A1: Writer[A1], A2: Writer[A2], A3: Writer[A3], A4: Writer[A4], A5: Writer[A5], A6: Writer[A6], A7: Writer[A7], A8: Writer[A8]
  ): Writer[X] =
    writer8[A1, A2, A3, A4, A5, A6, A7, A8, X](f)(key1, key2, key3, key4, key5, key6, key7, key8)

  def writer8[A1, A2, A3, A4, A5, A6, A7, A8, X](f: X => (A1, A2, A3, A4, A5, A6, A7, A8))(key1: String, key2: String, key3: String, key4: String, key5: String, key6: String, key7: String, key8: String)(implicit
    A1: Writer[A1], A2: Writer[A2], A3: Writer[A3], A4: Writer[A4], A5: Writer[A5], A6: Writer[A6], A7: Writer[A7], A8: Writer[A8]
  ): Writer[X] = new Writer[X] {
    def write(obj: X): JValue = {
      val (a1, a2, a3, a4, a5, a6, a7, a8) = f(obj)
      JObject(
        (key1, A1.write(a1)) :: (key2, A2.write(a2)) :: (key3, A3.write(a3)) :: (key4, A4.write(a4)) :: (key5, A5.write(a5)) :: (key6, A6.write(a6)) :: (key7, A7.write(a7)) :: (key8, A8.write(a8)) :: Nil
      )
    }
  }

  def writer[A1, A2, A3, A4, A5, A6, A7, A8, A9, X](f: X => (A1, A2, A3, A4, A5, A6, A7, A8, A9))(key1: String, key2: String, key3: String, key4: String, key5: String, key6: String, key7: String, key8: String, key9: String)(implicit
    A1: Writer[A1], A2: Writer[A2], A3: Writer[A3], A4: Writer[A4], A5: Writer[A5], A6: Writer[A6], A7: Writer[A7], A8: Writer[A8], A9: Writer[A9]
  ): Writer[X] =
    writer9[A1, A2, A3, A4, A5, A6, A7, A8, A9, X](f)(key1, key2, key3, key4, key5, key6, key7, key8, key9)

  def writer9[A1, A2, A3, A4, A5, A6, A7, A8, A9, X](f: X => (A1, A2, A3, A4, A5, A6, A7, A8, A9))(key1: String, key2: String, key3: String, key4: String, key5: String, key6: String, key7: String, key8: String, key9: String)(implicit
    A1: Writer[A1], A2: Writer[A2], A3: Writer[A3], A4: Writer[A4], A5: Writer[A5], A6: Writer[A6], A7: Writer[A7], A8: Writer[A8], A9: Writer[A9]
  ): Writer[X] = new Writer[X] {
    def write(obj: X): JValue = {
      val (a1, a2, a3, a4, a5, a6, a7, a8, a9) = f(obj)
      JObject(
        (key1, A1.write(a1)) :: (key2, A2.write(a2)) :: (key3, A3.write(a3)) :: (key4, A4.write(a4)) :: (key5, A5.write(a5)) :: (key6, A6.write(a6)) :: (key7, A7.write(a7)) :: (key8, A8.write(a8)) :: (key9, A9.write(a9)) :: Nil
      )
    }
  }

  def writer[A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, X](f: X => (A1, A2, A3, A4, A5, A6, A7, A8, A9, A10))(key1: String, key2: String, key3: String, key4: String, key5: String, key6: String, key7: String, key8: String, key9: String, key10: String)(implicit
    A1: Writer[A1], A2: Writer[A2], A3: Writer[A3], A4: Writer[A4], A5: Writer[A5], A6: Writer[A6], A7: Writer[A7], A8: Writer[A8], A9: Writer[A9], A10: Writer[A10]
  ): Writer[X] =
    writer10[A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, X](f)(key1, key2, key3, key4, key5, key6, key7, key8, key9, key10)

  def writer10[A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, X](f: X => (A1, A2, A3, A4, A5, A6, A7, A8, A9, A10))(key1: String, key2: String, key3: String, key4: String, key5: String, key6: String, key7: String, key8: String, key9: String, key10: String)(implicit
    A1: Writer[A1], A2: Writer[A2], A3: Writer[A3], A4: Writer[A4], A5: Writer[A5], A6: Writer[A6], A7: Writer[A7], A8: Writer[A8], A9: Writer[A9], A10: Writer[A10]
  ): Writer[X] = new Writer[X] {
    def write(obj: X): JValue = {
      val (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10) = f(obj)
      JObject(
        (key1, A1.write(a1)) :: (key2, A2.write(a2)) :: (key3, A3.write(a3)) :: (key4, A4.write(a4)) :: (key5, A5.write(a5)) :: (key6, A6.write(a6)) :: (key7, A7.write(a7)) :: (key8, A8.write(a8)) :: (key9, A9.write(a9)) :: (key10, A10.write(a10)) :: Nil
      )
    }
  }

  def writer[A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, X](f: X => (A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11))(key1: String, key2: String, key3: String, key4: String, key5: String, key6: String, key7: String, key8: String, key9: String, key10: String, key11: String)(implicit
    A1: Writer[A1], A2: Writer[A2], A3: Writer[A3], A4: Writer[A4], A5: Writer[A5], A6: Writer[A6], A7: Writer[A7], A8: Writer[A8], A9: Writer[A9], A10: Writer[A10], A11: Writer[A11]
  ): Writer[X] =
    writer11[A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, X](f)(key1, key2, key3, key4, key5, key6, key7, key8, key9, key10, key11)

  def writer11[A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, X](f: X => (A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11))(key1: String, key2: String, key3: String, key4: String, key5: String, key6: String, key7: String, key8: String, key9: String, key10: String, key11: String)(implicit
    A1: Writer[A1], A2: Writer[A2], A3: Writer[A3], A4: Writer[A4], A5: Writer[A5], A6: Writer[A6], A7: Writer[A7], A8: Writer[A8], A9: Writer[A9], A10: Writer[A10], A11: Writer[A11]
  ): Writer[X] = new Writer[X] {
    def write(obj: X): JValue = {
      val (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11) = f(obj)
      JObject(
        (key1, A1.write(a1)) :: (key2, A2.write(a2)) :: (key3, A3.write(a3)) :: (key4, A4.write(a4)) :: (key5, A5.write(a5)) :: (key6, A6.write(a6)) :: (key7, A7.write(a7)) :: (key8, A8.write(a8)) :: (key9, A9.write(a9)) :: (key10, A10.write(a10)) :: (key11, A11.write(a11)) :: Nil
      )
    }
  }

  def writer[A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, X](f: X => (A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12))(key1: String, key2: String, key3: String, key4: String, key5: String, key6: String, key7: String, key8: String, key9: String, key10: String, key11: String, key12: String)(implicit
    A1: Writer[A1], A2: Writer[A2], A3: Writer[A3], A4: Writer[A4], A5: Writer[A5], A6: Writer[A6], A7: Writer[A7], A8: Writer[A8], A9: Writer[A9], A10: Writer[A10], A11: Writer[A11], A12: Writer[A12]
  ): Writer[X] =
    writer12[A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, X](f)(key1, key2, key3, key4, key5, key6, key7, key8, key9, key10, key11, key12)

  def writer12[A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, X](f: X => (A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12))(key1: String, key2: String, key3: String, key4: String, key5: String, key6: String, key7: String, key8: String, key9: String, key10: String, key11: String, key12: String)(implicit
    A1: Writer[A1], A2: Writer[A2], A3: Writer[A3], A4: Writer[A4], A5: Writer[A5], A6: Writer[A6], A7: Writer[A7], A8: Writer[A8], A9: Writer[A9], A10: Writer[A10], A11: Writer[A11], A12: Writer[A12]
  ): Writer[X] = new Writer[X] {
    def write(obj: X): JValue = {
      val (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12) = f(obj)
      JObject(
        (key1, A1.write(a1)) :: (key2, A2.write(a2)) :: (key3, A3.write(a3)) :: (key4, A4.write(a4)) :: (key5, A5.write(a5)) :: (key6, A6.write(a6)) :: (key7, A7.write(a7)) :: (key8, A8.write(a8)) :: (key9, A9.write(a9)) :: (key10, A10.write(a10)) :: (key11, A11.write(a11)) :: (key12, A12.write(a12)) :: Nil
      )
    }
  }

  def writer[A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, X](f: X => (A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13))(key1: String, key2: String, key3: String, key4: String, key5: String, key6: String, key7: String, key8: String, key9: String, key10: String, key11: String, key12: String, key13: String)(implicit
    A1: Writer[A1], A2: Writer[A2], A3: Writer[A3], A4: Writer[A4], A5: Writer[A5], A6: Writer[A6], A7: Writer[A7], A8: Writer[A8], A9: Writer[A9], A10: Writer[A10], A11: Writer[A11], A12: Writer[A12], A13: Writer[A13]
  ): Writer[X] =
    writer13[A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, X](f)(key1, key2, key3, key4, key5, key6, key7, key8, key9, key10, key11, key12, key13)

  def writer13[A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, X](f: X => (A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13))(key1: String, key2: String, key3: String, key4: String, key5: String, key6: String, key7: String, key8: String, key9: String, key10: String, key11: String, key12: String, key13: String)(implicit
    A1: Writer[A1], A2: Writer[A2], A3: Writer[A3], A4: Writer[A4], A5: Writer[A5], A6: Writer[A6], A7: Writer[A7], A8: Writer[A8], A9: Writer[A9], A10: Writer[A10], A11: Writer[A11], A12: Writer[A12], A13: Writer[A13]
  ): Writer[X] = new Writer[X] {
    def write(obj: X): JValue = {
      val (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13) = f(obj)
      JObject(
        (key1, A1.write(a1)) :: (key2, A2.write(a2)) :: (key3, A3.write(a3)) :: (key4, A4.write(a4)) :: (key5, A5.write(a5)) :: (key6, A6.write(a6)) :: (key7, A7.write(a7)) :: (key8, A8.write(a8)) :: (key9, A9.write(a9)) :: (key10, A10.write(a10)) :: (key11, A11.write(a11)) :: (key12, A12.write(a12)) :: (key13, A13.write(a13)) :: Nil
      )
    }
  }

  def writer[A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, X](f: X => (A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14))(key1: String, key2: String, key3: String, key4: String, key5: String, key6: String, key7: String, key8: String, key9: String, key10: String, key11: String, key12: String, key13: String, key14: String)(implicit
    A1: Writer[A1], A2: Writer[A2], A3: Writer[A3], A4: Writer[A4], A5: Writer[A5], A6: Writer[A6], A7: Writer[A7], A8: Writer[A8], A9: Writer[A9], A10: Writer[A10], A11: Writer[A11], A12: Writer[A12], A13: Writer[A13], A14: Writer[A14]
  ): Writer[X] =
    writer14[A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, X](f)(key1, key2, key3, key4, key5, key6, key7, key8, key9, key10, key11, key12, key13, key14)

  def writer14[A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, X](f: X => (A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14))(key1: String, key2: String, key3: String, key4: String, key5: String, key6: String, key7: String, key8: String, key9: String, key10: String, key11: String, key12: String, key13: String, key14: String)(implicit
    A1: Writer[A1], A2: Writer[A2], A3: Writer[A3], A4: Writer[A4], A5: Writer[A5], A6: Writer[A6], A7: Writer[A7], A8: Writer[A8], A9: Writer[A9], A10: Writer[A10], A11: Writer[A11], A12: Writer[A12], A13: Writer[A13], A14: Writer[A14]
  ): Writer[X] = new Writer[X] {
    def write(obj: X): JValue = {
      val (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14) = f(obj)
      JObject(
        (key1, A1.write(a1)) :: (key2, A2.write(a2)) :: (key3, A3.write(a3)) :: (key4, A4.write(a4)) :: (key5, A5.write(a5)) :: (key6, A6.write(a6)) :: (key7, A7.write(a7)) :: (key8, A8.write(a8)) :: (key9, A9.write(a9)) :: (key10, A10.write(a10)) :: (key11, A11.write(a11)) :: (key12, A12.write(a12)) :: (key13, A13.write(a13)) :: (key14, A14.write(a14)) :: Nil
      )
    }
  }

  def writer[A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, X](f: X => (A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15))(key1: String, key2: String, key3: String, key4: String, key5: String, key6: String, key7: String, key8: String, key9: String, key10: String, key11: String, key12: String, key13: String, key14: String, key15: String)(implicit
    A1: Writer[A1], A2: Writer[A2], A3: Writer[A3], A4: Writer[A4], A5: Writer[A5], A6: Writer[A6], A7: Writer[A7], A8: Writer[A8], A9: Writer[A9], A10: Writer[A10], A11: Writer[A11], A12: Writer[A12], A13: Writer[A13], A14: Writer[A14], A15: Writer[A15]
  ): Writer[X] =
    writer15[A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, X](f)(key1, key2, key3, key4, key5, key6, key7, key8, key9, key10, key11, key12, key13, key14, key15)

  def writer15[A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, X](f: X => (A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15))(key1: String, key2: String, key3: String, key4: String, key5: String, key6: String, key7: String, key8: String, key9: String, key10: String, key11: String, key12: String, key13: String, key14: String, key15: String)(implicit
    A1: Writer[A1], A2: Writer[A2], A3: Writer[A3], A4: Writer[A4], A5: Writer[A5], A6: Writer[A6], A7: Writer[A7], A8: Writer[A8], A9: Writer[A9], A10: Writer[A10], A11: Writer[A11], A12: Writer[A12], A13: Writer[A13], A14: Writer[A14], A15: Writer[A15]
  ): Writer[X] = new Writer[X] {
    def write(obj: X): JValue = {
      val (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15) = f(obj)
      JObject(
        (key1, A1.write(a1)) :: (key2, A2.write(a2)) :: (key3, A3.write(a3)) :: (key4, A4.write(a4)) :: (key5, A5.write(a5)) :: (key6, A6.write(a6)) :: (key7, A7.write(a7)) :: (key8, A8.write(a8)) :: (key9, A9.write(a9)) :: (key10, A10.write(a10)) :: (key11, A11.write(a11)) :: (key12, A12.write(a12)) :: (key13, A13.write(a13)) :: (key14, A14.write(a14)) :: (key15, A15.write(a15)) :: Nil
      )
    }
  }

  def writer[A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, X](f: X => (A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16))(key1: String, key2: String, key3: String, key4: String, key5: String, key6: String, key7: String, key8: String, key9: String, key10: String, key11: String, key12: String, key13: String, key14: String, key15: String, key16: String)(implicit
    A1: Writer[A1], A2: Writer[A2], A3: Writer[A3], A4: Writer[A4], A5: Writer[A5], A6: Writer[A6], A7: Writer[A7], A8: Writer[A8], A9: Writer[A9], A10: Writer[A10], A11: Writer[A11], A12: Writer[A12], A13: Writer[A13], A14: Writer[A14], A15: Writer[A15], A16: Writer[A16]
  ): Writer[X] =
    writer16[A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, X](f)(key1, key2, key3, key4, key5, key6, key7, key8, key9, key10, key11, key12, key13, key14, key15, key16)

  def writer16[A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, X](f: X => (A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16))(key1: String, key2: String, key3: String, key4: String, key5: String, key6: String, key7: String, key8: String, key9: String, key10: String, key11: String, key12: String, key13: String, key14: String, key15: String, key16: String)(implicit
    A1: Writer[A1], A2: Writer[A2], A3: Writer[A3], A4: Writer[A4], A5: Writer[A5], A6: Writer[A6], A7: Writer[A7], A8: Writer[A8], A9: Writer[A9], A10: Writer[A10], A11: Writer[A11], A12: Writer[A12], A13: Writer[A13], A14: Writer[A14], A15: Writer[A15], A16: Writer[A16]
  ): Writer[X] = new Writer[X] {
    def write(obj: X): JValue = {
      val (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16) = f(obj)
      JObject(
        (key1, A1.write(a1)) :: (key2, A2.write(a2)) :: (key3, A3.write(a3)) :: (key4, A4.write(a4)) :: (key5, A5.write(a5)) :: (key6, A6.write(a6)) :: (key7, A7.write(a7)) :: (key8, A8.write(a8)) :: (key9, A9.write(a9)) :: (key10, A10.write(a10)) :: (key11, A11.write(a11)) :: (key12, A12.write(a12)) :: (key13, A13.write(a13)) :: (key14, A14.write(a14)) :: (key15, A15.write(a15)) :: (key16, A16.write(a16)) :: Nil
      )
    }
  }

  def writer[A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, X](f: X => (A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17))(key1: String, key2: String, key3: String, key4: String, key5: String, key6: String, key7: String, key8: String, key9: String, key10: String, key11: String, key12: String, key13: String, key14: String, key15: String, key16: String, key17: String)(implicit
    A1: Writer[A1], A2: Writer[A2], A3: Writer[A3], A4: Writer[A4], A5: Writer[A5], A6: Writer[A6], A7: Writer[A7], A8: Writer[A8], A9: Writer[A9], A10: Writer[A10], A11: Writer[A11], A12: Writer[A12], A13: Writer[A13], A14: Writer[A14], A15: Writer[A15], A16: Writer[A16], A17: Writer[A17]
  ): Writer[X] =
    writer17[A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, X](f)(key1, key2, key3, key4, key5, key6, key7, key8, key9, key10, key11, key12, key13, key14, key15, key16, key17)

  def writer17[A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, X](f: X => (A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17))(key1: String, key2: String, key3: String, key4: String, key5: String, key6: String, key7: String, key8: String, key9: String, key10: String, key11: String, key12: String, key13: String, key14: String, key15: String, key16: String, key17: String)(implicit
    A1: Writer[A1], A2: Writer[A2], A3: Writer[A3], A4: Writer[A4], A5: Writer[A5], A6: Writer[A6], A7: Writer[A7], A8: Writer[A8], A9: Writer[A9], A10: Writer[A10], A11: Writer[A11], A12: Writer[A12], A13: Writer[A13], A14: Writer[A14], A15: Writer[A15], A16: Writer[A16], A17: Writer[A17]
  ): Writer[X] = new Writer[X] {
    def write(obj: X): JValue = {
      val (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17) = f(obj)
      JObject(
        (key1, A1.write(a1)) :: (key2, A2.write(a2)) :: (key3, A3.write(a3)) :: (key4, A4.write(a4)) :: (key5, A5.write(a5)) :: (key6, A6.write(a6)) :: (key7, A7.write(a7)) :: (key8, A8.write(a8)) :: (key9, A9.write(a9)) :: (key10, A10.write(a10)) :: (key11, A11.write(a11)) :: (key12, A12.write(a12)) :: (key13, A13.write(a13)) :: (key14, A14.write(a14)) :: (key15, A15.write(a15)) :: (key16, A16.write(a16)) :: (key17, A17.write(a17)) :: Nil
      )
    }
  }

  def writer[A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, X](f: X => (A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18))(key1: String, key2: String, key3: String, key4: String, key5: String, key6: String, key7: String, key8: String, key9: String, key10: String, key11: String, key12: String, key13: String, key14: String, key15: String, key16: String, key17: String, key18: String)(implicit
    A1: Writer[A1], A2: Writer[A2], A3: Writer[A3], A4: Writer[A4], A5: Writer[A5], A6: Writer[A6], A7: Writer[A7], A8: Writer[A8], A9: Writer[A9], A10: Writer[A10], A11: Writer[A11], A12: Writer[A12], A13: Writer[A13], A14: Writer[A14], A15: Writer[A15], A16: Writer[A16], A17: Writer[A17], A18: Writer[A18]
  ): Writer[X] =
    writer18[A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, X](f)(key1, key2, key3, key4, key5, key6, key7, key8, key9, key10, key11, key12, key13, key14, key15, key16, key17, key18)

  def writer18[A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, X](f: X => (A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18))(key1: String, key2: String, key3: String, key4: String, key5: String, key6: String, key7: String, key8: String, key9: String, key10: String, key11: String, key12: String, key13: String, key14: String, key15: String, key16: String, key17: String, key18: String)(implicit
    A1: Writer[A1], A2: Writer[A2], A3: Writer[A3], A4: Writer[A4], A5: Writer[A5], A6: Writer[A6], A7: Writer[A7], A8: Writer[A8], A9: Writer[A9], A10: Writer[A10], A11: Writer[A11], A12: Writer[A12], A13: Writer[A13], A14: Writer[A14], A15: Writer[A15], A16: Writer[A16], A17: Writer[A17], A18: Writer[A18]
  ): Writer[X] = new Writer[X] {
    def write(obj: X): JValue = {
      val (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18) = f(obj)
      JObject(
        (key1, A1.write(a1)) :: (key2, A2.write(a2)) :: (key3, A3.write(a3)) :: (key4, A4.write(a4)) :: (key5, A5.write(a5)) :: (key6, A6.write(a6)) :: (key7, A7.write(a7)) :: (key8, A8.write(a8)) :: (key9, A9.write(a9)) :: (key10, A10.write(a10)) :: (key11, A11.write(a11)) :: (key12, A12.write(a12)) :: (key13, A13.write(a13)) :: (key14, A14.write(a14)) :: (key15, A15.write(a15)) :: (key16, A16.write(a16)) :: (key17, A17.write(a17)) :: (key18, A18.write(a18)) :: Nil
      )
    }
  }

  def writer[A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, X](f: X => (A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19))(key1: String, key2: String, key3: String, key4: String, key5: String, key6: String, key7: String, key8: String, key9: String, key10: String, key11: String, key12: String, key13: String, key14: String, key15: String, key16: String, key17: String, key18: String, key19: String)(implicit
    A1: Writer[A1], A2: Writer[A2], A3: Writer[A3], A4: Writer[A4], A5: Writer[A5], A6: Writer[A6], A7: Writer[A7], A8: Writer[A8], A9: Writer[A9], A10: Writer[A10], A11: Writer[A11], A12: Writer[A12], A13: Writer[A13], A14: Writer[A14], A15: Writer[A15], A16: Writer[A16], A17: Writer[A17], A18: Writer[A18], A19: Writer[A19]
  ): Writer[X] =
    writer19[A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, X](f)(key1, key2, key3, key4, key5, key6, key7, key8, key9, key10, key11, key12, key13, key14, key15, key16, key17, key18, key19)

  def writer19[A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, X](f: X => (A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19))(key1: String, key2: String, key3: String, key4: String, key5: String, key6: String, key7: String, key8: String, key9: String, key10: String, key11: String, key12: String, key13: String, key14: String, key15: String, key16: String, key17: String, key18: String, key19: String)(implicit
    A1: Writer[A1], A2: Writer[A2], A3: Writer[A3], A4: Writer[A4], A5: Writer[A5], A6: Writer[A6], A7: Writer[A7], A8: Writer[A8], A9: Writer[A9], A10: Writer[A10], A11: Writer[A11], A12: Writer[A12], A13: Writer[A13], A14: Writer[A14], A15: Writer[A15], A16: Writer[A16], A17: Writer[A17], A18: Writer[A18], A19: Writer[A19]
  ): Writer[X] = new Writer[X] {
    def write(obj: X): JValue = {
      val (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19) = f(obj)
      JObject(
        (key1, A1.write(a1)) :: (key2, A2.write(a2)) :: (key3, A3.write(a3)) :: (key4, A4.write(a4)) :: (key5, A5.write(a5)) :: (key6, A6.write(a6)) :: (key7, A7.write(a7)) :: (key8, A8.write(a8)) :: (key9, A9.write(a9)) :: (key10, A10.write(a10)) :: (key11, A11.write(a11)) :: (key12, A12.write(a12)) :: (key13, A13.write(a13)) :: (key14, A14.write(a14)) :: (key15, A15.write(a15)) :: (key16, A16.write(a16)) :: (key17, A17.write(a17)) :: (key18, A18.write(a18)) :: (key19, A19.write(a19)) :: Nil
      )
    }
  }

  def writer[A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, X](f: X => (A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20))(key1: String, key2: String, key3: String, key4: String, key5: String, key6: String, key7: String, key8: String, key9: String, key10: String, key11: String, key12: String, key13: String, key14: String, key15: String, key16: String, key17: String, key18: String, key19: String, key20: String)(implicit
    A1: Writer[A1], A2: Writer[A2], A3: Writer[A3], A4: Writer[A4], A5: Writer[A5], A6: Writer[A6], A7: Writer[A7], A8: Writer[A8], A9: Writer[A9], A10: Writer[A10], A11: Writer[A11], A12: Writer[A12], A13: Writer[A13], A14: Writer[A14], A15: Writer[A15], A16: Writer[A16], A17: Writer[A17], A18: Writer[A18], A19: Writer[A19], A20: Writer[A20]
  ): Writer[X] =
    writer20[A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, X](f)(key1, key2, key3, key4, key5, key6, key7, key8, key9, key10, key11, key12, key13, key14, key15, key16, key17, key18, key19, key20)

  def writer20[A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, X](f: X => (A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20))(key1: String, key2: String, key3: String, key4: String, key5: String, key6: String, key7: String, key8: String, key9: String, key10: String, key11: String, key12: String, key13: String, key14: String, key15: String, key16: String, key17: String, key18: String, key19: String, key20: String)(implicit
    A1: Writer[A1], A2: Writer[A2], A3: Writer[A3], A4: Writer[A4], A5: Writer[A5], A6: Writer[A6], A7: Writer[A7], A8: Writer[A8], A9: Writer[A9], A10: Writer[A10], A11: Writer[A11], A12: Writer[A12], A13: Writer[A13], A14: Writer[A14], A15: Writer[A15], A16: Writer[A16], A17: Writer[A17], A18: Writer[A18], A19: Writer[A19], A20: Writer[A20]
  ): Writer[X] = new Writer[X] {
    def write(obj: X): JValue = {
      val (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20) = f(obj)
      JObject(
        (key1, A1.write(a1)) :: (key2, A2.write(a2)) :: (key3, A3.write(a3)) :: (key4, A4.write(a4)) :: (key5, A5.write(a5)) :: (key6, A6.write(a6)) :: (key7, A7.write(a7)) :: (key8, A8.write(a8)) :: (key9, A9.write(a9)) :: (key10, A10.write(a10)) :: (key11, A11.write(a11)) :: (key12, A12.write(a12)) :: (key13, A13.write(a13)) :: (key14, A14.write(a14)) :: (key15, A15.write(a15)) :: (key16, A16.write(a16)) :: (key17, A17.write(a17)) :: (key18, A18.write(a18)) :: (key19, A19.write(a19)) :: (key20, A20.write(a20)) :: Nil
      )
    }
  }

  def writer[A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, X](f: X => (A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21))(key1: String, key2: String, key3: String, key4: String, key5: String, key6: String, key7: String, key8: String, key9: String, key10: String, key11: String, key12: String, key13: String, key14: String, key15: String, key16: String, key17: String, key18: String, key19: String, key20: String, key21: String)(implicit
    A1: Writer[A1], A2: Writer[A2], A3: Writer[A3], A4: Writer[A4], A5: Writer[A5], A6: Writer[A6], A7: Writer[A7], A8: Writer[A8], A9: Writer[A9], A10: Writer[A10], A11: Writer[A11], A12: Writer[A12], A13: Writer[A13], A14: Writer[A14], A15: Writer[A15], A16: Writer[A16], A17: Writer[A17], A18: Writer[A18], A19: Writer[A19], A20: Writer[A20], A21: Writer[A21]
  ): Writer[X] =
    writer21[A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, X](f)(key1, key2, key3, key4, key5, key6, key7, key8, key9, key10, key11, key12, key13, key14, key15, key16, key17, key18, key19, key20, key21)

  def writer21[A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, X](f: X => (A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21))(key1: String, key2: String, key3: String, key4: String, key5: String, key6: String, key7: String, key8: String, key9: String, key10: String, key11: String, key12: String, key13: String, key14: String, key15: String, key16: String, key17: String, key18: String, key19: String, key20: String, key21: String)(implicit
    A1: Writer[A1], A2: Writer[A2], A3: Writer[A3], A4: Writer[A4], A5: Writer[A5], A6: Writer[A6], A7: Writer[A7], A8: Writer[A8], A9: Writer[A9], A10: Writer[A10], A11: Writer[A11], A12: Writer[A12], A13: Writer[A13], A14: Writer[A14], A15: Writer[A15], A16: Writer[A16], A17: Writer[A17], A18: Writer[A18], A19: Writer[A19], A20: Writer[A20], A21: Writer[A21]
  ): Writer[X] = new Writer[X] {
    def write(obj: X): JValue = {
      val (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21) = f(obj)
      JObject(
        (key1, A1.write(a1)) :: (key2, A2.write(a2)) :: (key3, A3.write(a3)) :: (key4, A4.write(a4)) :: (key5, A5.write(a5)) :: (key6, A6.write(a6)) :: (key7, A7.write(a7)) :: (key8, A8.write(a8)) :: (key9, A9.write(a9)) :: (key10, A10.write(a10)) :: (key11, A11.write(a11)) :: (key12, A12.write(a12)) :: (key13, A13.write(a13)) :: (key14, A14.write(a14)) :: (key15, A15.write(a15)) :: (key16, A16.write(a16)) :: (key17, A17.write(a17)) :: (key18, A18.write(a18)) :: (key19, A19.write(a19)) :: (key20, A20.write(a20)) :: (key21, A21.write(a21)) :: Nil
      )
    }
  }

  def writer[A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, X](f: X => (A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22))(key1: String, key2: String, key3: String, key4: String, key5: String, key6: String, key7: String, key8: String, key9: String, key10: String, key11: String, key12: String, key13: String, key14: String, key15: String, key16: String, key17: String, key18: String, key19: String, key20: String, key21: String, key22: String)(implicit
    A1: Writer[A1], A2: Writer[A2], A3: Writer[A3], A4: Writer[A4], A5: Writer[A5], A6: Writer[A6], A7: Writer[A7], A8: Writer[A8], A9: Writer[A9], A10: Writer[A10], A11: Writer[A11], A12: Writer[A12], A13: Writer[A13], A14: Writer[A14], A15: Writer[A15], A16: Writer[A16], A17: Writer[A17], A18: Writer[A18], A19: Writer[A19], A20: Writer[A20], A21: Writer[A21], A22: Writer[A22]
  ): Writer[X] =
    writer22[A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, X](f)(key1, key2, key3, key4, key5, key6, key7, key8, key9, key10, key11, key12, key13, key14, key15, key16, key17, key18, key19, key20, key21, key22)

  def writer22[A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, X](f: X => (A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22))(key1: String, key2: String, key3: String, key4: String, key5: String, key6: String, key7: String, key8: String, key9: String, key10: String, key11: String, key12: String, key13: String, key14: String, key15: String, key16: String, key17: String, key18: String, key19: String, key20: String, key21: String, key22: String)(implicit
    A1: Writer[A1], A2: Writer[A2], A3: Writer[A3], A4: Writer[A4], A5: Writer[A5], A6: Writer[A6], A7: Writer[A7], A8: Writer[A8], A9: Writer[A9], A10: Writer[A10], A11: Writer[A11], A12: Writer[A12], A13: Writer[A13], A14: Writer[A14], A15: Writer[A15], A16: Writer[A16], A17: Writer[A17], A18: Writer[A18], A19: Writer[A19], A20: Writer[A20], A21: Writer[A21], A22: Writer[A22]
  ): Writer[X] = new Writer[X] {
    def write(obj: X): JValue = {
      val (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22) = f(obj)
      JObject(
        (key1, A1.write(a1)) :: (key2, A2.write(a2)) :: (key3, A3.write(a3)) :: (key4, A4.write(a4)) :: (key5, A5.write(a5)) :: (key6, A6.write(a6)) :: (key7, A7.write(a7)) :: (key8, A8.write(a8)) :: (key9, A9.write(a9)) :: (key10, A10.write(a10)) :: (key11, A11.write(a11)) :: (key12, A12.write(a12)) :: (key13, A13.write(a13)) :: (key14, A14.write(a14)) :: (key15, A15.write(a15)) :: (key16, A16.write(a16)) :: (key17, A17.write(a17)) :: (key18, A18.write(a18)) :: (key19, A19.write(a19)) :: (key20, A20.write(a20)) :: (key21, A21.write(a21)) :: (key22, A22.write(a22)) :: Nil
      )
    }
  }


  def writerAuto[A1, A2, X <: Product](f: X => (A1, A2))(implicit
    A1: Writer[A1], A2: Writer[A2]
  ): Writer[X] =
    writerAuto2[A1, A2, X](f)

  def writerAuto2[A1, A2, X <: Product](f: X => (A1, A2))(implicit
    A1: Writer[A1], A2: Writer[A2]
  ): Writer[X] = new Writer[X] {
    def write(obj: X): JValue = {
      val (a1, a2) = f(obj)
      JObject(
        (obj.productElementName(0), A1.write(a1)) :: (obj.productElementName(1), A2.write(a2)) :: Nil
      )
    }
  }

  def writerAuto[A1, A2, A3, X <: Product](f: X => (A1, A2, A3))(implicit
    A1: Writer[A1], A2: Writer[A2], A3: Writer[A3]
  ): Writer[X] =
    writerAuto3[A1, A2, A3, X](f)

  def writerAuto3[A1, A2, A3, X <: Product](f: X => (A1, A2, A3))(implicit
    A1: Writer[A1], A2: Writer[A2], A3: Writer[A3]
  ): Writer[X] = new Writer[X] {
    def write(obj: X): JValue = {
      val (a1, a2, a3) = f(obj)
      JObject(
        (obj.productElementName(0), A1.write(a1)) :: (obj.productElementName(1), A2.write(a2)) :: (obj.productElementName(2), A3.write(a3)) :: Nil
      )
    }
  }

  def writerAuto[A1, A2, A3, A4, X <: Product](f: X => (A1, A2, A3, A4))(implicit
    A1: Writer[A1], A2: Writer[A2], A3: Writer[A3], A4: Writer[A4]
  ): Writer[X] =
    writerAuto4[A1, A2, A3, A4, X](f)

  def writerAuto4[A1, A2, A3, A4, X <: Product](f: X => (A1, A2, A3, A4))(implicit
    A1: Writer[A1], A2: Writer[A2], A3: Writer[A3], A4: Writer[A4]
  ): Writer[X] = new Writer[X] {
    def write(obj: X): JValue = {
      val (a1, a2, a3, a4) = f(obj)
      JObject(
        (obj.productElementName(0), A1.write(a1)) :: (obj.productElementName(1), A2.write(a2)) :: (obj.productElementName(2), A3.write(a3)) :: (obj.productElementName(3), A4.write(a4)) :: Nil
      )
    }
  }

  def writerAuto[A1, A2, A3, A4, A5, X <: Product](f: X => (A1, A2, A3, A4, A5))(implicit
    A1: Writer[A1], A2: Writer[A2], A3: Writer[A3], A4: Writer[A4], A5: Writer[A5]
  ): Writer[X] =
    writerAuto5[A1, A2, A3, A4, A5, X](f)

  def writerAuto5[A1, A2, A3, A4, A5, X <: Product](f: X => (A1, A2, A3, A4, A5))(implicit
    A1: Writer[A1], A2: Writer[A2], A3: Writer[A3], A4: Writer[A4], A5: Writer[A5]
  ): Writer[X] = new Writer[X] {
    def write(obj: X): JValue = {
      val (a1, a2, a3, a4, a5) = f(obj)
      JObject(
        (obj.productElementName(0), A1.write(a1)) :: (obj.productElementName(1), A2.write(a2)) :: (obj.productElementName(2), A3.write(a3)) :: (obj.productElementName(3), A4.write(a4)) :: (obj.productElementName(4), A5.write(a5)) :: Nil
      )
    }
  }

  def writerAuto[A1, A2, A3, A4, A5, A6, X <: Product](f: X => (A1, A2, A3, A4, A5, A6))(implicit
    A1: Writer[A1], A2: Writer[A2], A3: Writer[A3], A4: Writer[A4], A5: Writer[A5], A6: Writer[A6]
  ): Writer[X] =
    writerAuto6[A1, A2, A3, A4, A5, A6, X](f)

  def writerAuto6[A1, A2, A3, A4, A5, A6, X <: Product](f: X => (A1, A2, A3, A4, A5, A6))(implicit
    A1: Writer[A1], A2: Writer[A2], A3: Writer[A3], A4: Writer[A4], A5: Writer[A5], A6: Writer[A6]
  ): Writer[X] = new Writer[X] {
    def write(obj: X): JValue = {
      val (a1, a2, a3, a4, a5, a6) = f(obj)
      JObject(
        (obj.productElementName(0), A1.write(a1)) :: (obj.productElementName(1), A2.write(a2)) :: (obj.productElementName(2), A3.write(a3)) :: (obj.productElementName(3), A4.write(a4)) :: (obj.productElementName(4), A5.write(a5)) :: (obj.productElementName(5), A6.write(a6)) :: Nil
      )
    }
  }

  def writerAuto[A1, A2, A3, A4, A5, A6, A7, X <: Product](f: X => (A1, A2, A3, A4, A5, A6, A7))(implicit
    A1: Writer[A1], A2: Writer[A2], A3: Writer[A3], A4: Writer[A4], A5: Writer[A5], A6: Writer[A6], A7: Writer[A7]
  ): Writer[X] =
    writerAuto7[A1, A2, A3, A4, A5, A6, A7, X](f)

  def writerAuto7[A1, A2, A3, A4, A5, A6, A7, X <: Product](f: X => (A1, A2, A3, A4, A5, A6, A7))(implicit
    A1: Writer[A1], A2: Writer[A2], A3: Writer[A3], A4: Writer[A4], A5: Writer[A5], A6: Writer[A6], A7: Writer[A7]
  ): Writer[X] = new Writer[X] {
    def write(obj: X): JValue = {
      val (a1, a2, a3, a4, a5, a6, a7) = f(obj)
      JObject(
        (obj.productElementName(0), A1.write(a1)) :: (obj.productElementName(1), A2.write(a2)) :: (obj.productElementName(2), A3.write(a3)) :: (obj.productElementName(3), A4.write(a4)) :: (obj.productElementName(4), A5.write(a5)) :: (obj.productElementName(5), A6.write(a6)) :: (obj.productElementName(6), A7.write(a7)) :: Nil
      )
    }
  }

  def writerAuto[A1, A2, A3, A4, A5, A6, A7, A8, X <: Product](f: X => (A1, A2, A3, A4, A5, A6, A7, A8))(implicit
    A1: Writer[A1], A2: Writer[A2], A3: Writer[A3], A4: Writer[A4], A5: Writer[A5], A6: Writer[A6], A7: Writer[A7], A8: Writer[A8]
  ): Writer[X] =
    writerAuto8[A1, A2, A3, A4, A5, A6, A7, A8, X](f)

  def writerAuto8[A1, A2, A3, A4, A5, A6, A7, A8, X <: Product](f: X => (A1, A2, A3, A4, A5, A6, A7, A8))(implicit
    A1: Writer[A1], A2: Writer[A2], A3: Writer[A3], A4: Writer[A4], A5: Writer[A5], A6: Writer[A6], A7: Writer[A7], A8: Writer[A8]
  ): Writer[X] = new Writer[X] {
    def write(obj: X): JValue = {
      val (a1, a2, a3, a4, a5, a6, a7, a8) = f(obj)
      JObject(
        (obj.productElementName(0), A1.write(a1)) :: (obj.productElementName(1), A2.write(a2)) :: (obj.productElementName(2), A3.write(a3)) :: (obj.productElementName(3), A4.write(a4)) :: (obj.productElementName(4), A5.write(a5)) :: (obj.productElementName(5), A6.write(a6)) :: (obj.productElementName(6), A7.write(a7)) :: (obj.productElementName(7), A8.write(a8)) :: Nil
      )
    }
  }

  def writerAuto[A1, A2, A3, A4, A5, A6, A7, A8, A9, X <: Product](f: X => (A1, A2, A3, A4, A5, A6, A7, A8, A9))(implicit
    A1: Writer[A1], A2: Writer[A2], A3: Writer[A3], A4: Writer[A4], A5: Writer[A5], A6: Writer[A6], A7: Writer[A7], A8: Writer[A8], A9: Writer[A9]
  ): Writer[X] =
    writerAuto9[A1, A2, A3, A4, A5, A6, A7, A8, A9, X](f)

  def writerAuto9[A1, A2, A3, A4, A5, A6, A7, A8, A9, X <: Product](f: X => (A1, A2, A3, A4, A5, A6, A7, A8, A9))(implicit
    A1: Writer[A1], A2: Writer[A2], A3: Writer[A3], A4: Writer[A4], A5: Writer[A5], A6: Writer[A6], A7: Writer[A7], A8: Writer[A8], A9: Writer[A9]
  ): Writer[X] = new Writer[X] {
    def write(obj: X): JValue = {
      val (a1, a2, a3, a4, a5, a6, a7, a8, a9) = f(obj)
      JObject(
        (obj.productElementName(0), A1.write(a1)) :: (obj.productElementName(1), A2.write(a2)) :: (obj.productElementName(2), A3.write(a3)) :: (obj.productElementName(3), A4.write(a4)) :: (obj.productElementName(4), A5.write(a5)) :: (obj.productElementName(5), A6.write(a6)) :: (obj.productElementName(6), A7.write(a7)) :: (obj.productElementName(7), A8.write(a8)) :: (obj.productElementName(8), A9.write(a9)) :: Nil
      )
    }
  }

  def writerAuto[A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, X <: Product](f: X => (A1, A2, A3, A4, A5, A6, A7, A8, A9, A10))(implicit
    A1: Writer[A1], A2: Writer[A2], A3: Writer[A3], A4: Writer[A4], A5: Writer[A5], A6: Writer[A6], A7: Writer[A7], A8: Writer[A8], A9: Writer[A9], A10: Writer[A10]
  ): Writer[X] =
    writerAuto10[A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, X](f)

  def writerAuto10[A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, X <: Product](f: X => (A1, A2, A3, A4, A5, A6, A7, A8, A9, A10))(implicit
    A1: Writer[A1], A2: Writer[A2], A3: Writer[A3], A4: Writer[A4], A5: Writer[A5], A6: Writer[A6], A7: Writer[A7], A8: Writer[A8], A9: Writer[A9], A10: Writer[A10]
  ): Writer[X] = new Writer[X] {
    def write(obj: X): JValue = {
      val (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10) = f(obj)
      JObject(
        (obj.productElementName(0), A1.write(a1)) :: (obj.productElementName(1), A2.write(a2)) :: (obj.productElementName(2), A3.write(a3)) :: (obj.productElementName(3), A4.write(a4)) :: (obj.productElementName(4), A5.write(a5)) :: (obj.productElementName(5), A6.write(a6)) :: (obj.productElementName(6), A7.write(a7)) :: (obj.productElementName(7), A8.write(a8)) :: (obj.productElementName(8), A9.write(a9)) :: (obj.productElementName(9), A10.write(a10)) :: Nil
      )
    }
  }

  def writerAuto[A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, X <: Product](f: X => (A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11))(implicit
    A1: Writer[A1], A2: Writer[A2], A3: Writer[A3], A4: Writer[A4], A5: Writer[A5], A6: Writer[A6], A7: Writer[A7], A8: Writer[A8], A9: Writer[A9], A10: Writer[A10], A11: Writer[A11]
  ): Writer[X] =
    writerAuto11[A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, X](f)

  def writerAuto11[A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, X <: Product](f: X => (A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11))(implicit
    A1: Writer[A1], A2: Writer[A2], A3: Writer[A3], A4: Writer[A4], A5: Writer[A5], A6: Writer[A6], A7: Writer[A7], A8: Writer[A8], A9: Writer[A9], A10: Writer[A10], A11: Writer[A11]
  ): Writer[X] = new Writer[X] {
    def write(obj: X): JValue = {
      val (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11) = f(obj)
      JObject(
        (obj.productElementName(0), A1.write(a1)) :: (obj.productElementName(1), A2.write(a2)) :: (obj.productElementName(2), A3.write(a3)) :: (obj.productElementName(3), A4.write(a4)) :: (obj.productElementName(4), A5.write(a5)) :: (obj.productElementName(5), A6.write(a6)) :: (obj.productElementName(6), A7.write(a7)) :: (obj.productElementName(7), A8.write(a8)) :: (obj.productElementName(8), A9.write(a9)) :: (obj.productElementName(9), A10.write(a10)) :: (obj.productElementName(10), A11.write(a11)) :: Nil
      )
    }
  }

  def writerAuto[A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, X <: Product](f: X => (A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12))(implicit
    A1: Writer[A1], A2: Writer[A2], A3: Writer[A3], A4: Writer[A4], A5: Writer[A5], A6: Writer[A6], A7: Writer[A7], A8: Writer[A8], A9: Writer[A9], A10: Writer[A10], A11: Writer[A11], A12: Writer[A12]
  ): Writer[X] =
    writerAuto12[A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, X](f)

  def writerAuto12[A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, X <: Product](f: X => (A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12))(implicit
    A1: Writer[A1], A2: Writer[A2], A3: Writer[A3], A4: Writer[A4], A5: Writer[A5], A6: Writer[A6], A7: Writer[A7], A8: Writer[A8], A9: Writer[A9], A10: Writer[A10], A11: Writer[A11], A12: Writer[A12]
  ): Writer[X] = new Writer[X] {
    def write(obj: X): JValue = {
      val (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12) = f(obj)
      JObject(
        (obj.productElementName(0), A1.write(a1)) :: (obj.productElementName(1), A2.write(a2)) :: (obj.productElementName(2), A3.write(a3)) :: (obj.productElementName(3), A4.write(a4)) :: (obj.productElementName(4), A5.write(a5)) :: (obj.productElementName(5), A6.write(a6)) :: (obj.productElementName(6), A7.write(a7)) :: (obj.productElementName(7), A8.write(a8)) :: (obj.productElementName(8), A9.write(a9)) :: (obj.productElementName(9), A10.write(a10)) :: (obj.productElementName(10), A11.write(a11)) :: (obj.productElementName(11), A12.write(a12)) :: Nil
      )
    }
  }

  def writerAuto[A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, X <: Product](f: X => (A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13))(implicit
    A1: Writer[A1], A2: Writer[A2], A3: Writer[A3], A4: Writer[A4], A5: Writer[A5], A6: Writer[A6], A7: Writer[A7], A8: Writer[A8], A9: Writer[A9], A10: Writer[A10], A11: Writer[A11], A12: Writer[A12], A13: Writer[A13]
  ): Writer[X] =
    writerAuto13[A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, X](f)

  def writerAuto13[A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, X <: Product](f: X => (A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13))(implicit
    A1: Writer[A1], A2: Writer[A2], A3: Writer[A3], A4: Writer[A4], A5: Writer[A5], A6: Writer[A6], A7: Writer[A7], A8: Writer[A8], A9: Writer[A9], A10: Writer[A10], A11: Writer[A11], A12: Writer[A12], A13: Writer[A13]
  ): Writer[X] = new Writer[X] {
    def write(obj: X): JValue = {
      val (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13) = f(obj)
      JObject(
        (obj.productElementName(0), A1.write(a1)) :: (obj.productElementName(1), A2.write(a2)) :: (obj.productElementName(2), A3.write(a3)) :: (obj.productElementName(3), A4.write(a4)) :: (obj.productElementName(4), A5.write(a5)) :: (obj.productElementName(5), A6.write(a6)) :: (obj.productElementName(6), A7.write(a7)) :: (obj.productElementName(7), A8.write(a8)) :: (obj.productElementName(8), A9.write(a9)) :: (obj.productElementName(9), A10.write(a10)) :: (obj.productElementName(10), A11.write(a11)) :: (obj.productElementName(11), A12.write(a12)) :: (obj.productElementName(12), A13.write(a13)) :: Nil
      )
    }
  }

  def writerAuto[A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, X <: Product](f: X => (A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14))(implicit
    A1: Writer[A1], A2: Writer[A2], A3: Writer[A3], A4: Writer[A4], A5: Writer[A5], A6: Writer[A6], A7: Writer[A7], A8: Writer[A8], A9: Writer[A9], A10: Writer[A10], A11: Writer[A11], A12: Writer[A12], A13: Writer[A13], A14: Writer[A14]
  ): Writer[X] =
    writerAuto14[A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, X](f)

  def writerAuto14[A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, X <: Product](f: X => (A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14))(implicit
    A1: Writer[A1], A2: Writer[A2], A3: Writer[A3], A4: Writer[A4], A5: Writer[A5], A6: Writer[A6], A7: Writer[A7], A8: Writer[A8], A9: Writer[A9], A10: Writer[A10], A11: Writer[A11], A12: Writer[A12], A13: Writer[A13], A14: Writer[A14]
  ): Writer[X] = new Writer[X] {
    def write(obj: X): JValue = {
      val (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14) = f(obj)
      JObject(
        (obj.productElementName(0), A1.write(a1)) :: (obj.productElementName(1), A2.write(a2)) :: (obj.productElementName(2), A3.write(a3)) :: (obj.productElementName(3), A4.write(a4)) :: (obj.productElementName(4), A5.write(a5)) :: (obj.productElementName(5), A6.write(a6)) :: (obj.productElementName(6), A7.write(a7)) :: (obj.productElementName(7), A8.write(a8)) :: (obj.productElementName(8), A9.write(a9)) :: (obj.productElementName(9), A10.write(a10)) :: (obj.productElementName(10), A11.write(a11)) :: (obj.productElementName(11), A12.write(a12)) :: (obj.productElementName(12), A13.write(a13)) :: (obj.productElementName(13), A14.write(a14)) :: Nil
      )
    }
  }

  def writerAuto[A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, X <: Product](f: X => (A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15))(implicit
    A1: Writer[A1], A2: Writer[A2], A3: Writer[A3], A4: Writer[A4], A5: Writer[A5], A6: Writer[A6], A7: Writer[A7], A8: Writer[A8], A9: Writer[A9], A10: Writer[A10], A11: Writer[A11], A12: Writer[A12], A13: Writer[A13], A14: Writer[A14], A15: Writer[A15]
  ): Writer[X] =
    writerAuto15[A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, X](f)

  def writerAuto15[A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, X <: Product](f: X => (A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15))(implicit
    A1: Writer[A1], A2: Writer[A2], A3: Writer[A3], A4: Writer[A4], A5: Writer[A5], A6: Writer[A6], A7: Writer[A7], A8: Writer[A8], A9: Writer[A9], A10: Writer[A10], A11: Writer[A11], A12: Writer[A12], A13: Writer[A13], A14: Writer[A14], A15: Writer[A15]
  ): Writer[X] = new Writer[X] {
    def write(obj: X): JValue = {
      val (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15) = f(obj)
      JObject(
        (obj.productElementName(0), A1.write(a1)) :: (obj.productElementName(1), A2.write(a2)) :: (obj.productElementName(2), A3.write(a3)) :: (obj.productElementName(3), A4.write(a4)) :: (obj.productElementName(4), A5.write(a5)) :: (obj.productElementName(5), A6.write(a6)) :: (obj.productElementName(6), A7.write(a7)) :: (obj.productElementName(7), A8.write(a8)) :: (obj.productElementName(8), A9.write(a9)) :: (obj.productElementName(9), A10.write(a10)) :: (obj.productElementName(10), A11.write(a11)) :: (obj.productElementName(11), A12.write(a12)) :: (obj.productElementName(12), A13.write(a13)) :: (obj.productElementName(13), A14.write(a14)) :: (obj.productElementName(14), A15.write(a15)) :: Nil
      )
    }
  }

  def writerAuto[A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, X <: Product](f: X => (A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16))(implicit
    A1: Writer[A1], A2: Writer[A2], A3: Writer[A3], A4: Writer[A4], A5: Writer[A5], A6: Writer[A6], A7: Writer[A7], A8: Writer[A8], A9: Writer[A9], A10: Writer[A10], A11: Writer[A11], A12: Writer[A12], A13: Writer[A13], A14: Writer[A14], A15: Writer[A15], A16: Writer[A16]
  ): Writer[X] =
    writerAuto16[A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, X](f)

  def writerAuto16[A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, X <: Product](f: X => (A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16))(implicit
    A1: Writer[A1], A2: Writer[A2], A3: Writer[A3], A4: Writer[A4], A5: Writer[A5], A6: Writer[A6], A7: Writer[A7], A8: Writer[A8], A9: Writer[A9], A10: Writer[A10], A11: Writer[A11], A12: Writer[A12], A13: Writer[A13], A14: Writer[A14], A15: Writer[A15], A16: Writer[A16]
  ): Writer[X] = new Writer[X] {
    def write(obj: X): JValue = {
      val (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16) = f(obj)
      JObject(
        (obj.productElementName(0), A1.write(a1)) :: (obj.productElementName(1), A2.write(a2)) :: (obj.productElementName(2), A3.write(a3)) :: (obj.productElementName(3), A4.write(a4)) :: (obj.productElementName(4), A5.write(a5)) :: (obj.productElementName(5), A6.write(a6)) :: (obj.productElementName(6), A7.write(a7)) :: (obj.productElementName(7), A8.write(a8)) :: (obj.productElementName(8), A9.write(a9)) :: (obj.productElementName(9), A10.write(a10)) :: (obj.productElementName(10), A11.write(a11)) :: (obj.productElementName(11), A12.write(a12)) :: (obj.productElementName(12), A13.write(a13)) :: (obj.productElementName(13), A14.write(a14)) :: (obj.productElementName(14), A15.write(a15)) :: (obj.productElementName(15), A16.write(a16)) :: Nil
      )
    }
  }

  def writerAuto[A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, X <: Product](f: X => (A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17))(implicit
    A1: Writer[A1], A2: Writer[A2], A3: Writer[A3], A4: Writer[A4], A5: Writer[A5], A6: Writer[A6], A7: Writer[A7], A8: Writer[A8], A9: Writer[A9], A10: Writer[A10], A11: Writer[A11], A12: Writer[A12], A13: Writer[A13], A14: Writer[A14], A15: Writer[A15], A16: Writer[A16], A17: Writer[A17]
  ): Writer[X] =
    writerAuto17[A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, X](f)

  def writerAuto17[A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, X <: Product](f: X => (A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17))(implicit
    A1: Writer[A1], A2: Writer[A2], A3: Writer[A3], A4: Writer[A4], A5: Writer[A5], A6: Writer[A6], A7: Writer[A7], A8: Writer[A8], A9: Writer[A9], A10: Writer[A10], A11: Writer[A11], A12: Writer[A12], A13: Writer[A13], A14: Writer[A14], A15: Writer[A15], A16: Writer[A16], A17: Writer[A17]
  ): Writer[X] = new Writer[X] {
    def write(obj: X): JValue = {
      val (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17) = f(obj)
      JObject(
        (obj.productElementName(0), A1.write(a1)) :: (obj.productElementName(1), A2.write(a2)) :: (obj.productElementName(2), A3.write(a3)) :: (obj.productElementName(3), A4.write(a4)) :: (obj.productElementName(4), A5.write(a5)) :: (obj.productElementName(5), A6.write(a6)) :: (obj.productElementName(6), A7.write(a7)) :: (obj.productElementName(7), A8.write(a8)) :: (obj.productElementName(8), A9.write(a9)) :: (obj.productElementName(9), A10.write(a10)) :: (obj.productElementName(10), A11.write(a11)) :: (obj.productElementName(11), A12.write(a12)) :: (obj.productElementName(12), A13.write(a13)) :: (obj.productElementName(13), A14.write(a14)) :: (obj.productElementName(14), A15.write(a15)) :: (obj.productElementName(15), A16.write(a16)) :: (obj.productElementName(16), A17.write(a17)) :: Nil
      )
    }
  }

  def writerAuto[A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, X <: Product](f: X => (A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18))(implicit
    A1: Writer[A1], A2: Writer[A2], A3: Writer[A3], A4: Writer[A4], A5: Writer[A5], A6: Writer[A6], A7: Writer[A7], A8: Writer[A8], A9: Writer[A9], A10: Writer[A10], A11: Writer[A11], A12: Writer[A12], A13: Writer[A13], A14: Writer[A14], A15: Writer[A15], A16: Writer[A16], A17: Writer[A17], A18: Writer[A18]
  ): Writer[X] =
    writerAuto18[A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, X](f)

  def writerAuto18[A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, X <: Product](f: X => (A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18))(implicit
    A1: Writer[A1], A2: Writer[A2], A3: Writer[A3], A4: Writer[A4], A5: Writer[A5], A6: Writer[A6], A7: Writer[A7], A8: Writer[A8], A9: Writer[A9], A10: Writer[A10], A11: Writer[A11], A12: Writer[A12], A13: Writer[A13], A14: Writer[A14], A15: Writer[A15], A16: Writer[A16], A17: Writer[A17], A18: Writer[A18]
  ): Writer[X] = new Writer[X] {
    def write(obj: X): JValue = {
      val (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18) = f(obj)
      JObject(
        (obj.productElementName(0), A1.write(a1)) :: (obj.productElementName(1), A2.write(a2)) :: (obj.productElementName(2), A3.write(a3)) :: (obj.productElementName(3), A4.write(a4)) :: (obj.productElementName(4), A5.write(a5)) :: (obj.productElementName(5), A6.write(a6)) :: (obj.productElementName(6), A7.write(a7)) :: (obj.productElementName(7), A8.write(a8)) :: (obj.productElementName(8), A9.write(a9)) :: (obj.productElementName(9), A10.write(a10)) :: (obj.productElementName(10), A11.write(a11)) :: (obj.productElementName(11), A12.write(a12)) :: (obj.productElementName(12), A13.write(a13)) :: (obj.productElementName(13), A14.write(a14)) :: (obj.productElementName(14), A15.write(a15)) :: (obj.productElementName(15), A16.write(a16)) :: (obj.productElementName(16), A17.write(a17)) :: (obj.productElementName(17), A18.write(a18)) :: Nil
      )
    }
  }

  def writerAuto[A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, X <: Product](f: X => (A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19))(implicit
    A1: Writer[A1], A2: Writer[A2], A3: Writer[A3], A4: Writer[A4], A5: Writer[A5], A6: Writer[A6], A7: Writer[A7], A8: Writer[A8], A9: Writer[A9], A10: Writer[A10], A11: Writer[A11], A12: Writer[A12], A13: Writer[A13], A14: Writer[A14], A15: Writer[A15], A16: Writer[A16], A17: Writer[A17], A18: Writer[A18], A19: Writer[A19]
  ): Writer[X] =
    writerAuto19[A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, X](f)

  def writerAuto19[A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, X <: Product](f: X => (A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19))(implicit
    A1: Writer[A1], A2: Writer[A2], A3: Writer[A3], A4: Writer[A4], A5: Writer[A5], A6: Writer[A6], A7: Writer[A7], A8: Writer[A8], A9: Writer[A9], A10: Writer[A10], A11: Writer[A11], A12: Writer[A12], A13: Writer[A13], A14: Writer[A14], A15: Writer[A15], A16: Writer[A16], A17: Writer[A17], A18: Writer[A18], A19: Writer[A19]
  ): Writer[X] = new Writer[X] {
    def write(obj: X): JValue = {
      val (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19) = f(obj)
      JObject(
        (obj.productElementName(0), A1.write(a1)) :: (obj.productElementName(1), A2.write(a2)) :: (obj.productElementName(2), A3.write(a3)) :: (obj.productElementName(3), A4.write(a4)) :: (obj.productElementName(4), A5.write(a5)) :: (obj.productElementName(5), A6.write(a6)) :: (obj.productElementName(6), A7.write(a7)) :: (obj.productElementName(7), A8.write(a8)) :: (obj.productElementName(8), A9.write(a9)) :: (obj.productElementName(9), A10.write(a10)) :: (obj.productElementName(10), A11.write(a11)) :: (obj.productElementName(11), A12.write(a12)) :: (obj.productElementName(12), A13.write(a13)) :: (obj.productElementName(13), A14.write(a14)) :: (obj.productElementName(14), A15.write(a15)) :: (obj.productElementName(15), A16.write(a16)) :: (obj.productElementName(16), A17.write(a17)) :: (obj.productElementName(17), A18.write(a18)) :: (obj.productElementName(18), A19.write(a19)) :: Nil
      )
    }
  }

  def writerAuto[A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, X <: Product](f: X => (A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20))(implicit
    A1: Writer[A1], A2: Writer[A2], A3: Writer[A3], A4: Writer[A4], A5: Writer[A5], A6: Writer[A6], A7: Writer[A7], A8: Writer[A8], A9: Writer[A9], A10: Writer[A10], A11: Writer[A11], A12: Writer[A12], A13: Writer[A13], A14: Writer[A14], A15: Writer[A15], A16: Writer[A16], A17: Writer[A17], A18: Writer[A18], A19: Writer[A19], A20: Writer[A20]
  ): Writer[X] =
    writerAuto20[A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, X](f)

  def writerAuto20[A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, X <: Product](f: X => (A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20))(implicit
    A1: Writer[A1], A2: Writer[A2], A3: Writer[A3], A4: Writer[A4], A5: Writer[A5], A6: Writer[A6], A7: Writer[A7], A8: Writer[A8], A9: Writer[A9], A10: Writer[A10], A11: Writer[A11], A12: Writer[A12], A13: Writer[A13], A14: Writer[A14], A15: Writer[A15], A16: Writer[A16], A17: Writer[A17], A18: Writer[A18], A19: Writer[A19], A20: Writer[A20]
  ): Writer[X] = new Writer[X] {
    def write(obj: X): JValue = {
      val (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20) = f(obj)
      JObject(
        (obj.productElementName(0), A1.write(a1)) :: (obj.productElementName(1), A2.write(a2)) :: (obj.productElementName(2), A3.write(a3)) :: (obj.productElementName(3), A4.write(a4)) :: (obj.productElementName(4), A5.write(a5)) :: (obj.productElementName(5), A6.write(a6)) :: (obj.productElementName(6), A7.write(a7)) :: (obj.productElementName(7), A8.write(a8)) :: (obj.productElementName(8), A9.write(a9)) :: (obj.productElementName(9), A10.write(a10)) :: (obj.productElementName(10), A11.write(a11)) :: (obj.productElementName(11), A12.write(a12)) :: (obj.productElementName(12), A13.write(a13)) :: (obj.productElementName(13), A14.write(a14)) :: (obj.productElementName(14), A15.write(a15)) :: (obj.productElementName(15), A16.write(a16)) :: (obj.productElementName(16), A17.write(a17)) :: (obj.productElementName(17), A18.write(a18)) :: (obj.productElementName(18), A19.write(a19)) :: (obj.productElementName(19), A20.write(a20)) :: Nil
      )
    }
  }

  def writerAuto[A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, X <: Product](f: X => (A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21))(implicit
    A1: Writer[A1], A2: Writer[A2], A3: Writer[A3], A4: Writer[A4], A5: Writer[A5], A6: Writer[A6], A7: Writer[A7], A8: Writer[A8], A9: Writer[A9], A10: Writer[A10], A11: Writer[A11], A12: Writer[A12], A13: Writer[A13], A14: Writer[A14], A15: Writer[A15], A16: Writer[A16], A17: Writer[A17], A18: Writer[A18], A19: Writer[A19], A20: Writer[A20], A21: Writer[A21]
  ): Writer[X] =
    writerAuto21[A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, X](f)

  def writerAuto21[A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, X <: Product](f: X => (A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21))(implicit
    A1: Writer[A1], A2: Writer[A2], A3: Writer[A3], A4: Writer[A4], A5: Writer[A5], A6: Writer[A6], A7: Writer[A7], A8: Writer[A8], A9: Writer[A9], A10: Writer[A10], A11: Writer[A11], A12: Writer[A12], A13: Writer[A13], A14: Writer[A14], A15: Writer[A15], A16: Writer[A16], A17: Writer[A17], A18: Writer[A18], A19: Writer[A19], A20: Writer[A20], A21: Writer[A21]
  ): Writer[X] = new Writer[X] {
    def write(obj: X): JValue = {
      val (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21) = f(obj)
      JObject(
        (obj.productElementName(0), A1.write(a1)) :: (obj.productElementName(1), A2.write(a2)) :: (obj.productElementName(2), A3.write(a3)) :: (obj.productElementName(3), A4.write(a4)) :: (obj.productElementName(4), A5.write(a5)) :: (obj.productElementName(5), A6.write(a6)) :: (obj.productElementName(6), A7.write(a7)) :: (obj.productElementName(7), A8.write(a8)) :: (obj.productElementName(8), A9.write(a9)) :: (obj.productElementName(9), A10.write(a10)) :: (obj.productElementName(10), A11.write(a11)) :: (obj.productElementName(11), A12.write(a12)) :: (obj.productElementName(12), A13.write(a13)) :: (obj.productElementName(13), A14.write(a14)) :: (obj.productElementName(14), A15.write(a15)) :: (obj.productElementName(15), A16.write(a16)) :: (obj.productElementName(16), A17.write(a17)) :: (obj.productElementName(17), A18.write(a18)) :: (obj.productElementName(18), A19.write(a19)) :: (obj.productElementName(19), A20.write(a20)) :: (obj.productElementName(20), A21.write(a21)) :: Nil
      )
    }
  }

  def writerAuto[A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, X <: Product](f: X => (A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22))(implicit
    A1: Writer[A1], A2: Writer[A2], A3: Writer[A3], A4: Writer[A4], A5: Writer[A5], A6: Writer[A6], A7: Writer[A7], A8: Writer[A8], A9: Writer[A9], A10: Writer[A10], A11: Writer[A11], A12: Writer[A12], A13: Writer[A13], A14: Writer[A14], A15: Writer[A15], A16: Writer[A16], A17: Writer[A17], A18: Writer[A18], A19: Writer[A19], A20: Writer[A20], A21: Writer[A21], A22: Writer[A22]
  ): Writer[X] =
    writerAuto22[A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, X](f)

  def writerAuto22[A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, X <: Product](f: X => (A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22))(implicit
    A1: Writer[A1], A2: Writer[A2], A3: Writer[A3], A4: Writer[A4], A5: Writer[A5], A6: Writer[A6], A7: Writer[A7], A8: Writer[A8], A9: Writer[A9], A10: Writer[A10], A11: Writer[A11], A12: Writer[A12], A13: Writer[A13], A14: Writer[A14], A15: Writer[A15], A16: Writer[A16], A17: Writer[A17], A18: Writer[A18], A19: Writer[A19], A20: Writer[A20], A21: Writer[A21], A22: Writer[A22]
  ): Writer[X] = new Writer[X] {
    def write(obj: X): JValue = {
      val (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22) = f(obj)
      JObject(
        (obj.productElementName(0), A1.write(a1)) :: (obj.productElementName(1), A2.write(a2)) :: (obj.productElementName(2), A3.write(a3)) :: (obj.productElementName(3), A4.write(a4)) :: (obj.productElementName(4), A5.write(a5)) :: (obj.productElementName(5), A6.write(a6)) :: (obj.productElementName(6), A7.write(a7)) :: (obj.productElementName(7), A8.write(a8)) :: (obj.productElementName(8), A9.write(a9)) :: (obj.productElementName(9), A10.write(a10)) :: (obj.productElementName(10), A11.write(a11)) :: (obj.productElementName(11), A12.write(a12)) :: (obj.productElementName(12), A13.write(a13)) :: (obj.productElementName(13), A14.write(a14)) :: (obj.productElementName(14), A15.write(a15)) :: (obj.productElementName(15), A16.write(a16)) :: (obj.productElementName(16), A17.write(a17)) :: (obj.productElementName(17), A18.write(a18)) :: (obj.productElementName(18), A19.write(a19)) :: (obj.productElementName(19), A20.write(a20)) :: (obj.productElementName(20), A21.write(a21)) :: (obj.productElementName(21), A22.write(a22)) :: Nil
      )
    }
  }

}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy