x-core.4.5.9.source-code.cli-for-java.adoc Maven / Gradle / Ivy
=== Typed options and arguments
The described {@link io.vertx.core.cli.Option} and {@link io.vertx.core.cli.Argument} classes are _untyped_,
meaning that the only get String values.
{@link io.vertx.core.cli.TypedOption} and {@link io.vertx.core.cli.TypedArgument} let you specify a _type_, so the
(String) raw value is converted to the specified type.
Instead of
{@link io.vertx.core.cli.Option} and {@link io.vertx.core.cli.Argument}, use {@link io.vertx.core.cli.TypedOption}
and {@link io.vertx.core.cli.TypedArgument} in the {@link io.vertx.core.cli.CLI} definition:
[source,java]
----
{@link examples.cli.TypedCLIExamples#example1}
----
Then you can retrieve the converted values as follows:
[source,java]
----
{@link examples.cli.TypedCLIExamples#example2}
----
The vert.x CLI is able to convert to classes:
* having a constructor with a single
{@link java.lang.String} argument, such as {@link java.io.File} or {@link io.vertx.core.json.JsonObject}
* with a static `from` or `fromString` method
* with a static `valueOf` method, such as primitive types and enumeration
In addition, you can implement your own {@link io.vertx.core.cli.converters.Converter} and instruct the CLI to use
this converter:
[source,java]
----
{@link examples.cli.TypedCLIExamples#example3}
----
For booleans, the boolean values are evaluated to `true`: `on`, `yes`, `1`, `true`.
If one of your option has an `enum` as type, it computes the set of choices automatically.
=== Using annotations
You can also define your CLI using annotations. Definition is done using annotation on the class and on _setter_
methods:
[source, java]
----
@Name("some-name")
@Summary("some short summary.")
@Description("some long description")
public class AnnotatedCli {
private boolean flag;
private String name;
private String arg;
@Option(shortName = "f", flag = true)
public void setFlag(boolean flag) {
this.flag = flag;
}
@Option(longName = "name")
public void setName(String name) {
this.name = name;
}
@Argument(index = 0)
public void setArg(String arg) {
this.arg = arg;
}
}
----
Once annotated, you can define the {@link io.vertx.core.cli.CLI} and inject the values using:
[source,java]
----
{@link examples.cli.TypedCLIExamples#example4}
----