go/json.go

59 lines
1.4 KiB
Go
Raw Permalink Normal View History

// SPDX-License-Identifier: EUPL-1.2
// JSON helpers for the Core framework.
// Wraps encoding/json so consumers don't import it directly.
// Same guardrail pattern as string.go wraps strings.
//
// Usage:
//
// data := core.JSONMarshal(myStruct)
// if data.OK { json := data.Value.([]byte) }
//
// r := core.JSONUnmarshal(jsonBytes, &target)
// if !r.OK { /* handle error */ }
package core
import "encoding/json"
// JSONMarshal serialises a value to JSON bytes.
//
// r := core.JSONMarshal(myStruct)
// if r.OK { data := r.Value.([]byte) }
func JSONMarshal(v any) Result {
data, err := json.Marshal(v)
if err != nil {
return Result{err, false}
}
return Result{data, true}
}
// JSONMarshalString serialises a value to a JSON string.
//
// s := core.JSONMarshalString(myStruct)
func JSONMarshalString(v any) string {
data, err := json.Marshal(v)
if err != nil {
return "{}"
}
return string(data)
}
// JSONUnmarshal deserialises JSON bytes into a target.
//
// var cfg Config
// r := core.JSONUnmarshal(data, &cfg)
func JSONUnmarshal(data []byte, target any) Result {
if err := json.Unmarshal(data, target); err != nil {
return Result{err, false}
}
return Result{OK: true}
}
// JSONUnmarshalString deserialises a JSON string into a target.
//
// var cfg Config
// r := core.JSONUnmarshalString(`{"port":8080}`, &cfg)
func JSONUnmarshalString(s string, target any) Result {
return JSONUnmarshal([]byte(s), target)
}