Skip to content

Commit

Permalink
add aliases
Browse files Browse the repository at this point in the history
  • Loading branch information
fujiwara committed Jun 28, 2024
1 parent ee5ba90 commit f24237e
Show file tree
Hide file tree
Showing 3 changed files with 53 additions and 7 deletions.
29 changes: 25 additions & 4 deletions config.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,14 +18,14 @@ const (
)

type RuntimeConfig struct {
Open string `json:"open" yaml:"open"`
Aliases map[string]*Alias `json:"aliases" yaml:"aliases"`
Open string `json:"open" yaml:"open"`
Aliases map[string]Alias `json:"aliases" yaml:"aliases"`
}

type Alias string

func (a *Alias) Parse() ([]string, error) {
return shellwords.Parse(string(*a))
func (a Alias) Parse() ([]string, error) {
return shellwords.Parse(string(a))
}

func RuntimeConfigDir() string {
Expand Down Expand Up @@ -91,3 +91,24 @@ func loadRuntimeConfig() (*RuntimeConfig, error) {
}
return &out, nil
}

func (c *CLI) resolveAliases(args []string) ([]string, error) {
if len(args) == 0 {
return args, nil
}
first := args[0]
rest := args[1:]
if alias, ok := c.rc.Aliases[first]; ok {
slog.Debug(fmt.Sprintf("alias found %s -> %s", first, alias))
parsed, err := alias.Parse()
if err != nil {
return nil, err
}
switch len(args) {
case 0:
return nil, fmt.Errorf("alias %s is empty", c.Service)
}
return append(parsed, rest...), nil
}
return args, nil
}
3 changes: 3 additions & 0 deletions gen.yaml
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
services:
sts:
ecs:
- DescribeClusters
- DescribeTasks
Expand All @@ -24,3 +25,5 @@ services:
- SelectObjectContent
- UploadPart
- UploadPartCopy
ec2:
- DescribeRegions
28 changes: 25 additions & 3 deletions main.go
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,16 @@ import (
"github.com/jmespath/go-jmespath"
)

var LogLevel = new(slog.LevelVar)

func init() {
opts := &slog.HandlerOptions{Level: LogLevel}
slog.SetDefault(slog.New(slog.NewTextHandler(os.Stderr, opts)))
if os.Getenv("DEBUG") != "" {
LogLevel.Set(slog.LevelDebug)
}
}

var Version = "HEAD"

var clientMethods = map[string]map[string]ClientMethod{} // to be defined in main_gen.go
Expand Down Expand Up @@ -53,16 +63,28 @@ type CLI struct {

func Run(ctx context.Context) error {
var c CLI
c.w = os.Stdout
kong.Parse(&c)

if rc, err := loadRuntimeConfig(); err != nil {
return fmt.Errorf("failed to load runtime config: %w", err)
} else {
c.rc = rc
}
slog.Debug("runtime config", "config", c.rc)

c.w = os.Stdout
args, err := c.resolveAliases(os.Args[1:])
if err != nil {
return err
}
slog.Debug("resolved args", "args", args)

k, err := kong.New(&c, kong.Vars{"version": Version})
if err != nil {
return err
}
if _, err := k.Parse(args); err != nil {
return err
}

return c.Dispatch(ctx)
}

Expand Down

0 comments on commit f24237e

Please sign in to comment.