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

org.rogach.scallop.ScallopConfValidations.scala Maven / Gradle / Ivy

There is a newer version: 5.1.0
Show newest version
// auto-generated by sbt-boilerplate
package org.rogach.scallop

/** Helper trait for generaton of `validate` methods on ScallopConf. */
trait ScallopConfValidations { this: ScallopConfBase =>

  protected var validations: List[() => Either[String, Unit]] = Nil

  
  /** Adds a validation function to this configuration. This function will be run after all other verification steps.
    * Automatically defines co-dependent relationship on these options.
    * @param fn Validation function. In case of error, it should return Left with the error message.
    */
  def validate[A1](o1: ScallopOption[A1])(fn: (A1) => Either[String, Unit]): Unit = {
    allDefinedOrUndefined(o1)
    validations :+= { () =>
      if (List(o1.toOption).forall(_.isDefined)) {
        fn(o1())
      } else {
        Right(())
      }
    }
  }
  
  /** Adds a validation function to this configuration. This function will be run after all other verification steps.
    * Automatically defines co-dependent relationship on these options.
    * @param fn Validation function. In case of error, it should return Left with the error message.
    */
  def validate[A1, A2](o1: ScallopOption[A1], o2: ScallopOption[A2])(fn: (A1, A2) => Either[String, Unit]): Unit = {
    allDefinedOrUndefined(o1, o2)
    validations :+= { () =>
      if (List(o1.toOption, o2.toOption).forall(_.isDefined)) {
        fn(o1(), o2())
      } else {
        Right(())
      }
    }
  }
  
  /** Adds a validation function to this configuration. This function will be run after all other verification steps.
    * Automatically defines co-dependent relationship on these options.
    * @param fn Validation function. In case of error, it should return Left with the error message.
    */
  def validate[A1, A2, A3](o1: ScallopOption[A1], o2: ScallopOption[A2], o3: ScallopOption[A3])(fn: (A1, A2, A3) => Either[String, Unit]): Unit = {
    allDefinedOrUndefined(o1, o2, o3)
    validations :+= { () =>
      if (List(o1.toOption, o2.toOption, o3.toOption).forall(_.isDefined)) {
        fn(o1(), o2(), o3())
      } else {
        Right(())
      }
    }
  }
  
  /** Adds a validation function to this configuration. This function will be run after all other verification steps.
    * Automatically defines co-dependent relationship on these options.
    * @param fn Validation function. In case of error, it should return Left with the error message.
    */
  def validate[A1, A2, A3, A4](o1: ScallopOption[A1], o2: ScallopOption[A2], o3: ScallopOption[A3], o4: ScallopOption[A4])(fn: (A1, A2, A3, A4) => Either[String, Unit]): Unit = {
    allDefinedOrUndefined(o1, o2, o3, o4)
    validations :+= { () =>
      if (List(o1.toOption, o2.toOption, o3.toOption, o4.toOption).forall(_.isDefined)) {
        fn(o1(), o2(), o3(), o4())
      } else {
        Right(())
      }
    }
  }
  
  /** Adds a validation function to this configuration. This function will be run after all other verification steps.
    * Automatically defines co-dependent relationship on these options.
    * @param fn Validation function. In case of error, it should return Left with the error message.
    */
  def validate[A1, A2, A3, A4, A5](o1: ScallopOption[A1], o2: ScallopOption[A2], o3: ScallopOption[A3], o4: ScallopOption[A4], o5: ScallopOption[A5])(fn: (A1, A2, A3, A4, A5) => Either[String, Unit]): Unit = {
    allDefinedOrUndefined(o1, o2, o3, o4, o5)
    validations :+= { () =>
      if (List(o1.toOption, o2.toOption, o3.toOption, o4.toOption, o5.toOption).forall(_.isDefined)) {
        fn(o1(), o2(), o3(), o4(), o5())
      } else {
        Right(())
      }
    }
  }
  
  /** Adds a validation function to this configuration. This function will be run after all other verification steps.
    * Automatically defines co-dependent relationship on these options.
    * @param fn Validation function. In case of error, it should return Left with the error message.
    */
  def validate[A1, A2, A3, A4, A5, A6](o1: ScallopOption[A1], o2: ScallopOption[A2], o3: ScallopOption[A3], o4: ScallopOption[A4], o5: ScallopOption[A5], o6: ScallopOption[A6])(fn: (A1, A2, A3, A4, A5, A6) => Either[String, Unit]): Unit = {
    allDefinedOrUndefined(o1, o2, o3, o4, o5, o6)
    validations :+= { () =>
      if (List(o1.toOption, o2.toOption, o3.toOption, o4.toOption, o5.toOption, o6.toOption).forall(_.isDefined)) {
        fn(o1(), o2(), o3(), o4(), o5(), o6())
      } else {
        Right(())
      }
    }
  }
  
  /** Adds a validation function to this configuration. This function will be run after all other verification steps.
    * Automatically defines co-dependent relationship on these options.
    * @param fn Validation function. In case of error, it should return Left with the error message.
    */
  def validate[A1, A2, A3, A4, A5, A6, A7](o1: ScallopOption[A1], o2: ScallopOption[A2], o3: ScallopOption[A3], o4: ScallopOption[A4], o5: ScallopOption[A5], o6: ScallopOption[A6], o7: ScallopOption[A7])(fn: (A1, A2, A3, A4, A5, A6, A7) => Either[String, Unit]): Unit = {
    allDefinedOrUndefined(o1, o2, o3, o4, o5, o6, o7)
    validations :+= { () =>
      if (List(o1.toOption, o2.toOption, o3.toOption, o4.toOption, o5.toOption, o6.toOption, o7.toOption).forall(_.isDefined)) {
        fn(o1(), o2(), o3(), o4(), o5(), o6(), o7())
      } else {
        Right(())
      }
    }
  }
  
  /** Adds a validation function to this configuration. This function will be run after all other verification steps.
    * Automatically defines co-dependent relationship on these options.
    * @param fn Validation function. In case of error, it should return Left with the error message.
    */
  def validate[A1, A2, A3, A4, A5, A6, A7, A8](o1: ScallopOption[A1], o2: ScallopOption[A2], o3: ScallopOption[A3], o4: ScallopOption[A4], o5: ScallopOption[A5], o6: ScallopOption[A6], o7: ScallopOption[A7], o8: ScallopOption[A8])(fn: (A1, A2, A3, A4, A5, A6, A7, A8) => Either[String, Unit]): Unit = {
    allDefinedOrUndefined(o1, o2, o3, o4, o5, o6, o7, o8)
    validations :+= { () =>
      if (List(o1.toOption, o2.toOption, o3.toOption, o4.toOption, o5.toOption, o6.toOption, o7.toOption, o8.toOption).forall(_.isDefined)) {
        fn(o1(), o2(), o3(), o4(), o5(), o6(), o7(), o8())
      } else {
        Right(())
      }
    }
  }
  
