options.go 1.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. package main
  2. import (
  3. "errors"
  4. "fmt"
  5. "os"
  6. "github.com/pborman/getopt/v2"
  7. )
  8. type Options struct {
  9. Help bool
  10. Version bool
  11. Servers []string
  12. Split bool
  13. }
  14. func Help() {
  15. getopt.PrintUsage(os.Stdout)
  16. os.Exit(0)
  17. }
  18. func Version() {
  19. fmt.Fprintln(os.Stdout, "masto-emoji-pack v0.0.1")
  20. os.Exit(0)
  21. }
  22. func Usage(err error) {
  23. fmt.Fprintln(os.Stderr, err)
  24. getopt.Usage()
  25. os.Exit(2)
  26. }
  27. func Parse() {
  28. if err := getopt.Getopt(nil); err != nil {
  29. Usage(err)
  30. }
  31. }
  32. func parseOptions() (options Options) {
  33. getopt.SetParameters("DOMAIN...")
  34. help := getopt.BoolLong("help", 'h', "show help message")
  35. version := getopt.BoolLong("version", 'v', "show version info")
  36. split := getopt.BoolLong("split", 's', "split emoji pack via category")
  37. Parse()
  38. options = Options{
  39. Help: *help,
  40. Version: *version,
  41. Servers: getopt.Args(),
  42. Split: *split,
  43. }
  44. if options.Help {
  45. Help()
  46. }
  47. if options.Version {
  48. Version()
  49. }
  50. if len(options.Servers) == 0 {
  51. Usage(errors.New("must be specified: DOMAIN..."))
  52. }
  53. return
  54. }