class GossipCommandLineOptions {

  static final Schema createConfigFileSchema() {
    return SchemaBuilder
        .create()
        .addInteger("listenPort", 0, "Port to listen on", PropertyValidator.inRange(0, 65536))
        .addInteger("rpcPort", 0, "RPC port to listen on", PropertyValidator.inRange(0, 65536))
        .addString("networkInterface", "0.0.0.0", "Network interface to bind to", null)
        .addListOfString("peers", Collections.emptyList(), "Static peers list", null)
        .addString("messagelog", "messages.log", "Log file where messages are stored", null)
        .addBoolean("sending", false, "Whether this peer sends random messages to all other peers (load testing)", null)
        .addInteger(
            "sendInterval",
            1000,
            "Interval to wait in between sending messages in milliseconds (load testing)",
            null)
        .addInteger("numberOfMessages", 100, "Number of messages to publish to other peers (load testing)", null)
        .addInteger("payloadSize", 200, "Size of the random payload to send to other peers (load testing)", null)
        .toSchema();
  }

    GossipCommandLineOptions();
    GossipCommandLineOptions(
      String[] peers,
      Integer port,
      String networkInterface,
      String messageLog,
      Integer rpcPort,
      Integer payloadSize,
      Integer sendInterval,
      Boolean sending,
      Integer numberOfMessages,
      Configuration config);

}