1
0
Fork 0
mirror of https://github.com/diamondburned/arikawa.git synced 2024-09-19 16:40:29 +00:00
arikawa/utils/json/option/string.go
2020-05-11 23:32:22 +02:00

52 lines
1.1 KiB
Go

package option
import (
"encoding/json"
)
// ================================ String ================================
// String is the option type for strings.
type String *string
// NewString creates a new String with the value of the passed string.
func NewString(s string) String { return &s }
// ================================ NullableString ================================
// NullableString is a nullable version of a string.
type NullableString = *nullableString
type nullableString struct {
Val string
Init bool
}
// NullBool serializes to JSON null.
var NullString = &nullableString{}
// NewNullableString creates a new non-null NullableString with the value of the passed string.
func NewNullableString(v string) NullableString {
return &nullableString{
Val: v,
Init: true,
}
}
func (s nullableString) MarshalJSON() ([]byte, error) {
if !s.Init {
return []byte("null"), nil
}
return []byte("\"" + s.Val + "\""), nil
}
func (s *nullableString) UnmarshalJSON(b []byte) error {
if string(b) == "null" {
s.Init = false
return nil
}
return json.Unmarshal(b, &s.Val)
}