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 }