aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorXe Iaso <me@xeiaso.net>2023-09-07 10:19:55 -0400
committerXe Iaso <me@xeiaso.net>2023-09-07 10:19:55 -0400
commit2654099b2645423152de4e790ea658ff0ab632e4 (patch)
tree4969e511e51dfa510172fbc1edf5e6bb8b43e06f
parent05f9443fae44f0411481554a36e8fe0ef523ed00 (diff)
downloadx-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.go60
-rw-r--r--go.mod1
-rw-r--r--go.sum2
-rw-r--r--gomod2nix.toml3
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)
+ }
+ }
+}
diff --git a/go.mod b/go.mod
index f030cc8..3c81e36 100644
--- a/go.mod
+++ b/go.mod
@@ -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
diff --git a/go.sum b/go.sum
index 62e4e05..3f815c5 100644
--- a/go.sum
+++ b/go.sum
@@ -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="