add cdata;

develop cdata/v0.1.0
Ge Song 7 months ago
parent e2f234c17e
commit dd36810af7

@ -0,0 +1,8 @@
module git.blauwelle.com/go/crate/cdata
go 1.21.3
require (
git.blauwelle.com/go/crate/cerrors v0.1.0
git.blauwelle.com/go/crate/runtimehelper v0.2.0
)

@ -0,0 +1,6 @@
git.blauwelle.com/go/crate/cerrors v0.0.0-20240507062518-e2f234c17eb2 h1:h3WnMe7tQNbh6WARbixrf8wTUrWCDNc3F6ikb1HQhj4=
git.blauwelle.com/go/crate/cerrors v0.0.0-20240507062518-e2f234c17eb2/go.mod h1:vIWWWVAEwattbg1eVOUjnz5dEG7q7v/Ve0oR1HFsblM=
git.blauwelle.com/go/crate/cerrors v0.1.0 h1:+9TdG54+AUG1NmUgrEPsAPY8n8RIUAQy9qx4drU9RtE=
git.blauwelle.com/go/crate/cerrors v0.1.0/go.mod h1:vIWWWVAEwattbg1eVOUjnz5dEG7q7v/Ve0oR1HFsblM=
git.blauwelle.com/go/crate/runtimehelper v0.2.0 h1:W19wipPCyFSGHOWzqtfouNJu7MDeJobP+iRM4bPiJpM=
git.blauwelle.com/go/crate/runtimehelper v0.2.0/go.mod h1:yVMA0GkO9AS7iuPmalHKeWyv9en0JWj25rY1vpTuHhk=

@ -0,0 +1,64 @@
package cdata
import (
"errors"
"git.blauwelle.com/go/crate/cerrors"
"git.blauwelle.com/go/crate/runtimehelper"
)
const maximumFrames = 16
type Response[T any] struct {
Data T `json:"data,omitempty"`
Code cerrors.Code `json:"code"`
Message string `json:"message,omitempty"`
Debug string `json:"debug,omitempty"`
Traceback []runtimehelper.Frame `json:"traceback,omitempty"`
}
type PageData[T any] struct {
List []T `json:"list"`
PageIndex int `json:"pageIndex"` // >=1
PageSize int `json:"pageSize"` // >=1
Total int `json:"total"` // maybe 0
}
func NewOkResponse[T any](data T) Response[T] {
return Response[T]{
Code: cerrors.CodeOK,
Data: data,
}
}
func NewResponseFromError(err error) Response[struct{}] {
e := &cerrors.Error{}
if !errors.As(err, &e) {
response := Response[struct{}]{
Code: cerrors.CodeUnknown,
Message: "未知错误",
}
if cerrors.FlagDebug {
response.Debug = err.Error()
response.Traceback = runtimehelper.Stack(1, maximumFrames)
}
return response
}
return Response[struct{}]{
Code: e.Code,
Message: e.Message,
Debug: e.Debug,
Traceback: e.Traceback,
}
}
func NewErrorResponse(code cerrors.Code, message string) Response[struct{}] {
response := Response[struct{}]{
Code: code,
Message: message,
}
if cerrors.FlagDebug {
response.Traceback = runtimehelper.Stack(1, maximumFrames)
}
return response
}
Loading…
Cancel
Save