  /** Adds a validation function to this configuration. This function will be run after all other verification steps.
    * Automatically defines co-dependent relationship on these options.
    * @param fn Validation function. In case of error, it should return Left with the error message.
    */
  def validate[A1, A2, A3, A4, A5, A6, A7, A8, A9](o1: ScallopOption[A1], o2: ScallopOption[A2], o3: ScallopOption[A3], o4: ScallopOption[A4], o5: ScallopOption[A5], o6: ScallopOption[A6], o7: ScallopOption[A7], o8: ScallopOption[A8], o9: ScallopOption[A9])(fn: (A1, A2, A3, A4, A5, A6, A7, A8, A9) => Either[String, Unit]): Unit = {
    allDefinedOrUndefined(o1, o2, o3, o4, o5, o6, o7, o8, o9)
    validations :+= { () =>
      if (List(o1.toOption, o2.toOption, o3.toOption, o4.toOption, o5.toOption, o6.toOption, o7.toOption, o8.toOption, o9.toOption).forall(_.isDefined)) {
        fn(o1(), o2(), o3(), o4(), o5(), o6(), o7(), o8(), o9())
      } else {
        Right(())
      }
    }
  }
  
  /** Adds a validation function to this configuration. This function will be run after all other verification steps.
    * Automatically defines co-dependent relationship on these options.
    * @param fn Validation function. In case of error, it should return Left with the error message.
    */
  def validate[A1, A2, A3, A4, A5, A6, A7, A8, A9, A10](o1: ScallopOption[A1], o2: ScallopOption[A2], o3: ScallopOption[A3], o4: ScallopOption[A4], o5: ScallopOption[A5], o6: ScallopOption[A6], o7: ScallopOption[A7], o8: ScallopOption[A8], o9: ScallopOption[A9], o10: ScallopOption[A10])(fn: (A1, A2, A3, A4, A5, A6, A7, A8, A9, A10) => Either[String, Unit]): Unit = {
    allDefinedOrUndefined(o1, o2, o3, o4, o5, o6, o7, o8, o9, o10)
    validations :+= { () =>
      if (List(o1.toOption, o2.toOption, o3.toOption, o4.toOption, o5.toOption, o6.toOption, o7.toOption, o8.toOption, o9.toOption, o10.toOption).forall(_.isDefined)) {
        fn(o1(), o2(), o3(), o4(), o5(), o6(), o7(), o8(), o9(), o10())
      } else {
        Right(())
      }
    }
  }
  
  /** Adds a validation function to this configuration. This function will be run after all other verification steps.
    * Automatically defines co-dependent relationship on these options.
    * @param fn Validation function. In case of error, it should return Left with the error message.
    */
  def validate[A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11](o1: ScallopOption[A1], o2: ScallopOption[A2], o3: ScallopOption[A3], o4: ScallopOption[A4], o5: ScallopOption[A5], o6: ScallopOption[A6], o7: ScallopOption[A7], o8: ScallopOption[A8], o9: ScallopOption[A9], o10: ScallopOption[A10], o11: ScallopOption[A11])(fn: (A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11) => Either[String, Unit]): Unit = {
    allDefinedOrUndefined(o1, o2, o3, o4, o5, o6, o7, o8, o9, o10, o11)
    validations :+= { () =>
      if (List(o1.toOption, o2.toOption, o3.toOption, o4.toOption, o5.toOption, o6.toOption, o7.toOption, o8.toOption, o9.toOption, o10.toOption, o11.toOption).forall(_.isDefined)) {
        fn(o1(), o2(), o3(), o4(), o5(), o6(), o7(), o8(), o9(), o10(), o11())
      } else {
        Right(())
      }
    }
  }
  
  /** Adds a validation function to this configuration. This function will be run after all other verification steps.
    * Automatically defines co-dependent relationship on these options.
    * @param fn Validation function. In case of error, it should return Left with the error message.
    */
  def validate[A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12](o1: ScallopOption[A1], o2: ScallopOption[A2], o3: ScallopOption[A3], o4: ScallopOption[A4], o5: ScallopOption[A5], o6: ScallopOption[A6], o7: ScallopOption[A7], o8: ScallopOption[A8], o9: ScallopOption[A9], o10: ScallopOption[A10], o11: ScallopOption[A11], o12: ScallopOption[A12])(fn: (A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12) => Either[String, Unit]): Unit = {
    allDefinedOrUndefined(o1, o2, o3, o4, o5, o6, o7, o8, o9, o10, o11, o12)
    validations :+= { () =>
      if (List(o1.toOption, o2.toOption, o3.toOption, o4.toOption, o5.toOption, o6.toOption, o7.toOption, o8.toOption, o9.toOption, o10.toOption, o11.toOption, o12.toOption).forall(_.isDefined)) {
        fn(o1(), o2(), o3(), o4(), o5(), o6(), o7(), o8(), o9(), o10(), o11(), o12())
      } else {
        Right(())
      }
    }
  }
  
  /** Adds a validation function to this configuration. This function will be run after all other verification steps.
    * Automatically defines co-dependent relationship on these options.
    * @param fn Validation function. In case of error, it should return Left with the error message.
    */
  def validate[A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13](o1: ScallopOption[A1], o2: ScallopOption[A2], o3: ScallopOption[A3], o4: ScallopOption[A4], o5: ScallopOption[A5], o6: ScallopOption[A6], o7: ScallopOption[A7], o8: ScallopOption[A8], o9: ScallopOption[A9], o10: ScallopOption[A10], o11: ScallopOption[A11], o12: ScallopOption[A12], o13: ScallopOption[A13])(fn: (A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13) => Either[String, Unit]): Unit = {
    allDefinedOrUndefined(o1, o2, o3, o4, o5, o6, o7, o8, o9, o10, o11, o12, o13)
    validations :+= { () =>
      if (List(o1.toOption, o2.toOption, o3.toOption, o4.toOption, o5.toOption, o6.toOption, o7.toOption, o8.toOption, o9.toOption, o10.toOption, o11.toOption, o12.toOption, o13.toOption).forall(_.isDefined)) {
        fn(o1(), o2(), o3(), o4(), o5(), o6(), o7(), o8(), o9(), o10(), o11(), o12(), o13())
      } else {
        Right(())
      }
    }
  }
  
