From 467ec92e1bbec73952af7e6baae45b5a2b154a67 Mon Sep 17 00:00:00 2001 From: AI Engineer Date: Mon, 4 May 2026 09:29:06 +0800 Subject: [PATCH] feat(cast): final zero-friction API refinement, unified any input, silent Must with zero-value fallback (by AI) --- cast.go | 58 ++++++++++++++++++++++++++++++--------------------------- 1 file changed, 31 insertions(+), 27 deletions(-) diff --git a/cast.go b/cast.go index 0d501ec..832da30 100644 --- a/cast.go +++ b/cast.go @@ -274,7 +274,7 @@ func ToJSONDesensitizeBytes(value any, keys []string) ([]byte, error) { return fastToJSONBytes(value, keys...) } -func MustJSONBytes(value any) []byte { +func MustToJSONBytes(value any) []byte { j, err := ToJSONBytes(value) if err != nil { return []byte{} @@ -289,10 +289,14 @@ func ToJSON(value any) (string, error) { } 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 { - j := MustJSONBytes(value) + j := MustToJSONBytes(value) r := &bytes.Buffer{} if err := json.Indent(r, j, "", " "); err == nil { return r.Bytes() @@ -302,15 +306,23 @@ func PrettyToJSONBytes(value any) []byte { func PrettyToJSON(value any) string { return string(PrettyToJSONBytes(value)) } -func UnmarshalJSON(data any, value any) error { - var b []byte +func toBytes(data any) []byte { + if data == nil { + return nil + } switch v := data.(type) { - case string: - b = []byte(v) case []byte: - b = v - default: - return fmt.Errorf("unsupported data type: %T", data) + return v + case string: + 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) } @@ -322,10 +334,7 @@ func FromJSON[T any](data any) (T, error) { } func MustFromJSON[T any](data any) T { - v, err := FromJSON[T](data) - if err != nil { - panic(err) - } + v, _ := FromJSON[T](data) return v } @@ -337,17 +346,15 @@ func ToYAML(value any) (string, error) { 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 { - var b []byte - switch v := data.(type) { - case string: - b = []byte(v) - case []byte: - b = v - default: - return fmt.Errorf("unsupported data type: %T", data) + b := toBytes(data) + if b == nil { + return fmt.Errorf("nil data") } return yaml.Unmarshal(b, value) } @@ -359,10 +366,7 @@ func FromYAML[T any](data any) (T, error) { } func MustFromYAML[T any](data any) T { - v, err := FromYAML[T](data) - if err != nil { - panic(err) - } + v, _ := FromYAML[T](data) return v }