abstract class ConfiguredSparkApp[Config <: (Serializable with Product)] {
implicit def hint: ProductHint[Config] = ProductHint[Config](ConfigFieldMapping(CamelCase, CamelCase))
implicit val reader = deriveReader[Config]
def job(config: Config): ZIO[JobStarter.baseEnv, Throwable, Unit]
final def main(args: Array[String]): Unit = {
val configParser = new JobConfig[Config]
JobStarter.run[Config](configParser.parseArgs(args))(job)
}
}