Use sentinel errors.

This commit is contained in:
Jay
2026-03-05 10:04:47 -05:00
parent 68354a73fc
commit 0ed07a81e7

View File

@@ -3,6 +3,7 @@ package heartwood
import ( import (
"context" "context"
"encoding/json" "encoding/json"
"errors"
"fmt" "fmt"
roots "git.wisehodl.dev/jay/go-roots/events" roots "git.wisehodl.dev/jay/go-roots/events"
"github.com/boltdb/bolt" "github.com/boltdb/bolt"
@@ -37,6 +38,10 @@ type WriteReport struct {
Error error Error error
} }
var ErrMalformedJSON = errors.New("unrecognized event format")
var ErrInvalidEvent = errors.New("invalid event")
var ErrDuplicate = errors.New("event already exists")
func WriteEvents( func WriteEvents(
events [][]byte, events [][]byte,
driver neo4j.Driver, boltdb *bolt.DB, driver neo4j.Driver, boltdb *bolt.DB,
@@ -154,14 +159,14 @@ func parseEventJSON(wg *sync.WaitGroup, inChan, parsedChan, excludedChan chan Ev
jsonBytes := traveller.JSON jsonBytes := traveller.JSON
err := json.Unmarshal(jsonBytes, &event) err := json.Unmarshal(jsonBytes, &event)
if err != nil { if err != nil {
traveller.Error = fmt.Errorf("rejected: unrecognized event format: %w", err) traveller.Error = fmt.Errorf("rejected: %w: %w", ErrMalformedJSON, err)
excludedChan <- traveller excludedChan <- traveller
continue continue
} }
err = roots.Validate(event) err = roots.Validate(event)
if err != nil { if err != nil {
traveller.Error = fmt.Errorf("rejected: invalid event: %w", err) traveller.Error = fmt.Errorf("rejected: %w: %w", ErrInvalidEvent, err)
excludedChan <- traveller excludedChan <- traveller
continue continue
} }
@@ -216,7 +221,7 @@ func processPolicyRulesBatch(
for _, traveller := range batch { for _, traveller := range batch {
if existsMap[traveller.ID] { if existsMap[traveller.ID] {
traveller.Error = fmt.Errorf("skipped: event already exists") traveller.Error = fmt.Errorf("skipped: %w", ErrDuplicate)
skippedChan <- traveller skippedChan <- traveller
} else { } else {
queuedChan <- traveller queuedChan <- traveller