github.com/Thanhphan1147/cloudfoundry-cli@v7.1.0+incompatible/types/filtered_string.go (about) 1 package types 2 3 import ( 4 "encoding/json" 5 "strings" 6 ) 7 8 // FilteredString is a wrapper around string values that can be null/default or an 9 // actual value. Use IsSet to check if the value is provided, instead of 10 // checking against the empty string. 11 type FilteredString struct { 12 IsSet bool 13 Value string 14 } 15 16 type FilteredStrings []FilteredString 17 18 func NewFilteredString(val string) *FilteredString { 19 var result FilteredString 20 21 result.ParseValue(val) 22 23 return &result 24 } 25 26 // ParseValue is used to parse a user provided flag argument. 27 func (n *FilteredString) ParseValue(val string) { 28 if val == "" { 29 n.IsSet = false 30 n.Value = "" 31 return 32 } 33 34 n.IsSet = true 35 36 switch val { 37 case "null", "default": 38 n.Value = "" 39 default: 40 n.Value = val 41 } 42 } 43 44 func (n FilteredString) IsDefault() bool { 45 return n.IsSet && n.Value == "" 46 } 47 48 func (n *FilteredString) UnmarshalJSON(rawJSON []byte) error { 49 var value *string 50 err := json.Unmarshal(rawJSON, &value) 51 if err != nil { 52 return err 53 } 54 55 if value != nil { 56 n.Value = *value 57 n.IsSet = true 58 return nil 59 } 60 61 n.Value = "" 62 n.IsSet = false 63 return nil 64 } 65 66 // MarshalJSON marshals the value field if it's not empty, otherwise returns an 67 // null. 68 func (n FilteredString) MarshalJSON() ([]byte, error) { 69 if n.Value != "" { 70 return json.Marshal(n.Value) 71 } 72 73 return json.Marshal(new(json.RawMessage)) 74 } 75 76 func (n FilteredString) String() string { 77 if n.IsSet { 78 return n.Value 79 } 80 81 return "" 82 } 83 84 func (n FilteredStrings) String() string { 85 var ss []string 86 87 for _, fs := range n { 88 ss = append(ss, fs.Value) 89 } 90 91 return strings.Join(ss, ", ") 92 }