https://github.com/jimschubert/kopper
A simple Kotlin option parser
https://github.com/jimschubert/kopper
Last synced: over 1 year ago
JSON representation
A simple Kotlin option parser
- Host: GitHub
- URL: https://github.com/jimschubert/kopper
- Owner: jimschubert
- License: mit
- Created: 2016-12-07T05:15:32.000Z (over 9 years ago)
- Default Branch: master
- Last Pushed: 2020-01-09T03:02:41.000Z (over 6 years ago)
- Last Synced: 2025-03-21T08:34:57.995Z (over 1 year ago)
- Language: Kotlin
- Homepage:
- Size: 89.8 KB
- Stars: 39
- Watchers: 1
- Forks: 3
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- Funding: .github/FUNDING.yml
- License: LICENSE
Awesome Lists containing this project
README
# Kopper
A simple Kotlin option parser
[](http://search.maven.org/#search%7Cga%7C1%7Ca%3A%22kopper%22)
[](http://search.maven.org/#search%7Cga%7C1%7Ca%3A%22kopper-typed%22)
`kopper` is the simple Kotlin option parser library.
`kopper-typed` extends the kopper library to support delegated properties and parsing as simple as constructing an object. It includes the additional dependency of `kotlin-reflect`.
# Examples
Manual parsing…
```kotlin
import us.jimschubert.kopper.*
fun main(args: Array) {
val parser = Parser()
parser.setName("Kopper CLI")
parser.setApplicationDescription("Kopper example application")
parser.flag("q", listOf("quiet", "silent"), description = "Run silently")
parser.option("f", listOf("file"), description = "File name")
parser.flag("a", listOf("allowEmpty"))
println(parser.printHelp())
val arguments = parser.parse(arrayOf("-f", "asdf.txt", "--quiet=true", "trailing", "arguments" ))
println("q=${arguments.flag("q")}")
println("quiet=${arguments.flag("quiet")}")
println("silent=${arguments.flag("silent")}")
println("f=${arguments.option("f")}")
println("file=${arguments.option("file")}")
println("allowEmpty=${arguments.flag("allowEmpty")}")
println("unparsedArgs=${arguments.unparsedArgs.joinToString()}")
}
```
Parser objects…
```kotlin
fun main(args: Array) {
val arguments = ExampleArgs(args)
if (arguments.help) {
println(arguments.printHelp())
return
}
println("quiet=${arguments.quiet}")
println("rate=${arguments.rate}")
println("maxCount=${arguments.maxCount}")
}
class ExampleArgs(args: Array) : TypedArgumentParser(args) {
val quiet by BooleanArgument(self, "q",
default = true,
longOption = listOf("quiet", "silent"),
description = "Run quietly"
)
val rate by NumericArgument(self, "r",
default = 1.0f,
description = "Rate"
)
val maxCount by NumericArgument(self, "m",
longOption = listOf("maxCount"),
default = 10,
description = "Max Count"
)
}
```
Typed parser objects support `BooleanArgument`, `StringArgument`, and `NumericArgument` property delegates. They
also expose any additional args as a list of strings in the `_etc_` property.
# License
[MIT License](./LICENSE)