diff --git a/cmd/breaker-cli/README.md b/cmd/breaker-cli/README.md new file mode 100644 index 0000000..9b74393 --- /dev/null +++ b/cmd/breaker-cli/README.md @@ -0,0 +1,86 @@ +# breaker-cli + +## What is breaker-cli? + +breaker-cli is a CLI tool to generate a breaker implementation for a given interface. + +## Why breaker-cli? + +To save time and effort in writing boilerplate code for a breaker implementation. + +## How to use breaker-cli? + +### Installation + +```bash +go install github.com/chenyanchen/breaker/cmd/breaker-cli@latest +``` + +### Usage + +```bash +breaker-cli -h +Usage of breaker-cli: + -interface string + The interface name + -output string + The output file name, default to stdout + -package string + The packages named by the import paths +``` + +example: + +interface: + +```go +type Filter interface { + Filter(ctx context.Context, elements []string) ([]string, error) +} +``` + +command: + +```bash +breaker-cli -package=github.com/chenyanchen/filter -interface=Filter -output=path/to/filterbreaker.go +``` + +generated file: + +```go +// Code generated by breaker-cli. DO NOT EDIT. +// breaker-cli: https://github.com/chenyanchen/breaker/tree/main/cmd/breaker-cli + +package cmd + +import ( + "context" + + "github.com/chenyanchen/breaker" + "github.com/chenyanchen/filter" +) + +type FilterBreaker struct { + source filter.Filter + breaker breaker.Breaker +} + +func NewFilterBreaker(source filter.Filter) *FilterBreaker { + return &FilterBreaker{ + source: source, + breaker: breaker.NewGoogleBreaker(), + } +} + +func (b *FilterBreaker) Filter(ctx context.Context, elements []string) ([]string, error) { + var ( + result0 []string + result1 error + ) + result1 = b.breaker.Do(func() error { + result0, result1 = b.source.Filter(ctx, elements) + return result1 + }) + return result0, result1 +} +``` diff --git a/cmd/breaker-cli/main.go b/cmd/breaker-cli/main.go index 8e1a4de..9fe11f2 100644 --- a/cmd/breaker-cli/main.go +++ b/cmd/breaker-cli/main.go @@ -21,8 +21,8 @@ import ( func main() { _package := flag.String("package", "", "The packages named by the import paths") - _interface := flag.String("interface", "", "(optional) The interfaces name") - output := flag.String("output", "", "The output file name") + _interface := flag.String("interface", "", "The interface name") + output := flag.String("output", "", "The output file name, default to stdout") flag.Parse() cfg := &packages.Config{Mode: packages.NeedName | packages.NeedTypes | packages.NeedTypesInfo}