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 }