Move Pair in cli module

This commit is contained in:
Blallo 2021-03-19 00:27:36 +01:00
parent d045ad6c2c
commit adde8aef8f
No known key found for this signature in database
GPG key ID: 0CBE577C9B72DC3F
2 changed files with 61 additions and 65 deletions

View file

@ -1,7 +1,6 @@
package main package main
import ( import (
"errors"
"flag" "flag"
"fmt" "fmt"
"io" "io"
@ -51,57 +50,6 @@ func (s SetCmd) Help(w io.Writer, set *flag.FlagSet) {
} }
} }
// FLAG UTILS
type pair struct {
set, unset bool
}
type pairFlag struct {
*pair
}
func newPairFlag() pairFlag {
return pairFlag{
&pair{false, false},
}
}
func (p pair) String() string {
switch p {
case pair{true, false}:
return "set"
case pair{false, true}:
return "unset"
default:
return "undef"
}
}
func (pf pairFlag) String() string {
return pf.pair.String()
}
func (pf pairFlag) Set(s string) error {
Log.Debugf("into Set: %s\n", s)
if s == "set" {
Log.Debug("setting")
v := pair{true, false}
*pf.pair = v
return nil
}
if s == "unset" {
Log.Debug("unsetting")
v := pair{false, true}
*pf.pair = v
return nil
}
Log.Debug(fmt.Sprintf("unacceptable value %s\n", s))
return errors.New("only `set` or `unset` are allowed")
}
// VERBS // VERBS
type SetMessageCmd struct{} type SetMessageCmd struct{}
@ -112,11 +60,11 @@ func (sm SetMessageCmd) Func(args []string) error {
} }
flags := imaputils.NewFlagsStatus() flags := imaputils.NewFlagsStatus()
var opts imaputils.SetFlagsOpts var opts imaputils.SetFlagsOpts
flagSeen := newPairFlag() flagSeen := cli.NewPairFlag()
flagAnswered := newPairFlag() flagAnswered := cli.NewPairFlag()
flagFlagged := newPairFlag() flagFlagged := cli.NewPairFlag()
flagDeleted := newPairFlag() flagDeleted := cli.NewPairFlag()
flagDraft := newPairFlag() flagDraft := cli.NewPairFlag()
flagset := flag.NewFlagSet(args[0], flag.ExitOnError) flagset := flag.NewFlagSet(args[0], flag.ExitOnError)
@ -148,19 +96,19 @@ func (sm SetMessageCmd) Func(args []string) error {
opts.MessageSeq = seq opts.MessageSeq = seq
opts.Debug = Session.Info.Opts.Debug opts.Debug = Session.Info.Opts.Debug
if err := assignFlag(*flagSeen.pair, flags.SetSeen, flags.UnsetSeen); err != nil { if err := assignFlag(*flagSeen.Pair, flags.SetSeen, flags.UnsetSeen); err != nil {
return err return err
} }
if err := assignFlag(*flagAnswered.pair, flags.SetAnswered, flags.UnsetAnswered); err != nil { if err := assignFlag(*flagAnswered.Pair, flags.SetAnswered, flags.UnsetAnswered); err != nil {
return err return err
} }
if err := assignFlag(*flagFlagged.pair, flags.SetFlagged, flags.UnsetFlagged); err != nil { if err := assignFlag(*flagFlagged.Pair, flags.SetFlagged, flags.UnsetFlagged); err != nil {
return err return err
} }
if err := assignFlag(*flagDeleted.pair, flags.SetDeleted, flags.UnsetDeleted); err != nil { if err := assignFlag(*flagDeleted.Pair, flags.SetDeleted, flags.UnsetDeleted); err != nil {
return err return err
} }
if err := assignFlag(*flagDraft.pair, flags.SetDraft, flags.UnsetDraft); err != nil { if err := assignFlag(*flagDraft.Pair, flags.SetDraft, flags.UnsetDraft); err != nil {
return err return err
} }
@ -202,11 +150,11 @@ func parseMessageSeq(seq *imap.SeqSet, data string) error {
return nil return nil
} }
func assignFlag(flagOp pair, setCallback, unsetCallback func()) error { func assignFlag(flagOp cli.Pair, setCallback, unsetCallback func()) error {
switch flagOp { switch flagOp {
case pair{true, false}: case cli.Pair{true, false}:
setCallback() setCallback()
case pair{false, true}: case cli.Pair{false, true}:
unsetCallback() unsetCallback()
default: default:
return nil return nil

View file

@ -1,6 +1,7 @@
package cli package cli
import ( import (
"errors"
"flag" "flag"
"fmt" "fmt"
"io" "io"
@ -36,3 +37,50 @@ func Usage(w io.Writer, info ProgramInfo) {
fmt.Fprintf(w, "\t%s\n", command) fmt.Fprintf(w, "\t%s\n", command)
} }
} }
type Pair struct {
Set, Unset bool
}
type PairFlag struct {
*Pair
}
func NewPairFlag() PairFlag {
return PairFlag{
&Pair{false, false},
}
}
func (p Pair) String() string {
switch p {
case Pair{true, false}:
return "set"
case Pair{false, true}:
return "unset"
default:
return "undef"
}
}
func (pf PairFlag) String() string {
return pf.Pair.String()
}
func (pf PairFlag) Set(s string) error {
if s == "set" {
v := Pair{true, false}
*pf.Pair = v
return nil
}
if s == "unset" {
v := Pair{false, true}
*pf.Pair = v
return nil
}
return ErrAllowedPairFlagValues
}
var ErrAllowedPairFlagValues = errors.New("only `set` or `unset` are allowed")