github.com/diamondburned/arikawa/v2@v2.1.0/utils/json/option/string.go (about)

     1  package option
     2  
     3  import (
     4  	"encoding/json"
     5  )
     6  
     7  // ================================ String ================================
     8  
     9  // String is the option type for strings.
    10  type String *string
    11  
    12  // NewString creates a new String with the value of the passed string.
    13  func NewString(s string) String { return &s }
    14  
    15  // ================================ NullableString ================================
    16  
    17  // NullableString is a nullable version of a string.
    18  type NullableString = *NullableStringData
    19  
    20  type NullableStringData struct {
    21  	Val  string
    22  	Init bool
    23  }
    24  
    25  // NullString serializes to JSON null.
    26  var NullString = &NullableStringData{}
    27  
    28  // NewNullableString creates a new non-null NullableString with the value of the passed string.
    29  func NewNullableString(v string) NullableString {
    30  	return &NullableStringData{
    31  		Val:  v,
    32  		Init: true,
    33  	}
    34  }
    35  
    36  func (s NullableStringData) MarshalJSON() ([]byte, error) {
    37  	if !s.Init {
    38  		return []byte("null"), nil
    39  	}
    40  	return json.Marshal(s.Val)
    41  }
    42  
    43  func (s *NullableStringData) UnmarshalJSON(b []byte) error {
    44  	if string(b) == "null" {
    45  		*s = *NullString
    46  		return nil
    47  	}
    48  
    49  	s.Init = true
    50  	return json.Unmarshal(b, &s.Val)
    51  }