  /** Adds a validation function to this configuration. This function will be run after all other verification steps.
    * Automatically defines co-dependent relationship on these options.
    * @param fn Validation function. In case of error, it should return Left with the error message.
    */
  def validate[A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14](o1: ScallopOption[A1], o2: ScallopOption[A2], o3: ScallopOption[A3], o4: ScallopOption[A4], o5: ScallopOption[A5], o6: ScallopOption[A6], o7: ScallopOption[A7], o8: ScallopOption[A8], o9: ScallopOption[A9], o10: ScallopOption[A10], o11: ScallopOption[A11], o12: ScallopOption[A12], o13: ScallopOption[A13], o14: ScallopOption[A14])(fn: (A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14) => Either[String, Unit]): Unit = {
    allDefinedOrUndefined(o1, o2, o3, o4, o5, o6, o7, o8, o9, o10, o11, o12, o13, o14)
    validations :+= { () =>
      if (List(o1.toOption, o2.toOption, o3.toOption, o4.toOption, o5.toOption, o6.toOption, o7.toOption, o8.toOption, o9.toOption, o10.toOption, o11.toOption, o12.toOption, o13.toOption, o14.toOption).forall(_.isDefined)) {
        fn(o1(), o2(), o3(), o4(), o5(), o6(), o7(), o8(), o9(), o10(), o11(), o12(), o13(), o14())
      } else {
        Right(())
      }
    }
  }
  
  /** Adds a validation function to this configuration. This function will be run after all other verification steps.
    * Automatically defines co-dependent relationship on these options.
    * @param fn Validation function. In case of error, it should return Left with the error message.
    */
  def validate[A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15](o1: ScallopOption[A1], o2: ScallopOption[A2], o3: ScallopOption[A3], o4: ScallopOption[A4], o5: ScallopOption[A5], o6: ScallopOption[A6], o7: ScallopOption[A7], o8: ScallopOption[A8], o9: ScallopOption[A9], o10: ScallopOption[A10], o11: ScallopOption[A11], o12: ScallopOption[A12], o13: ScallopOption[A13], o14: ScallopOption[A14], o15: ScallopOption[A15])(fn: (A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15) => Either[String, Unit]): Unit = {
    allDefinedOrUndefined(o1, o2, o3, o4, o5, o6, o7, o8, o9, o10, o11, o12, o13, o14, o15)
    validations :+= { () =>
      if (List(o1.toOption, o2.toOption, o3.toOption, o4.toOption, o5.toOption, o6.toOption, o7.toOption, o8.toOption, o9.toOption, o10.toOption, o11.toOption, o12.toOption, o13.toOption, o14.toOption, o15.toOption).forall(_.isDefined)) {
        fn(o1(), o2(), o3(), o4(), o5(), o6(), o7(), o8(), o9(), o10(), o11(), o12(), o13(), o14(), o15())
      } else {
        Right(())
      }
    }
  }
  
  /** Adds a validation function to this configuration. This function will be run after all other verification steps.
    * Automatically defines co-dependent relationship on these options.
    * @param fn Validation function. In case of error, it should return Left with the error message.
    */
  def validate[A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16](o1: ScallopOption[A1], o2: ScallopOption[A2], o3: ScallopOption[A3], o4: ScallopOption[A4], o5: ScallopOption[A5], o6: ScallopOption[A6], o7: ScallopOption[A7], o8: ScallopOption[A8], o9: ScallopOption[A9], o10: ScallopOption[A10], o11: ScallopOption[A11], o12: ScallopOption[A12], o13: ScallopOption[A13], o14: ScallopOption[A14], o15: ScallopOption[A15], o16: ScallopOption[A16])(fn: (A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16) => Either[String, Unit]): Unit = {
    allDefinedOrUndefined(o1, o2, o3, o4, o5, o6, o7, o8, o9, o10, o11, o12, o13, o14, o15, o16)
    validations :+= { () =>
      if (List(o1.toOption, o2.toOption, o3.toOption, o4.toOption, o5.toOption, o6.toOption, o7.toOption, o8.toOption, o9.toOption, o10.toOption, o11.toOption, o12.toOption, o13.toOption, o14.toOption, o15.toOption, o16.toOption).forall(_.isDefined)) {
        fn(o1(), o2(), o3(), o4(), o5(), o6(), o7(), o8(), o9(), o10(), o11(), o12(), o13(), o14(), o15(), o16())
      } else {
        Right(())
      }
    }
  }
  
  /** Adds a validation function to this configuration. This function will be run after all other verification steps.
    * Automatically defines co-dependent relationship on these options.
    * @param fn Validation function. In case of error, it should return Left with the error message.
    */
  def validate[A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17](o1: ScallopOption[A1], o2: ScallopOption[A2], o3: ScallopOption[A3], o4: ScallopOption[A4], o5: ScallopOption[A5], o6: ScallopOption[A6], o7: ScallopOption[A7], o8: ScallopOption[A8], o9: ScallopOption[A9], o10: ScallopOption[A10], o11: ScallopOption[A11], o12: ScallopOption[A12], o13: ScallopOption[A13], o14: ScallopOption[A14], o15: ScallopOption[A15], o16: ScallopOption[A16], o17: ScallopOption[A17])(fn: (A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17) => Either[String, Unit]): Unit = {
    allDefinedOrUndefined(o1, o2, o3, o4, o5, o6, o7, o8, o9, o10, o11, o12, o13, o14, o15, o16, o17)
    validations :+= { () =>
      if (List(o1.toOption, o2.toOption, o3.toOption, o4.toOption, o5.toOption, o6.toOption, o7.toOption, o8.toOption, o9.toOption, o10.toOption, o11.toOption, o12.toOption, o13.toOption, o14.toOption, o15.toOption, o16.toOption, o17.toOption).forall(_.isDefined)) {
        fn(o1(), o2(), o3(), o4(), o5(), o6(), o7(), o8(), o9(), o10(), o11(), o12(), o13(), o14(), o15(), o16(), o17())
      } else {
        Right(())
      }
    }
  }
  
