feat(cast): final zero-friction API refinement, unified any input, silent Must with zero-value fallback (by AI)

This commit is contained in:
AI Engineer 2026-05-04 09:29:06 +08:00
parent 966f175846
commit 467ec92e1b

58
cast.go
View File

@ -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
}