diff options
| author | Xe Iaso <me@xeiaso.net> | 2023-09-07 10:19:55 -0400 |
|---|---|---|
| committer | Xe Iaso <me@xeiaso.net> | 2023-09-07 10:19:55 -0400 |
| commit | 2654099b2645423152de4e790ea658ff0ab632e4 (patch) | |
| tree | 4969e511e51dfa510172fbc1edf5e6bb8b43e06f | |
| parent | 05f9443fae44f0411481554a36e8fe0ef523ed00 (diff) | |
| download | x-2654099b2645423152de4e790ea658ff0ab632e4.tar.xz x-2654099b2645423152de4e790ea658ff0ab632e4.zip | |
cmd/eq: add first prototype of eq, like jq but with exprv1.7.0
Signed-off-by: Xe Iaso <me@xeiaso.net>
| -rw-r--r-- | cmd/eq/main.go | 60 | ||||
| -rw-r--r-- | go.mod | 1 | ||||
| -rw-r--r-- | go.sum | 2 | ||||
| -rw-r--r-- | gomod2nix.toml | 3 |
4 files changed, 66 insertions, 0 deletions
diff --git a/cmd/eq/main.go b/cmd/eq/main.go new file mode 100644 index 0000000..a4bb824 --- /dev/null +++ b/cmd/eq/main.go @@ -0,0 +1,60 @@ +package main + +import ( + "encoding/json" + "flag" + "io" + "log" + "os" + + "github.com/antonmedv/expr" +) + +var ( + minify = flag.Bool("minify", false, "minify JSON?") + noColor = flag.Bool("no-color", false, "disable color output?") +) + +func main() { + flag.Parse() + + if _, ok := os.LookupEnv("NO_COLOR"); ok { + *noColor = true + } + + if flag.NArg() != 1 { + log.Fatal("usage: eq <expression> < data.json") + } + + program, err := expr.Compile(flag.Arg(0)) + if err != nil { + log.Fatalf("can't compile program: %v", err) + } + + dec := json.NewDecoder(os.Stdin) + enc := json.NewEncoder(os.Stdout) + + if !*minify { + enc.SetIndent("", " ") + } + + for { + obj := map[string]any{} + if err := dec.Decode(&obj); err != nil { + if err == io.EOF { + break + } + + log.Fatalf("can't decode JSON: %v", err) + } + + output, err := expr.Run(program, obj) + if err != nil { + log.Fatalf("can't run program: %v", err) + } + + if err := enc.Encode(output); err != nil { + log.Fatalf("can't write JSON: %v", err) + } + } +} @@ -52,6 +52,7 @@ require ( require ( github.com/andybalholm/brotli v1.0.5 // indirect github.com/andybalholm/cascadia v1.3.2 // indirect + github.com/antonmedv/expr v1.15.0 // indirect github.com/dustin/go-humanize v1.0.1 // indirect github.com/evanw/esbuild v0.18.6 // indirect github.com/fasthttp/router v1.4.20 // indirect @@ -85,6 +85,8 @@ github.com/andybalholm/cascadia v1.3.2/go.mod h1:7gtRlve5FxPPgIgX36uWBX58OdBsSS6 github.com/anmitsu/go-shlex v0.0.0-20200514113438-38f4b401e2be h1:9AeTilPcZAjCFIImctFaOjnTIavg87rW78vTPkQqLI8= github.com/anmitsu/go-shlex v0.0.0-20200514113438-38f4b401e2be/go.mod h1:ySMOLuWl6zY27l47sB3qLNK6tF2fkHG55UZxx8oIVo4= github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= +github.com/antonmedv/expr v1.15.0 h1:sBHNMx1i+b1lZfkBFGhicvSLW6RLnca3R0B7jWrk8iM= +github.com/antonmedv/expr v1.15.0/go.mod h1:0E/6TxnOlRNp81GMzX9QfDPAmHo2Phg00y4JUv1ihsE= github.com/aws/aws-sdk-go v1.44.317 h1:+8XWrLmGMwPPXSRSLPzhgcGnzJ2mYkgkrcB9C/GnSOU= github.com/aws/aws-sdk-go v1.44.317/go.mod h1:aVsgQcEevwlmQ7qHE9I3h+dtQgpqhFB+i8Phjh7fkwI= github.com/aws/aws-sdk-go-v2 v1.18.0 h1:882kkTpSFhdgYRKVZ/VCgf7sd0ru57p2JCxz4/oN5RY= diff --git a/gomod2nix.toml b/gomod2nix.toml index 32231dd..612fe51 100644 --- a/gomod2nix.toml +++ b/gomod2nix.toml @@ -25,6 +25,9 @@ schema = 3 [mod."github.com/andybalholm/cascadia"] version = "v1.3.2" hash = "sha256-Nc9SkqJO/ecincVcUBFITy24TMmMGj5o0Q8EgdNhrEk=" + [mod."github.com/antonmedv/expr"] + version = "v1.15.0" + hash = "sha256-fH1iOWnO/fhgmGNjYKdtmU+3tRqZ90MmrhBfNjPlxCE=" [mod."github.com/aws/aws-sdk-go"] version = "v1.44.317" hash = "sha256-W+6USiZKFIIunoZHnmCyPIIG2JyxJFG/3CtPXIRexRA=" |
