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 }