github.com/yankunsam/loki/v2@v2.6.3-0.20220817130409-389df5235c27/pkg/storage/stores/indexshipper/compactor/deletionmode/mode.go (about) 1 package deletionmode 2 3 import ( 4 "errors" 5 "fmt" 6 "strings" 7 ) 8 9 type Mode int16 10 11 var ( 12 ErrUnknownMode = errors.New("unknown deletion mode") 13 ) 14 15 const ( 16 disabled = "disabled" 17 filterOnly = "filter-only" 18 filterAndDelete = "filter-and-delete" 19 unknown = "unknown" 20 21 Disabled Mode = iota 22 FilterOnly 23 FilterAndDelete 24 ) 25 26 func (m Mode) String() string { 27 switch m { 28 case Disabled: 29 return disabled 30 case FilterOnly: 31 return filterOnly 32 case FilterAndDelete: 33 return filterAndDelete 34 } 35 return unknown 36 } 37 38 func (m Mode) DeleteEnabled() bool { 39 return m == FilterOnly || m == FilterAndDelete 40 } 41 42 func AllModes() []string { 43 return []string{Disabled.String(), FilterOnly.String(), FilterAndDelete.String()} 44 } 45 46 func ParseMode(in string) (Mode, error) { 47 switch in { 48 case disabled: 49 return Disabled, nil 50 case filterOnly: 51 return FilterOnly, nil 52 case filterAndDelete: 53 return FilterAndDelete, nil 54 } 55 return 0, fmt.Errorf("%w: must be one of %s", ErrUnknownMode, strings.Join(AllModes(), "|")) 56 } 57 58 func Enabled(in string) (bool, error) { 59 deleteMode, err := ParseMode(in) 60 if err != nil { 61 return false, err 62 } 63 64 return deleteMode.DeleteEnabled(), nil 65 }