options.go 1.2 KB

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