Publish Docker image (Multi-arch) / Build & push (amd64) (push) Failing after 1m40s
Release (Linux, macOS, Windows) / Linux Release (push) Failing after 42m16s
Publish Docker image (Multi-arch) / Build & push (arm64) (push) Canceled after 0s
Release (Linux, macOS, Windows) / macOS Release (push) Canceled after 0s
Release (Linux, macOS, Windows) / Windows Release (push) Canceled after 0s
Publish Docker image (Multi-arch) / Create multi-arch manifests (push) Canceled after 0s
Sync production source including routing, billing, Astra detection and public uptime. Update custom build instructions and license packaging.
86 lines
2.2 KiB
Go
86 lines
2.2 KiB
Go
package common
|
|
|
|
import (
|
|
"bytes"
|
|
"encoding/json"
|
|
"io"
|
|
|
|
kitutil "github.com/QuantumNous/new-api/relaykit/relayconvert/kitutil"
|
|
"github.com/gin-gonic/gin/binding"
|
|
)
|
|
|
|
type RawMessage = json.RawMessage
|
|
|
|
// hostJSONCodec is the single place where the host chooses its JSON engine.
|
|
// Swap the implementation here (for example to sonic.ConfigStd) and every
|
|
// common.* and kitutil.* JSON helper, including relaykit DTO (un)marshalling,
|
|
// follows. Injected from init() rather than main() so tests run on the same
|
|
// engine as production: common is imported by virtually every root package
|
|
// and test binary, while main() never executes under `go test`.
|
|
type hostJSONCodec struct{}
|
|
|
|
func (hostJSONCodec) Marshal(v any) ([]byte, error) {
|
|
return json.Marshal(v)
|
|
}
|
|
|
|
func (hostJSONCodec) Unmarshal(data []byte, v any) error {
|
|
return json.Unmarshal(data, v)
|
|
}
|
|
|
|
func (hostJSONCodec) Decode(r io.Reader, v any) error {
|
|
return json.NewDecoder(r).Decode(v)
|
|
}
|
|
|
|
func (hostJSONCodec) Valid(data []byte) bool {
|
|
return json.Valid(data)
|
|
}
|
|
|
|
func init() {
|
|
kitutil.SetCodec(hostJSONCodec{})
|
|
}
|
|
|
|
func Unmarshal(data []byte, v any) error {
|
|
return kitutil.Unmarshal(data, v)
|
|
}
|
|
|
|
func UnmarshalJsonStr(data string, v any) error {
|
|
return kitutil.UnmarshalJsonStr(data, v)
|
|
}
|
|
|
|
func DecodeJson(reader io.Reader, v any) error {
|
|
return kitutil.DecodeJson(reader, v)
|
|
}
|
|
|
|
// DecodeJsonWithValidation decodes JSON and applies Gin's configured binding-tag
|
|
// validator, including binding:"required" and any registered custom validators.
|
|
func DecodeJsonWithValidation(reader io.Reader, v any) error {
|
|
if err := DecodeJson(reader, v); err != nil {
|
|
return err
|
|
}
|
|
if binding.Validator == nil {
|
|
return nil
|
|
}
|
|
return binding.Validator.ValidateStruct(v)
|
|
}
|
|
|
|
func Marshal(v any) ([]byte, error) {
|
|
return kitutil.Marshal(v)
|
|
}
|
|
|
|
func IndentJson(data []byte) ([]byte, error) {
|
|
var buffer bytes.Buffer
|
|
if err := json.Indent(&buffer, data, "", " "); err != nil {
|
|
return nil, err
|
|
}
|
|
return buffer.Bytes(), nil
|
|
}
|
|
|
|
func GetJsonType(data RawMessage) string {
|
|
return kitutil.GetJsonType(data)
|
|
}
|
|
|
|
// JsonRawMessageToString returns JSON strings as their decoded value and other JSON values as raw text.
|
|
func JsonRawMessageToString(data RawMessage) string {
|
|
return kitutil.JsonRawMessageToString(data)
|
|
}
|