  /** Adds a validation function to this configuration. This function will be run after all other verification steps.
    * Automatically defines co-dependent relationship on these options.
    * @param fn Validation function. In case of error, it should return Left with the error message.
    */
  def validate[A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18](o1: ScallopOption[A1], o2: ScallopOption[A2], o3: ScallopOption[A3], o4: ScallopOption[A4], o5: ScallopOption[A5], o6: ScallopOption[A6], o7: ScallopOption[A7], o8: ScallopOption[A8], o9: ScallopOption[A9], o10: ScallopOption[A10], o11: ScallopOption[A11], o12: ScallopOption[A12], o13: ScallopOption[A13], o14: ScallopOption[A14], o15: ScallopOption[A15], o16: ScallopOption[A16], o17: ScallopOption[A17], o18: ScallopOption[A18])(fn: (A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18) => Either[String, Unit]): Unit = {
    allDefinedOrUndefined(o1, o2, o3, o4, o5, o6, o7, o8, o9, o10, o11, o12, o13, o14, o15, o16, o17, o18)
    validations :+= { () =>
      if (List(o1.toOption, o2.toOption, o3.toOption, o4.toOption, o5.toOption, o6.toOption, o7.toOption, o8.toOption, o9.toOption, o10.toOption, o11.toOption, o12.toOption, o13.toOption, o14.toOption, o15.toOption, o16.toOption, o17.toOption, o18.toOption).forall(_.isDefined)) {
        fn(o1(), o2(), o3(), o4(), o5(), o6(), o7(), o8(), o9(), o10(), o11(), o12(), o13(), o14(), o15(), o16(), o17(), o18())
      } else {
        Right(())
      }
    }
  }
  
  /** Adds a validation function to this configuration. This function will be run after all other verification steps.
    * Automatically defines co-dependent relationship on these options.
    * @param fn Validation function. In case of error, it should return Left with the error message.
    */
  def validate[A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19](o1: ScallopOption[A1], o2: ScallopOption[A2], o3: ScallopOption[A3], o4: ScallopOption[A4], o5: ScallopOption[A5], o6: ScallopOption[A6], o7: ScallopOption[A7], o8: ScallopOption[A8], o9: ScallopOption[A9], o10: ScallopOption[A10], o11: ScallopOption[A11], o12: ScallopOption[A12], o13: ScallopOption[A13], o14: ScallopOption[A14], o15: ScallopOption[A15], o16: ScallopOption[A16], o17: ScallopOption[A17], o18: ScallopOption[A18], o19: ScallopOption[A19])(fn: (A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19) => Either[String, Unit]): Unit = {
    allDefinedOrUndefined(o1, o2, o3, o4, o5, o6, o7, o8, o9, o10, o11, o12, o13, o14, o15, o16, o17, o18, o19)
    validations :+= { () =>
      if (List(o1.toOption, o2.toOption, o3.toOption, o4.toOption, o5.toOption, o6.toOption, o7.toOption, o8.toOption, o9.toOption, o10.toOption, o11.toOption, o12.toOption, o13.toOption, o14.toOption, o15.toOption, o16.toOption, o17.toOption, o18.toOption, o19.toOption).forall(_.isDefined)) {
        fn(o1(), o2(), o3(), o4(), o5(), o6(), o7(), o8(), o9(), o10(), o11(), o12(), o13(), o14(), o15(), o16(), o17(), o18(), o19())
      } else {
        Right(())
      }
    }
  }
  
  /** Adds a validation function to this configuration. This function will be run after all other verification steps.
    * Automatically defines co-dependent relationship on these options.
    * @param fn Validation function. In case of error, it should return Left with the error message.
    */
  def validate[A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20](o1: ScallopOption[A1], o2: ScallopOption[A2], o3: ScallopOption[A3], o4: ScallopOption[A4], o5: ScallopOption[A5], o6: ScallopOption[A6], o7: ScallopOption[A7], o8: ScallopOption[A8], o9: ScallopOption[A9], o10: ScallopOption[A10], o11: ScallopOption[A11], o12: ScallopOption[A12], o13: ScallopOption[A13], o14: ScallopOption[A14], o15: ScallopOption[A15], o16: ScallopOption[A16], o17: ScallopOption[A17], o18: ScallopOption[A18], o19: ScallopOption[A19], o20: ScallopOption[A20])(fn: (A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20) => Either[String, Unit]): Unit = {
    allDefinedOrUndefined(o1, o2, o3, o4, o5, o6, o7, o8, o9, o10, o11, o12, o13, o14, o15, o16, o17, o18, o19, o20)
    validations :+= { () =>
      if (List(o1.toOption, o2.toOption, o3.toOption, o4.toOption, o5.toOption, o6.toOption, o7.toOption, o8.toOption, o9.toOption, o10.toOption, o11.toOption, o12.toOption, o13.toOption, o14.toOption, o15.toOption, o16.toOption, o17.toOption, o18.toOption, o19.toOption, o20.toOption).forall(_.isDefined)) {
        fn(o1(), o2(), o3(), o4(), o5(), o6(), o7(), o8(), o9(), o10(), o11(), o12(), o13(), o14(), o15(), o16(), o17(), o18(), o19(), o20())
      } else {
        Right(())
      }
    }
  }
  
  /** Adds a validation function to this configuration. This function will be run after all other verification steps.
    * Automatically defines co-dependent relationship on these options.
    * @param fn Validation function. In case of error, it should return Left with the error message.
    */
  def validate[A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21](o1: ScallopOption[A1], o2: ScallopOption[A2], o3: ScallopOption[A3], o4: ScallopOption[A4], o5: ScallopOption[A5], o6: ScallopOption[A6], o7: ScallopOption[A7], o8: ScallopOption[A8], o9: ScallopOption[A9], o10: ScallopOption[A10], o11: ScallopOption[A11], o12: ScallopOption[A12], o13: ScallopOption[A13], o14: ScallopOption[A14], o15: ScallopOption[A15], o16: ScallopOption[A16], o17: ScallopOption[A17], o18: ScallopOption[A18], o19: ScallopOption[A19], o20: ScallopOption[A20], o21: ScallopOption[A21])(fn: (A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21) => Either[String, Unit]): Unit = {
    allDefinedOrUndefined(o1, o2, o3, o4, o5, o6, o7, o8, o9, o10, o11, o12, o13, o14, o15, o16, o17, o18, o19, o20, o21)
    validations :+= { () =>
      if (List(o1.toOption, o2.toOption, o3.toOption, o4.toOption, o5.toOption, o6.toOption, o7.toOption, o8.toOption, o9.toOption, o10.toOption, o11.toOption, o12.toOption, o13.toOption, o14.toOption, o15.toOption, o16.toOption, o17.toOption, o18.toOption, o19.toOption, o20.toOption, o21.toOption).forall(_.isDefined)) {
        fn(o1(), o2(), o3(), o4(), o5(), o6(), o7(), o8(), o9(), o10(), o11(), o12(), o13(), o14(), o15(), o16(), o17(), o18(), o19(), o20(), o21())
      } else {
        Right(())
      }
    }
  }
  
