src to pkg, impl lobby.Closed
This commit is contained in:
34
pkg/lib/event/serialize.go
Normal file
34
pkg/lib/event/serialize.go
Normal file
@@ -0,0 +1,34 @@
|
||||
package event
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
)
|
||||
|
||||
func Serialize(t string, v any) ([]byte, error) {
|
||||
var wrapper struct {
|
||||
Type string `json:"type"`
|
||||
Payload any `json:"payload"`
|
||||
}
|
||||
wrapper.Type = t
|
||||
wrapper.Payload = v
|
||||
return json.Marshal(wrapper)
|
||||
}
|
||||
|
||||
func Parse(b []byte, typesToPointers map[string]any) (string, error) {
|
||||
var wrapper struct {
|
||||
Type string `json:"type"`
|
||||
Payload json.RawMessage `json:"payload"`
|
||||
}
|
||||
if err := json.Unmarshal(b, &wrapper); err != nil {
|
||||
return "", err
|
||||
}
|
||||
|
||||
if ptr, ok := typesToPointers[wrapper.Type]; !ok {
|
||||
return "", fmt.Errorf("cannot parse unknown type %s", wrapper.Type)
|
||||
} else if err := json.Unmarshal(wrapper.Payload, ptr); err != nil {
|
||||
return "", fmt.Errorf("failed parsing type %s: %w", wrapper.Type, err)
|
||||
}
|
||||
|
||||
return wrapper.Type, nil
|
||||
}
|
||||
Reference in New Issue
Block a user