Use sentinel errors.
This commit is contained in:
11
write.go
11
write.go
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user