  /** Adds a validation function to this configuration. This function will be run after all other verification steps.
    * Automatically defines co-dependent relationship on these options.
    * @param fn Validation function. In case of error, it should return Left with the error message.
    */
  def validate[A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22](o1: ScallopOption[A1], o2: ScallopOption[A2], o3: ScallopOption[A3], o4: ScallopOption[A4], o5: ScallopOption[A5], o6: ScallopOption[A6], o7: ScallopOption[A7], o8: ScallopOption[A8], o9: ScallopOption[A9], o10: ScallopOption[A10], o11: ScallopOption[A11], o12: ScallopOption[A12], o13: ScallopOption[A13], o14: ScallopOption[A14], o15: ScallopOption[A15], o16: ScallopOption[A16], o17: ScallopOption[A17], o18: ScallopOption[A18], o19: ScallopOption[A19], o20: ScallopOption[A20], o21: ScallopOption[A21], o22: ScallopOption[A22])(fn: (A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22) => Either[String, Unit]): Unit = {
    allDefinedOrUndefined(o1, o2, o3, o4, o5, o6, o7, o8, o9, o10, o11, o12, o13, o14, o15, o16, o17, o18, o19, o20, o21, o22)
    validations :+= { () =>
      if (List(o1.toOption, o2.toOption, o3.toOption, o4.toOption, o5.toOption, o6.toOption, o7.toOption, o8.toOption, o9.toOption, o10.toOption, o11.toOption, o12.toOption, o13.toOption, o14.toOption, o15.toOption, o16.toOption, o17.toOption, o18.toOption, o19.toOption, o20.toOption, o21.toOption, o22.toOption).forall(_.isDefined)) {
        fn(o1(), o2(), o3(), o4(), o5(), o6(), o7(), o8(), o9(), o10(), o11(), o12(), o13(), o14(), o15(), o16(), o17(), o18(), o19(), o20(), o21(), o22())
      } else {
        Right(())
      }
    }
  }

  
  /** Adds a validation function to this configuration. This function will be run after all other verification steps.
    * @param fn Validation function. In case of error, it should return Left with the error message.
    */
  def validateOpt[A1](o1: ScallopOption[A1])(fn: (Option[A1]) => Either[String, Unit]): Unit = {
    validations :+= { () =>
      fn(o1.toOption)
    }
  }
  
  /** Adds a validation function to this configuration. This function will be run after all other verification steps.
    * @param fn Validation function. In case of error, it should return Left with the error message.
    */
  def validateOpt[A1, A2](o1: ScallopOption[A1], o2: ScallopOption[A2])(fn: (Option[A1], Option[A2]) => Either[String, Unit]): Unit = {
    validations :+= { () =>
      fn(o1.toOption, o2.toOption)
    }
  }
  
  /** Adds a validation function to this configuration. This function will be run after all other verification steps.
    * @param fn Validation function. In case of error, it should return Left with the error message.
    */
  def validateOpt[A1, A2, A3](o1: ScallopOption[A1], o2: ScallopOption[A2], o3: ScallopOption[A3])(fn: (Option[A1], Option[A2], Option[A3]) => Either[String, Unit]): Unit = {
    validations :+= { () =>
      fn(o1.toOption, o2.toOption, o3.toOption)
    }
  }
  
  /** Adds a validation function to this configuration. This function will be run after all other verification steps.
    * @param fn Validation function. In case of error, it should return Left with the error message.
    */
  def validateOpt[A1, A2, A3, A4](o1: ScallopOption[A1], o2: ScallopOption[A2], o3: ScallopOption[A3], o4: ScallopOption[A4])(fn: (Option[A1], Option[A2], Option[A3], Option[A4]) => Either[String, Unit]): Unit = {
    validations :+= { () =>
      fn(o1.toOption, o2.toOption, o3.toOption, o4.toOption)
    }
  }
  
  /** Adds a validation function to this configuration. This function will be run after all other verification steps.
    * @param fn Validation function. In case of error, it should return Left with the error message.
    */
  def validateOpt[A1, A2, A3, A4, A5](o1: ScallopOption[A1], o2: ScallopOption[A2], o3: ScallopOption[A3], o4: ScallopOption[A4], o5: ScallopOption[A5])(fn: (Option[A1], Option[A2], Option[A3], Option[A4], Option[A5]) => Either[String, Unit]): Unit = {
    validations :+= { () =>
      fn(o1.toOption, o2.toOption, o3.toOption, o4.toOption, o5.toOption)
    }
  }
  
  /** Adds a validation function to this configuration. This function will be run after all other verification steps.
    * @param fn Validation function. In case of error, it should return Left with the error message.
    */
  def validateOpt[A1, A2, A3, A4, A5, A6](o1: ScallopOption[A1], o2: ScallopOption[A2], o3: ScallopOption[A3], o4: ScallopOption[A4], o5: ScallopOption[A5], o6: ScallopOption[A6])(fn: (Option[A1], Option[A2], Option[A3], Option[A4], Option[A5], Option[A6]) => Either[String, Unit]): Unit = {
    validations :+= { () =>
      fn(o1.toOption, o2.toOption, o3.toOption, o4.toOption, o5.toOption, o6.toOption)
    }
  }
  
  /** Adds a validation function to this configuration. This function will be run after all other verification steps.
    * @param fn Validation function. In case of error, it should return Left with the error message.
    */
  def validateOpt[A1, A2, A3, A4, A5, A6, A7](o1: ScallopOption[A1], o2: ScallopOption[A2], o3: ScallopOption[A3], o4: ScallopOption[A4], o5: ScallopOption[A5], o6: ScallopOption[A6], o7: ScallopOption[A7])(fn: (Option[A1], Option[A2], Option[A3], Option[A4], Option[A5], Option[A6], Option[A7]) => Either[String, Unit]): Unit = {
    validations :+= { () =>
      fn(o1.toOption, o2.toOption, o3.toOption, o4.toOption, o5.toOption, o6.toOption, o7.toOption)
    }
  }
  
