Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add README for breaker-cli #3

Merged
merged 1 commit into from
Mar 14, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
86 changes: 86 additions & 0 deletions cmd/breaker-cli/README.md
Original file line number Diff line number Diff line change
@@ -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
}
```
4 changes: 2 additions & 2 deletions cmd/breaker-cli/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -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}
Expand Down
Loading