siyuan-note/siyuan · error
bazaar response variant is not set
Error message
bazaar response variant is not set
What it means
BazaarUserRatingsResult is a success/failure union (BazaarUserRatingsData or BazaarRatingError); MarshalJSON serializes the set variant and returns this error when both pointers are nil. The union type exists so the marketplace ratings endpoint can only produce a well-formed success or error body.
Solutions
- Use NewBazaarUserRatingsResult / NewBazaarUserRatingsResultError on all paths
- Return the BazaarRatingError failure variant when the upstream ratings call fails
- Test that every branch of the handler marshals successfully
Example fix
// before
var result apicontract.BazaarUserRatingsResult
return result
// after
return apicontract.NewBazaarUserRatingsResultError(apicontract.BazaarRatingError{Msg: msg}) Defensive patterns
Strategy: validation
Validate before calling
func checkBazaarUserRatings(r apicontract.BazaarUserRatingsResult) error {
if _, err := json.Marshal(r); err != nil {
return fmt.Errorf("ratings result unset: %w", err)
}
return nil
} Try / catch
payload, err := json.Marshal(result)
if err != nil {
return Response[apicontract.BazaarUserRatingsResult]{Code: 1, Msg: err.Error()}
} Prevention
- Always use NewBazaarUserRatingsResult / NewBazaarUserRatingsResultError
- Assign the failure variant when the upstream ratings fetch errors
- Test both success and failure branches of the endpoint
When it happens
Trigger: Marshaling a BazaarUserRatingsResult created as a zero value or via a struct literal without NewBazaarUserRatingsResult/NewBazaarUserRatingsResultError, typically in the getBazaarPackageUserRatings response path.
Common situations: Handler builds the result only inside a branch and returns the default otherwise; refactoring removed a constructor call; upstream rating fetch fails and neither variant is assigned.
Understand the failure class
Background: "This is a bug, please report it": internal invariant violations, unreachable panics, and SNH errors explained — this error's family across 47 libraries.
Related errors
- attribute view instance is not set
- attribute view response variant is not set
- bazaar downloads overflow
- get bazaar package failed
- install local marketplace package failed
AI-assisted analysis of siyuan-note/siyuan@9f775e8a12 (2026-09-19).
Data as JSON: /api/errors/7bdc1271ff1c3a48.
Report an issue: GitHub.
Appendix: source
Thrown at kernel/apicontract/bazaar.go:387
type BazaarRatingResult struct {
success *BazaarRatingData
failure *BazaarRatingError
}
func NewBazaarRatingResult(data BazaarRatingData) BazaarRatingResult {
return BazaarRatingResult{success: &data}
}
func NewBazaarRatingResultError(data BazaarRatingError) BazaarRatingResult {
return BazaarRatingResult{failure: &data}
}
func (data BazaarRatingResult) MarshalJSON() ([]byte, error) {
if data.success != nil {
return json.Marshal(data.success)
}
if data.failure != nil {
return json.Marshal(data.failure)
}
return nil, errors.New("bazaar response variant is not set")
}
type BazaarUserRatingsResult struct {
success *BazaarUserRatingsData
failure *BazaarRatingError
}
func NewBazaarUserRatingsResult(data BazaarUserRatingsData) BazaarUserRatingsResult {
return BazaarUserRatingsResult{success: &data}
}
func NewBazaarUserRatingsResultError(data BazaarRatingError) BazaarUserRatingsResult {
return BazaarUserRatingsResult{failure: &data}
}
func (data BazaarUserRatingsResult) MarshalJSON() ([]byte, error) {
if data.success != nil {
return json.Marshal(data.success)
}
if data.failure != nil {View on GitHub (pinned to 9f775e8a12)