feat(cast): final zero-friction API refinement, unified any input, silent Must with zero-value fallback (by AI)
This commit is contained in:
parent
966f175846
commit
467ec92e1b
58
cast.go
58
cast.go
@ -274,7 +274,7 @@ func ToJSONDesensitizeBytes(value any, keys []string) ([]byte, error) {
|
|||||||
return fastToJSONBytes(value, keys...)
|
return fastToJSONBytes(value, keys...)
|
||||||
}
|
}
|
||||||
|
|
||||||
func MustJSONBytes(value any) []byte {
|
func MustToJSONBytes(value any) []byte {
|
||||||
j, err := ToJSONBytes(value)
|
j, err := ToJSONBytes(value)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return []byte{}
|
return []byte{}
|
||||||
@ -289,10 +289,14 @@ func ToJSON(value any) (string, error) {
|
|||||||
}
|
}
|
||||||
return string(j), nil
|
return string(j), nil
|
||||||
}
|
}
|
||||||
func MustToJSON(value any) string { return string(MustJSONBytes(value)) }
|
|
||||||
|
func MustToJSON(value any) string {
|
||||||
|
s, _ := ToJSON(value)
|
||||||
|
return s
|
||||||
|
}
|
||||||
|
|
||||||
func PrettyToJSONBytes(value any) []byte {
|
func PrettyToJSONBytes(value any) []byte {
|
||||||
j := MustJSONBytes(value)
|
j := MustToJSONBytes(value)
|
||||||
r := &bytes.Buffer{}
|
r := &bytes.Buffer{}
|
||||||
if err := json.Indent(r, j, "", " "); err == nil {
|
if err := json.Indent(r, j, "", " "); err == nil {
|
||||||
return r.Bytes()
|
return r.Bytes()
|
||||||
@ -302,15 +306,23 @@ func PrettyToJSONBytes(value any) []byte {
|
|||||||
|
|
||||||
func PrettyToJSON(value any) string { return string(PrettyToJSONBytes(value)) }
|
func PrettyToJSON(value any) string { return string(PrettyToJSONBytes(value)) }
|
||||||
|
|
||||||
func UnmarshalJSON(data any, value any) error {
|
func toBytes(data any) []byte {
|
||||||
var b []byte
|
if data == nil {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
switch v := data.(type) {
|
switch v := data.(type) {
|
||||||
case string:
|
|
||||||
b = []byte(v)
|
|
||||||
case []byte:
|
case []byte:
|
||||||
b = v
|
return v
|
||||||
default:
|
case string:
|
||||||
return fmt.Errorf("unsupported data type: %T", data)
|
return []byte(v)
|
||||||
|
}
|
||||||
|
return []byte(String(data))
|
||||||
|
}
|
||||||
|
|
||||||
|
func UnmarshalJSON(data any, value any) error {
|
||||||
|
b := toBytes(data)
|
||||||
|
if b == nil {
|
||||||
|
return fmt.Errorf("nil data")
|
||||||
}
|
}
|
||||||
return fastUnmarshalJSONBytes(b, value)
|
return fastUnmarshalJSONBytes(b, value)
|
||||||
}
|
}
|
||||||
@ -322,10 +334,7 @@ func FromJSON[T any](data any) (T, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func MustFromJSON[T any](data any) T {
|
func MustFromJSON[T any](data any) T {
|
||||||
v, err := FromJSON[T](data)
|
v, _ := FromJSON[T](data)
|
||||||
if err != nil {
|
|
||||||
panic(err)
|
|
||||||
}
|
|
||||||
return v
|
return v
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -337,17 +346,15 @@ func ToYAML(value any) (string, error) {
|
|||||||
return string(j), nil
|
return string(j), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func MustToYAML(value any) string { return string(MustYAMLBytes(value)) }
|
func MustToYAML(value any) string {
|
||||||
|
s, _ := ToYAML(value)
|
||||||
|
return s
|
||||||
|
}
|
||||||
|
|
||||||
func UnmarshalYAML(data any, value any) error {
|
func UnmarshalYAML(data any, value any) error {
|
||||||
var b []byte
|
b := toBytes(data)
|
||||||
switch v := data.(type) {
|
if b == nil {
|
||||||
case string:
|
return fmt.Errorf("nil data")
|
||||||
b = []byte(v)
|
|
||||||
case []byte:
|
|
||||||
b = v
|
|
||||||
default:
|
|
||||||
return fmt.Errorf("unsupported data type: %T", data)
|
|
||||||
}
|
}
|
||||||
return yaml.Unmarshal(b, value)
|
return yaml.Unmarshal(b, value)
|
||||||
}
|
}
|
||||||
@ -359,10 +366,7 @@ func FromYAML[T any](data any) (T, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func MustFromYAML[T any](data any) T {
|
func MustFromYAML[T any](data any) T {
|
||||||
v, err := FromYAML[T](data)
|
v, _ := FromYAML[T](data)
|
||||||
if err != nil {
|
|
||||||
panic(err)
|
|
||||||
}
|
|
||||||
return v
|
return v
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user