  /** Adds a validation function to this configuration. This function will be run after all other verification steps.
    * @param fn Validation function. In case of error, it should return Left with the error message.
    */
  def validateOpt[A1, A2, A3, A4, A5, A6, A7, A8](o1: ScallopOption[A1], o2: ScallopOption[A2], o3: ScallopOption[A3], o4: ScallopOption[A4], o5: ScallopOption[A5], o6: ScallopOption[A6], o7: ScallopOption[A7], o8: ScallopOption[A8])(fn: (Option[A1], Option[A2], Option[A3], Option[A4], Option[A5], Option[A6], Option[A7], Option[A8]) => Either[String, Unit]): Unit = {
    validations :+= { () =>
      fn(o1.toOption, o2.toOption, o3.toOption, o4.toOption, o5.toOption, o6.toOption, o7.toOption, o8.toOption)
    }
  }
  
  /** Adds a validation function to this configuration. This function will be run after all other verification steps.
    * @param fn Validation function. In case of error, it should return Left with the error message.
    */
  def validateOpt[A1, A2, A3, A4, A5, A6, A7, A8, A9](o1: ScallopOption[A1], o2: ScallopOption[A2], o3: ScallopOption[A3], o4: ScallopOption[A4], o5: ScallopOption[A5], o6: ScallopOption[A6], o7: ScallopOption[A7], o8: ScallopOption[A8], o9: ScallopOption[A9])(fn: (Option[A1], Option[A2], Option[A3], Option[A4], Option[A5], Option[A6], Option[A7], Option[A8], Option[A9]) => Either[String, Unit]): Unit = {
    validations :+= { () =>
      fn(o1.toOption, o2.toOption, o3.toOption, o4.toOption, o5.toOption, o6.toOption, o7.toOption, o8.toOption, o9.toOption)
    }
  }
  
  /** Adds a validation function to this configuration. This function will be run after all other verification steps.
    * @param fn Validation function. In case of error, it should return Left with the error message.
    */
  def validateOpt[A1, A2, A3, A4, A5, A6, A7, A8, A9, A10](o1: ScallopOption[A1], o2: ScallopOption[A2], o3: ScallopOption[A3], o4: ScallopOption[A4], o5: ScallopOption[A5], o6: ScallopOption[A6], o7: ScallopOption[A7], o8: ScallopOption[A8], o9: ScallopOption[A9], o10: ScallopOption[A10])(fn: (Option[A1], Option[A2], Option[A3], Option[A4], Option[A5], Option[A6], Option[A7], Option[A8], Option[A9], Option[A10]) => Either[String, Unit]): Unit = {
    validations :+= { () =>
      fn(o1.toOption, o2.toOption, o3.toOption, o4.toOption, o5.toOption, o6.toOption, o7.toOption, o8.toOption, o9.toOption, o10.toOption)
    }
  }
  
  /** Adds a validation function to this configuration. This function will be run after all other verification steps.
    * @param fn Validation function. In case of error, it should return Left with the error message.
    */
  def validateOpt[A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11](o1: ScallopOption[A1], o2: ScallopOption[A2], o3: ScallopOption[A3], o4: ScallopOption[A4], o5: ScallopOption[A5], o6: ScallopOption[A6], o7: ScallopOption[A7], o8: ScallopOption[A8], o9: ScallopOption[A9], o10: ScallopOption[A10], o11: ScallopOption[A11])(fn: (Option[A1], Option[A2], Option[A3], Option[A4], Option[A5], Option[A6], Option[A7], Option[A8], Option[A9], Option[A10], Option[A11]) => Either[String, Unit]): Unit = {
    validations :+= { () =>
      fn(o1.toOption, o2.toOption, o3.toOption, o4.toOption, o5.toOption, o6.toOption, o7.toOption, o8.toOption, o9.toOption, o10.toOption, o11.toOption)
    }
  }
  
  /** Adds a validation function to this configuration. This function will be run after all other verification steps.
    * @param fn Validation function. In case of error, it should return Left with the error message.
    */
  def validateOpt[A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12](o1: ScallopOption[A1], o2: ScallopOption[A2], o3: ScallopOption[A3], o4: ScallopOption[A4], o5: ScallopOption[A5], o6: ScallopOption[A6], o7: ScallopOption[A7], o8: ScallopOption[A8], o9: ScallopOption[A9], o10: ScallopOption[A10], o11: ScallopOption[A11], o12: ScallopOption[A12])(fn: (Option[A1], Option[A2], Option[A3], Option[A4], Option[A5], Option[A6], Option[A7], Option[A8], Option[A9], Option[A10], Option[A11], Option[A12]) => Either[String, Unit]): Unit = {
    validations :+= { () =>
      fn(o1.toOption, o2.toOption, o3.toOption, o4.toOption, o5.toOption, o6.toOption, o7.toOption, o8.toOption, o9.toOption, o10.toOption, o11.toOption, o12.toOption)
    }
  }
  
  /** Adds a validation function to this configuration. This function will be run after all other verification steps.
    * @param fn Validation function. In case of error, it should return Left with the error message.
    */
  def validateOpt[A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13](o1: ScallopOption[A1], o2: ScallopOption[A2], o3: ScallopOption[A3], o4: ScallopOption[A4], o5: ScallopOption[A5], o6: ScallopOption[A6], o7: ScallopOption[A7], o8: ScallopOption[A8], o9: ScallopOption[A9], o10: ScallopOption[A10], o11: ScallopOption[A11], o12: ScallopOption[A12], o13: ScallopOption[A13])(fn: (Option[A1], Option[A2], Option[A3], Option[A4], Option[A5], Option[A6], Option[A7], Option[A8], Option[A9], Option[A10], Option[A11], Option[A12], Option[A13]) => Either[String, Unit]): Unit = {
    validations :+= { () =>
      fn(o1.toOption, o2.toOption, o3.toOption, o4.toOption, o5.toOption, o6.toOption, o7.toOption, o8.toOption, o9.toOption, o10.toOption, o11.toOption, o12.toOption, o13.toOption)
    }
  }
  
