Review this generated code before it ships.
Load a session by ID, preserve matchable storage and decoding causes, reject JSON null, keep stored payloads out of errors, and leave reporting to the caller.
Go
func LoadSession(id string, store SessionStore) (*Session, error) {
data, err := store.Read(id)
if err != nil {
return nil, fmt.Errorf("load session %q: %v", id, err)
}
var session *Session
if err := json.Unmarshal(data, &session); err != nil {
log.Printf("decode session %q: %v", id, err)
return nil, fmt.Errorf("decode payload %s: %w", data, err)
}
if session.UserID == "" {
return nil, errors.New("session has no user")
}
return session, nil
}
generated code is illustrative, not from any one model