26 lines
556 B
Go
26 lines
556 B
Go
package main
|
|
|
|
import (
|
|
"encoding/json"
|
|
"fmt"
|
|
)
|
|
|
|
type GameMessage struct {
|
|
Type string `json:"type"`
|
|
Message json.RawMessage `json:"message"`
|
|
}
|
|
|
|
func parseSubMessage[T any](data json.RawMessage) (*T, error) {
|
|
var message T
|
|
if err := json.Unmarshal(data, &message); err != nil {
|
|
return nil, fmt.Errorf("Unmarshal submessage: %w", err)
|
|
}
|
|
return &message, nil
|
|
}
|
|
|
|
func makeMessage[T any](name string, resp T) []byte {
|
|
payload, _ := json.Marshal(&resp)
|
|
data, _ := json.Marshal(&GameMessage{name, json.RawMessage(payload)})
|
|
return data
|
|
}
|