  /** Adds a validation function to this configuration. This function will be run after all other verification steps.
    * @param fn Validation function. In case of error, it should return Left with the error message.
    */
  def validateOpt[A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14](o1: ScallopOption[A1], o2: ScallopOption[A2], o3: ScallopOption[A3], o4: ScallopOption[A4], o5: ScallopOption[A5], o6: ScallopOption[A6], o7: ScallopOption[A7], o8: ScallopOption[A8], o9: ScallopOption[A9], o10: ScallopOption[A10], o11: ScallopOption[A11], o12: ScallopOption[A12], o13: ScallopOption[A13], o14: ScallopOption[A14])(fn: (Option[A1], Option[A2], Option[A3], Option[A4], Option[A5], Option[A6], Option[A7], Option[A8], Option[A9], Option[A10], Option[A11], Option[A12], Option[A13], Option[A14]) => Either[String, Unit]): Unit = {
    validations :+= { () =>
      fn(o1.toOption, o2.toOption, o3.toOption, o4.toOption, o5.toOption, o6.toOption, o7.toOption, o8.toOption, o9.toOption, o10.toOption, o11.toOption, o12.toOption, o13.toOption, o14.toOption)
    }
  }
  
  /** Adds a validation function to this configuration. This function will be run after all other verification steps.
    * @param fn Validation function. In case of error, it should return Left with the error message.
    */
  def validateOpt[A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15](o1: ScallopOption[A1], o2: ScallopOption[A2], o3: ScallopOption[A3], o4: ScallopOption[A4], o5: ScallopOption[A5], o6: ScallopOption[A6], o7: ScallopOption[A7], o8: ScallopOption[A8], o9: ScallopOption[A9], o10: ScallopOption[A10], o11: ScallopOption[A11], o12: ScallopOption[A12], o13: ScallopOption[A13], o14: ScallopOption[A14], o15: ScallopOption[A15])(fn: (Option[A1], Option[A2], Option[A3], Option[A4], Option[A5], Option[A6], Option[A7], Option[A8], Option[A9], Option[A10], Option[A11], Option[A12], Option[A13], Option[A14], Option[A15]) => Either[String, Unit]): Unit = {
    validations :+= { () =>
      fn(o1.toOption, o2.toOption, o3.toOption, o4.toOption, o5.toOption, o6.toOption, o7.toOption, o8.toOption, o9.toOption, o10.toOption, o11.toOption, o12.toOption, o13.toOption, o14.toOption, o15.toOption)
    }
  }
  
  /** Adds a validation function to this configuration. This function will be run after all other verification steps.
    * @param fn Validation function. In case of error, it should return Left with the error message.
    */
  def validateOpt[A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16](o1: ScallopOption[A1], o2: ScallopOption[A2], o3: ScallopOption[A3], o4: ScallopOption[A4], o5: ScallopOption[A5], o6: ScallopOption[A6], o7: ScallopOption[A7], o8: ScallopOption[A8], o9: ScallopOption[A9], o10: ScallopOption[A10], o11: ScallopOption[A11], o12: ScallopOption[A12], o13: ScallopOption[A13], o14: ScallopOption[A14], o15: ScallopOption[A15], o16: ScallopOption[A16])(fn: (Option[A1], Option[A2], Option[A3], Option[A4], Option[A5], Option[A6], Option[A7], Option[A8], Option[A9], Option[A10], Option[A11], Option[A12], Option[A13], Option[A14], Option[A15], Option[A16]) => Either[String, Unit]): Unit = {
    validations :+= { () =>
      fn(o1.toOption, o2.toOption, o3.toOption, o4.toOption, o5.toOption, o6.toOption, o7.toOption, o8.toOption, o9.toOption, o10.toOption, o11.toOption, o12.toOption, o13.toOption, o14.toOption, o15.toOption, o16.toOption)
    }
  }
  
  /** Adds a validation function to this configuration. This function will be run after all other verification steps.
    * @param fn Validation function. In case of error, it should return Left with the error message.
    */
  def validateOpt[A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17](o1: ScallopOption[A1], o2: ScallopOption[A2], o3: ScallopOption[A3], o4: ScallopOption[A4], o5: ScallopOption[A5], o6: ScallopOption[A6], o7: ScallopOption[A7], o8: ScallopOption[A8], o9: ScallopOption[A9], o10: ScallopOption[A10], o11: ScallopOption[A11], o12: ScallopOption[A12], o13: ScallopOption[A13], o14: ScallopOption[A14], o15: ScallopOption[A15], o16: ScallopOption[A16], o17: ScallopOption[A17])(fn: (Option[A1], Option[A2], Option[A3], Option[A4], Option[A5], Option[A6], Option[A7], Option[A8], Option[A9], Option[A10], Option[A11], Option[A12], Option[A13], Option[A14], Option[A15], Option[A16], Option[A17]) => Either[String, Unit]): Unit = {
    validations :+= { () =>
      fn(o1.toOption, o2.toOption, o3.toOption, o4.toOption, o5.toOption, o6.toOption, o7.toOption, o8.toOption, o9.toOption, o10.toOption, o11.toOption, o12.toOption, o13.toOption, o14.toOption, o15.toOption, o16.toOption, o17.toOption)
    }
  }
  
  /** Adds a validation function to this configuration. This function will be run after all other verification steps.
    * @param fn Validation function. In case of error, it should return Left with the error message.
    */
  def validateOpt[A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18](o1: ScallopOption[A1], o2: ScallopOption[A2], o3: ScallopOption[A3], o4: ScallopOption[A4], o5: ScallopOption[A5], o6: ScallopOption[A6], o7: ScallopOption[A7], o8: ScallopOption[A8], o9: ScallopOption[A9], o10: ScallopOption[A10], o11: ScallopOption[A11], o12: ScallopOption[A12], o13: ScallopOption[A13], o14: ScallopOption[A14], o15: ScallopOption[A15], o16: ScallopOption[A16], o17: ScallopOption[A17], o18: ScallopOption[A18])(fn: (Option[A1], Option[A2], Option[A3], Option[A4], Option[A5], Option[A6], Option[A7], Option[A8], Option[A9], Option[A10], Option[A11], Option[A12], Option[A13], Option[A14], Option[A15], Option[A16], Option[A17], Option[A18]) => Either[String, Unit]): Unit = {
    validations :+= { () =>
      fn(o1.toOption, o2.toOption, o3.toOption, o4.toOption, o5.toOption, o6.toOption, o7.toOption, o8.toOption, o9.toOption, o10.toOption, o11.toOption, o12.toOption, o13.toOption, o14.toOption, o15.toOption, o16.toOption, o17.toOption, o18.toOption)
    }
  }
  
