mirror of
https://github.com/akyaiy/GoSally-mvp.git
synced 2026-01-03 08:32:24 +00:00
59 lines
1.0 KiB
Go
59 lines
1.0 KiB
Go
package rpc
|
|
|
|
import (
|
|
"crypto/md5"
|
|
"encoding/json"
|
|
"fmt"
|
|
|
|
"github.com/akyaiy/GoSally-mvp/internal/core/corestate"
|
|
"github.com/google/uuid"
|
|
)
|
|
|
|
func generateChecksum(result any) string {
|
|
if result == nil {
|
|
return ""
|
|
}
|
|
data, err := json.Marshal(result)
|
|
if err != nil {
|
|
return ""
|
|
}
|
|
return fmt.Sprintf("%x", md5.Sum(data))
|
|
}
|
|
|
|
func generateSalt() string {
|
|
return uuid.NewString()
|
|
}
|
|
|
|
func GetData(data any) *RPCData {
|
|
return &RPCData{
|
|
Salt: generateSalt(),
|
|
ResponsibleNode: corestate.NODE_UUID,
|
|
Checksum: generateChecksum(data),
|
|
}
|
|
}
|
|
|
|
func NewError(code int, message string, data any, id *json.RawMessage) *RPCResponse {
|
|
Error := make(map[string]any)
|
|
Error = map[string]any{
|
|
"code": code,
|
|
"message": message,
|
|
"data": data,
|
|
}
|
|
|
|
return &RPCResponse{
|
|
JSONRPC: JSONRPCVersion,
|
|
ID: id,
|
|
Error: Error,
|
|
Data: GetData(Error),
|
|
}
|
|
}
|
|
|
|
func NewResponse(result any, id *json.RawMessage) *RPCResponse {
|
|
return &RPCResponse{
|
|
JSONRPC: JSONRPCVersion,
|
|
ID: id,
|
|
Result: result,
|
|
Data: GetData(result),
|
|
}
|
|
}
|