private def commandSet[T <: Command]()

in ratatool-cli/src/main/scala/com/spotify/ratatool/tool/Ratatool.scala [26:71]


  private def commandSet[T <: Command](xs: T*): Set[String] = xs.map(_.command).toSet
  private val commands = commandSet(DirectSamplerParser, BigDiffy, BigSampler)

  def main(args: Array[String]): Unit = {
    val usage = """
      | Ratatool - a tool for random data generation, sampling, and diff-ing
      | Usage: ratatool [bigDiffy|bigSampler|directSampler] [args]
    """.stripMargin

    if (args.isEmpty || !commands.contains(args.head)) {
      print(usage)
      sys.exit(1)
    } else {
      args.head match {
        case BigDiffy.command   => BigDiffy.run(args.tail)
        case BigSampler.command => BigSampler.run(args.tail)
        case DirectSamplerParser.command =>
          val opts = DirectSamplerParser.parse(args.tail)
          if (opts.isEmpty) {
            sys.exit(-1)
          }

          val o = opts.get
          o.mode match {
            case "avro" =>
              val data = new AvroSampler(o.in).sample(o.n, o.head)
              AvroIO.writeToFile(data, data.head.getSchema, o.out)
            case "bigquery" =>
              val sampler = new BigQuerySampler(BigQueryIO.parseTableSpec(o.in))
              val data = sampler.sample(o.n, o.head)
              if (o.out.nonEmpty) {
                TableRowJsonIO.writeToFile(data, o.out)
              }
              if (o.tableOut.nonEmpty) {
                val table = BigQueryIO.parseTableSpec(o.tableOut)
                BigQueryIO.writeToTable(data, sampler.schema, table)
              }
            case "parquet" =>
              val data = new ParquetSampler(o.in).sample(o.n, o.head)
              ParquetIO.writeToFile(data, data.head.getSchema, o.out)
            case _ =>
              throw new NotImplementedError(s"${o.mode} not implemented")
          }
      }
    }
  }