github.com/artisanhe/tools@v1.0.1-0.20210607022958-19a8fef2eb04/courier/enumeration/bool.go (about)

     1  package enumeration
     2  
     3  import (
     4  	"encoding"
     5  	"encoding/json"
     6  	"errors"
     7  	"strings"
     8  )
     9  
    10  // swagger:enum
    11  type Bool uint8
    12  
    13  var _ interface {
    14  	json.Unmarshaler
    15  	json.Marshaler
    16  } = (*Bool)(nil)
    17  
    18  const (
    19  	BOOL_UNKNOWN Bool = iota
    20  	BOOL__TRUE        // true
    21  	BOOL__FALSE       // false
    22  )
    23  
    24  func (v Bool) True() bool {
    25  	return v == BOOL__TRUE
    26  }
    27  
    28  func (Bool) Enums() map[int][]string {
    29  	return map[int][]string{
    30  		int(BOOL__TRUE):  {"TRUE", "true"},
    31  		int(BOOL__FALSE): {"FALSE", "false"},
    32  	}
    33  }
    34  
    35  func BoolFromBool(b bool) Bool {
    36  	if b {
    37  		return BOOL__TRUE
    38  	}
    39  	return BOOL__FALSE
    40  }
    41  
    42  var InvalidBool = errors.New("invalid Bool")
    43  
    44  func ParseBoolFromString(s string) (Bool, error) {
    45  	switch s {
    46  	case "":
    47  		return BOOL_UNKNOWN, nil
    48  	case "FALSE":
    49  		return BOOL__FALSE, nil
    50  	case "TRUE":
    51  		return BOOL__TRUE, nil
    52  	}
    53  	return BOOL_UNKNOWN, InvalidBool
    54  }
    55  
    56  func ParseBoolFromLabelString(s string) (Bool, error) {
    57  	switch s {
    58  	case "":
    59  		return BOOL_UNKNOWN, nil
    60  	case "false":
    61  		return BOOL__FALSE, nil
    62  	case "true":
    63  		return BOOL__TRUE, nil
    64  	}
    65  	return BOOL_UNKNOWN, InvalidBool
    66  }
    67  
    68  func (v Bool) String() string {
    69  	switch v {
    70  	case BOOL_UNKNOWN:
    71  		return ""
    72  	case BOOL__FALSE:
    73  		return "FALSE"
    74  	case BOOL__TRUE:
    75  		return "TRUE"
    76  	}
    77  	return "UNKNOWN"
    78  }
    79  
    80  func (v Bool) Label() string {
    81  	switch v {
    82  	case BOOL_UNKNOWN:
    83  		return ""
    84  	case BOOL__FALSE:
    85  		return "false"
    86  	case BOOL__TRUE:
    87  		return "true"
    88  	}
    89  	return "UNKNOWN"
    90  }
    91  
    92  var _ interface {
    93  	encoding.TextMarshaler
    94  	encoding.TextUnmarshaler
    95  	json.Marshaler
    96  	json.Unmarshaler
    97  } = (*Bool)(nil)
    98  
    99  func (v Bool) MarshalText() ([]byte, error) {
   100  	str := v.Label()
   101  	if str == "" {
   102  		return []byte("null"), nil
   103  	}
   104  	if str == "UNKNOWN" {
   105  		return nil, InvalidBool
   106  	}
   107  	return []byte(str), nil
   108  }
   109  
   110  func (v *Bool) UnmarshalText(data []byte) (err error) {
   111  	s := strings.ToLower(strings.Trim(string(data), `"`))
   112  	if s == "null" {
   113  		*v = BOOL_UNKNOWN
   114  		return
   115  	}
   116  	*v, err = ParseBoolFromLabelString(s)
   117  	return
   118  }
   119  
   120  func (v Bool) MarshalJSON() ([]byte, error) {
   121  	return v.MarshalText()
   122  }
   123  
   124  func (v *Bool) UnmarshalJSON(data []byte) (err error) {
   125  	return v.UnmarshalText(data)
   126  }