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  }