twink/vendor/sourcery.dny.nu/longdistance/internal/json/json.go

69 lines
1.1 KiB
Go
Raw Normal View History

2025-12-05 12:20:05 +01:00
package json
import (
"bytes"
"encoding/json"
)
type RawMessage = json.RawMessage
type Object map[string]RawMessage
type Array []RawMessage
var Compact = json.Compact
var Marshal = json.Marshal
var MarshalIndent = json.MarshalIndent
var Valid = json.Valid
var Unmarshal = json.Unmarshal
var (
beginArray = byte('[')
beginObject = byte('{')
beginString = byte('"')
null = RawMessage(`null`)
)
func IsNull(in RawMessage) bool {
return bytes.Equal(in, null)
}
func IsArray(in RawMessage) bool {
if len(in) == 0 {
return false
}
return in[0] == beginArray
}
func IsMap(in RawMessage) bool {
if len(in) == 0 {
return false
}
return in[0] == beginObject
}
func IsString(in RawMessage) bool {
if len(in) == 0 {
return false
}
return in[0] == beginString
}
func IsScalar(in RawMessage) bool {
return !IsArray(in) && !IsMap(in) && !IsNull(in)
}
func MakeArray(in RawMessage) RawMessage {
if len(in) == 0 {
return json.RawMessage(`[]`)
}
if IsArray(in) {
return in
}
return bytes.Join([][]byte{
[]byte(`[`),
in,
[]byte(`]`),
}, nil)
}