aboutsummaryrefslogtreecommitdiffstats
path: root/cmd
diff options
context:
space:
mode:
Diffstat (limited to 'cmd')
-rw-r--r--cmd/lulu/creds.go2
-rw-r--r--cmd/lulu/flag.go28
-rw-r--r--cmd/lulu/main.go2
-rw-r--r--cmd/lulu/validate_cover.go37
-rw-r--r--cmd/lulu/validate_interior.go18
5 files changed, 73 insertions, 14 deletions
diff --git a/cmd/lulu/creds.go b/cmd/lulu/creds.go
index 5d80018..775c4da 100644
--- a/cmd/lulu/creds.go
+++ b/cmd/lulu/creds.go
@@ -18,7 +18,7 @@ var (
)
// Credentials contains the client-key and client-secret used to
-// authenticate the client (us) to the API.
+// authenticate to the API.
type Credentials struct {
key, secret string
}
diff --git a/cmd/lulu/flag.go b/cmd/lulu/flag.go
index cd7773e..a981886 100644
--- a/cmd/lulu/flag.go
+++ b/cmd/lulu/flag.go
@@ -39,6 +39,11 @@ func (f Flag) MustBeSet(fs *flag.FlagSet) {
}
}
+type boolFlag interface {
+ flag.Value
+ IsBoolFlag() bool
+}
+
// boolValue implements flag.Value.
type boolValue struct {
p *bool
@@ -48,7 +53,7 @@ func (bv boolValue) String() string {
if bv.p != nil {
return fmt.Sprint(*bv.p)
}
- return fmt.Sprint(false)
+ return ""
}
func (bv boolValue) Set(s string) error {
@@ -62,9 +67,24 @@ func (bv boolValue) Set(s string) error {
func (bv boolValue) IsBoolFlag() bool { return true }
-type boolFlag interface {
- flag.Value
- IsBoolFlag() bool
+type uintValue struct {
+ p *uint
+}
+
+func (uv uintValue) String() string {
+ if uv.p != nil {
+ return fmt.Sprint(*uv.p)
+ }
+ return ""
+}
+
+func (uv uintValue) Set(s string) error {
+ v, err := strconv.ParseUint(s, 10, 32)
+ if err != nil {
+ return err
+ }
+ *uv.p = uint(v)
+ return nil
}
// textValue implements flag.Value for string types that implement
diff --git a/cmd/lulu/main.go b/cmd/lulu/main.go
index b664644..d86d418 100644
--- a/cmd/lulu/main.go
+++ b/cmd/lulu/main.go
@@ -42,7 +42,7 @@ func usage() {
progName := os.Args[0]
out := flag.CommandLine.Output()
fmt.Fprintf(out, "Usage of %s:\n", progName)
- fmt.Fprintf(out, "%s [global flags] [command] [command flags]\n", progName)
+ fmt.Fprintf(out, " %s [global flags] [command] [command flags]\n", progName)
fmt.Fprintf(out, "Global Flags:\n")
flag.PrintDefaults()
fmt.Fprintf(out, "Commands:\n")
diff --git a/cmd/lulu/validate_cover.go b/cmd/lulu/validate_cover.go
index 25afbfd..dd16db7 100644
--- a/cmd/lulu/validate_cover.go
+++ b/cmd/lulu/validate_cover.go
@@ -1,9 +1,44 @@
package main
import (
+ "context"
+ "flag"
+ "fmt"
+ "net/url"
+ "time"
+
"git.samanthony.xyz/lulu"
)
func validateCover(clnt *lulu.Client, args []string) {
- lg.Fatal("not implemented") // TODO
+ var (
+ url url.URL
+ mfg = newMfgFlagSet()
+ nPages uint
+ timeout time.Duration
+ )
+
+ urlFlag := Flag{urlValue{&url}, "url", "URL of cover file for Lulu to download"}
+ nPagesFlag := Flag{uintValue{&nPages}, "n", "Number of interior pages"}
+
+ fs := flag.NewFlagSet("validate-cover", flag.ExitOnError)
+ urlFlag.AddTo(fs)
+ mfg.AddTo(fs)
+ nPagesFlag.AddTo(fs)
+ fs.DurationVar(&timeout, "t", defaultTimeout, "Timeout")
+
+ if err := fs.Parse(args); err != nil {
+ lg.Fatalf("lulu: %v\n", err)
+ }
+ urlFlag.MustBeSet(fs)
+ mfg.MustBeSet(fs)
+ nPagesFlag.MustBeSet(fs)
+
+ ctx, cancel := context.WithTimeout(clnt.Context(), timeout)
+ defer cancel()
+ val, err := clnt.ValidateCover(ctx, url.String(), mfg.PkgId(), nPages)
+ if err != nil {
+ lg.Fatal(err)
+ }
+ fmt.Println(val) // TODO: output format?
}
diff --git a/cmd/lulu/validate_interior.go b/cmd/lulu/validate_interior.go
index f7c4bdb..d2b34bf 100644
--- a/cmd/lulu/validate_interior.go
+++ b/cmd/lulu/validate_interior.go
@@ -14,27 +14,31 @@ func validateInterior(clnt *lulu.Client, args []string) {
var (
basic bool
url url.URL
+ mfg = newMfgFlagSet()
timeout time.Duration
)
+
basicFlag := Flag{boolValue{&basic}, "basic", "Basic validation without pod_package_id manufacturing options"}
urlFlag := Flag{urlValue{&url}, "url", "URL of interior file for Lulu to download"}
- mfgFlags := newMfgFlagSet()
+
fs := flag.NewFlagSet("validate-interior", flag.ExitOnError)
basicFlag.AddTo(fs)
urlFlag.AddTo(fs)
- mfgFlags.AddTo(fs)
+ mfg.AddTo(fs)
fs.DurationVar(&timeout, "t", defaultTimeout, "Timeout")
+
fs.Usage = func() {
out := fs.Output()
name := "validate-interior"
fmt.Fprintf(out, "Usage of %s:\n", name)
- fmt.Fprintf(out, " %s %s %s [flags]\n", name, urlFlag.Synopsis(), mfgFlags.Synopsis())
+ fmt.Fprintf(out, " %s %s %s [flags]\n", name, urlFlag.Synopsis(), mfg.Synopsis())
fmt.Fprintf(out, " %s %s %s [flags]\n", name, basicFlag.Synopsis(), urlFlag.Synopsis())
fmt.Fprintf(out, "Flags:\n")
fs.PrintDefaults()
}
+
if err := fs.Parse(args); err != nil {
- lg.Fatalf("lulu: %v", err)
+ lg.Fatalf("lulu: %v\n", err)
}
var val lulu.InteriorValidation
@@ -43,14 +47,14 @@ func validateInterior(clnt *lulu.Client, args []string) {
defer cancel()
if basic {
urlFlag.MustBeSet(fs)
- for _, f := range mfgFlags.flags {
+ for _, f := range mfg.flags {
mutexFlags(fs, f, basicFlag)
}
val, err = clnt.ValidateInteriorBasic(ctx, url.String())
} else {
urlFlag.MustBeSet(fs)
- mfgFlags.MustBeSet(fs)
- val, err = clnt.ValidateInterior(ctx, url.String(), mfgFlags.PkgId())
+ mfg.MustBeSet(fs)
+ val, err = clnt.ValidateInterior(ctx, url.String(), mfg.PkgId())
}
if err != nil {
lg.Fatal(err)