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
import (
"errors"
"flag"
"fmt"
"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
type SetMessageCmd struct{}
@ -112,11 +60,11 @@ func (sm SetMessageCmd) Func(args []string) error {
}
flags := imaputils.NewFlagsStatus()
var opts imaputils.SetFlagsOpts
flagSeen := newPairFlag()
flagAnswered := newPairFlag()
flagFlagged := newPairFlag()
flagDeleted := newPairFlag()
flagDraft := newPairFlag()
flagSeen := cli.NewPairFlag()
flagAnswered := cli.NewPairFlag()
flagFlagged := cli.NewPairFlag()
flagDeleted := cli.NewPairFlag()
flagDraft := cli.NewPairFlag()
flagset := flag.NewFlagSet(args[0], flag.ExitOnError)
@ -148,19 +96,19 @@ func (sm SetMessageCmd) Func(args []string) error {
opts.MessageSeq = seq
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
}
if err := assignFlag(*flagAnswered.pair, flags.SetAnswered, flags.UnsetAnswered); err != nil {
if err := assignFlag(*flagAnswered.Pair, flags.SetAnswered, flags.UnsetAnswered); err != nil {
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
}
if err := assignFlag(*flagDeleted.pair, flags.SetDeleted, flags.UnsetDeleted); err != nil {
if err := assignFlag(*flagDeleted.Pair, flags.SetDeleted, flags.UnsetDeleted); err != nil {
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
}
@ -202,11 +150,11 @@ func parseMessageSeq(seq *imap.SeqSet, data string) error {
return nil
}
func assignFlag(flagOp pair, setCallback, unsetCallback func()) error {
func assignFlag(flagOp cli.Pair, setCallback, unsetCallback func()) error {
switch flagOp {
case pair{true, false}:
case cli.Pair{true, false}:
setCallback()
case pair{false, true}:
case cli.Pair{false, true}:
unsetCallback()
default:
return nil

View file

@ -1,6 +1,7 @@
package cli
import (
"errors"
"flag"
"fmt"
"io"
@ -36,3 +37,50 @@ func Usage(w io.Writer, info ProgramInfo) {
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")