v / examples / cli.v
80 lines · 75 sloc · 1.84 KB · efc8f7fb3ef7e90a088db64ad2c68dd0698b90d5
Raw
1module main
2
3import cli { Command, Flag }
4import os
5
6fn main() {
7 mut cmd := Command{
8 name: 'cli'
9 description: 'An example of the cli library.'
10 version: '1.0.0'
11 }
12 mut greet_cmd := Command{
13 name: 'greet'
14 description: 'Prints greeting in different languages.'
15 usage: '<name>'
16 required_args: 1
17 pre_execute: greet_pre_func
18 execute: greet_func
19 post_execute: greet_post_func
20 }
21 greet_cmd.add_flag(Flag{
22 flag: .string
23 required: true
24 name: 'language'
25 abbrev: 'l'
26 description: 'Language of the message.'
27 })
28 greet_cmd.add_flag(Flag{
29 flag: .int
30 name: 'times'
31 default_value: ['3']
32 description: 'Number of times the message gets printed.'
33 })
34 greet_cmd.add_flag(Flag{
35 flag: .string_array
36 name: 'fun'
37 description: 'Just a dumby flags to show multiple.'
38 })
39 cmd.add_command(greet_cmd)
40 cmd.setup()
41 cmd.parse(os.args)
42}
43
44fn greet_func(cmd Command) ! {
45 language := cmd.flags.get_string('language') or {
46 panic('Failed to get `language` flag: ${err}')
47 }
48 times := cmd.flags.get_int('times') or { panic('Failed to get `times` flag: ${err}') }
49 name := cmd.args[0]
50 for _ in 0 .. times {
51 match language {
52 'english', 'en' {
53 println('Welcome ${name}')
54 }
55 'german', 'de' {
56 println('Willkommen ${name}')
57 }
58 'dutch', 'nl' {
59 println('Welkom ${name}')
60 }
61 else {
62 println('Unsupported language')
63 println('Supported languages are `english`, `german` and `dutch`.')
64 break
65 }
66 }
67 }
68 fun := cmd.flags.get_strings('fun') or { panic('Failed to get `fun` flag: ${err}') }
69 for f in fun {
70 println('fun: ${f}')
71 }
72}
73
74fn greet_pre_func(_cmd Command) ! {
75 println('This is a function running before the main function.\n')
76}
77
78fn greet_post_func(_cmd Command) ! {
79 println('\nThis is a function running after the main function.')
80}
81