package main
import (
"encoding/json"
"fmt"
)
type Envelope struct {
Type string `json:"type"`
Payload json.RawMessage `json:"payload"` // hold bytes, decode later
}
type SignupPayload { /* ... */ }
type SignupData struct{ UserID int `json:"user_id"` }
type LoginData struct{ Email string `json:"email"` }
func main() {
raw := []byte(`{"type":"signup","payload":{"user_id":42}}`)
var env Envelope
json.Unmarshal(raw, &env)
switch env.Type {
case "signup":
var d SignupData
json.Unmarshal(env.Payload, &d)
fmt.Printf("signup: user_id=%d\n", d.UserID)
case "login":
var d LoginData
json.Unmarshal(env.Payload, &d)
fmt.Printf("login: email=%s\n", d.Email)
}
}
Create a free account and build your private vault. Share publicly whenever you want.