github.com/divyam234/rclone@v1.64.1/fs/terminalcolormode.go (about)

     1  package fs
     2  
     3  import (
     4  	"fmt"
     5  	"strings"
     6  )
     7  
     8  // TerminalColorMode describes how ANSI codes should be handled
     9  type TerminalColorMode byte
    10  
    11  // TerminalColorMode constants
    12  const (
    13  	TerminalColorModeAuto TerminalColorMode = iota
    14  	TerminalColorModeNever
    15  	TerminalColorModeAlways
    16  )
    17  
    18  var terminalColorModeToString = []string{
    19  	TerminalColorModeAuto:   "AUTO",
    20  	TerminalColorModeNever:  "NEVER",
    21  	TerminalColorModeAlways: "ALWAYS",
    22  }
    23  
    24  // String converts a TerminalColorMode to a string
    25  func (m TerminalColorMode) String() string {
    26  	if m >= TerminalColorMode(len(terminalColorModeToString)) {
    27  		return fmt.Sprintf("TerminalColorMode(%d)", m)
    28  	}
    29  	return terminalColorModeToString[m]
    30  }
    31  
    32  // Set a TerminalColorMode
    33  func (m *TerminalColorMode) Set(s string) error {
    34  	for n, name := range terminalColorModeToString {
    35  		if s != "" && name == strings.ToUpper(s) {
    36  			*m = TerminalColorMode(n)
    37  			return nil
    38  		}
    39  	}
    40  	return fmt.Errorf("unknown terminal color mode %q", s)
    41  }
    42  
    43  // Type of TerminalColorMode
    44  func (m TerminalColorMode) Type() string {
    45  	return "string"
    46  }
    47  
    48  // UnmarshalJSON converts a string/integer in JSON to a TerminalColorMode
    49  func (m *TerminalColorMode) UnmarshalJSON(in []byte) error {
    50  	return UnmarshalJSONFlag(in, m, func(i int64) error {
    51  		if i < 0 || i >= int64(len(terminalColorModeToString)) {
    52  			return fmt.Errorf("out of range terminal color mode %d", i)
    53  		}
    54  		*m = (TerminalColorMode)(i)
    55  		return nil
    56  	})
    57  }