  /** Adds a validation function to this configuration. This function will be run after all other verification steps.
    * @param fn Validation function. In case of error, it should return Left with the error message.
    */
  def validateOpt[A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19](o1: ScallopOption[A1], o2: ScallopOption[A2], o3: ScallopOption[A3], o4: ScallopOption[A4], o5: ScallopOption[A5], o6: ScallopOption[A6], o7: ScallopOption[A7], o8: ScallopOption[A8], o9: ScallopOption[A9], o10: ScallopOption[A10], o11: ScallopOption[A11], o12: ScallopOption[A12], o13: ScallopOption[A13], o14: ScallopOption[A14], o15: ScallopOption[A15], o16: ScallopOption[A16], o17: ScallopOption[A17], o18: ScallopOption[A18], o19: ScallopOption[A19])(fn: (Option[A1], Option[A2], Option[A3], Option[A4], Option[A5], Option[A6], Option[A7], Option[A8], Option[A9], Option[A10], Option[A11], Option[A12], Option[A13], Option[A14], Option[A15], Option[A16], Option[A17], Option[A18], Option[A19]) => Either[String, Unit]): Unit = {
    validations :+= { () =>
      fn(o1.toOption, o2.toOption, o3.toOption, o4.toOption, o5.toOption, o6.toOption, o7.toOption, o8.toOption, o9.toOption, o10.toOption, o11.toOption, o12.toOption, o13.toOption, o14.toOption, o15.toOption, o16.toOption, o17.toOption, o18.toOption, o19.toOption)
    }
  }
  
  /** Adds a validation function to this configuration. This function will be run after all other verification steps.
    * @param fn Validation function. In case of error, it should return Left with the error message.
    */
  def validateOpt[A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20](o1: ScallopOption[A1], o2: ScallopOption[A2], o3: ScallopOption[A3], o4: ScallopOption[A4], o5: ScallopOption[A5], o6: ScallopOption[A6], o7: ScallopOption[A7], o8: ScallopOption[A8], o9: ScallopOption[A9], o10: ScallopOption[A10], o11: ScallopOption[A11], o12: ScallopOption[A12], o13: ScallopOption[A13], o14: ScallopOption[A14], o15: ScallopOption[A15], o16: ScallopOption[A16], o17: ScallopOption[A17], o18: ScallopOption[A18], o19: ScallopOption[A19], o20: ScallopOption[A20])(fn: (Option[A1], Option[A2], Option[A3], Option[A4], Option[A5], Option[A6], Option[A7], Option[A8], Option[A9], Option[A10], Option[A11], Option[A12], Option[A13], Option[A14], Option[A15], Option[A16], Option[A17], Option[A18], Option[A19], Option[A20]) => Either[String, Unit]): Unit = {
    validations :+= { () =>
      fn(o1.toOption, o2.toOption, o3.toOption, o4.toOption, o5.toOption, o6.toOption, o7.toOption, o8.toOption, o9.toOption, o10.toOption, o11.toOption, o12.toOption, o13.toOption, o14.toOption, o15.toOption, o16.toOption, o17.toOption, o18.toOption, o19.toOption, o20.toOption)
    }
  }
  
  /** Adds a validation function to this configuration. This function will be run after all other verification steps.
    * @param fn Validation function. In case of error, it should return Left with the error message.
    */
  def validateOpt[A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21](o1: ScallopOption[A1], o2: ScallopOption[A2], o3: ScallopOption[A3], o4: ScallopOption[A4], o5: ScallopOption[A5], o6: ScallopOption[A6], o7: ScallopOption[A7], o8: ScallopOption[A8], o9: ScallopOption[A9], o10: ScallopOption[A10], o11: ScallopOption[A11], o12: ScallopOption[A12], o13: ScallopOption[A13], o14: ScallopOption[A14], o15: ScallopOption[A15], o16: ScallopOption[A16], o17: ScallopOption[A17], o18: ScallopOption[A18], o19: ScallopOption[A19], o20: ScallopOption[A20], o21: ScallopOption[A21])(fn: (Option[A1], Option[A2], Option[A3], Option[A4], Option[A5], Option[A6], Option[A7], Option[A8], Option[A9], Option[A10], Option[A11], Option[A12], Option[A13], Option[A14], Option[A15], Option[A16], Option[A17], Option[A18], Option[A19], Option[A20], Option[A21]) => Either[String, Unit]): Unit = {
    validations :+= { () =>
      fn(o1.toOption, o2.toOption, o3.toOption, o4.toOption, o5.toOption, o6.toOption, o7.toOption, o8.toOption, o9.toOption, o10.toOption, o11.toOption, o12.toOption, o13.toOption, o14.toOption, o15.toOption, o16.toOption, o17.toOption, o18.toOption, o19.toOption, o20.toOption, o21.toOption)
    }
  }
  
  /** Adds a validation function to this configuration. This function will be run after all other verification steps.
    * @param fn Validation function. In case of error, it should return Left with the error message.
    */
  def validateOpt[A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22](o1: ScallopOption[A1], o2: ScallopOption[A2], o3: ScallopOption[A3], o4: ScallopOption[A4], o5: ScallopOption[A5], o6: ScallopOption[A6], o7: ScallopOption[A7], o8: ScallopOption[A8], o9: ScallopOption[A9], o10: ScallopOption[A10], o11: ScallopOption[A11], o12: ScallopOption[A12], o13: ScallopOption[A13], o14: ScallopOption[A14], o15: ScallopOption[A15], o16: ScallopOption[A16], o17: ScallopOption[A17], o18: ScallopOption[A18], o19: ScallopOption[A19], o20: ScallopOption[A20], o21: ScallopOption[A21], o22: ScallopOption[A22])(fn: (Option[A1], Option[A2], Option[A3], Option[A4], Option[A5], Option[A6], Option[A7], Option[A8], Option[A9], Option[A10], Option[A11], Option[A12], Option[A13], Option[A14], Option[A15], Option[A16], Option[A17], Option[A18], Option[A19], Option[A20], Option[A21], Option[A22]) => Either[String, Unit]): Unit = {
    validations :+= { () =>
      fn(o1.toOption, o2.toOption, o3.toOption, o4.toOption, o5.toOption, o6.toOption, o7.toOption, o8.toOption, o9.toOption, o10.toOption, o11.toOption, o12.toOption, o13.toOption, o14.toOption, o15.toOption, o16.toOption, o17.toOption, o18.toOption, o19.toOption, o20.toOption, o21.toOption, o22.toOption)
    }
  }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy