messagelog: Use custom errors

master
Onion Ltd 4 years ago
parent c4566b07e2
commit e9406b88e9
Signed by: onionltd
GPG Key ID: E4B6CAC49B242A44

@ -1,7 +1,19 @@
package messagelog package messagelog
import "fmt"
type ErrInvalidMessage struct { type ErrInvalidMessage struct {
message string
}
func (err *ErrInvalidMessage) Error() string {
return fmt.Sprintf("invalid message format: %s", err.message)
} }
type ErrTopicNotFound struct { type ErrTopicNotFound struct {
topic string
}
func (err *ErrTopicNotFound) Error() string {
return fmt.Sprintf("topic `%s` not found", err.topic)
} }

@ -1,7 +1,6 @@
package messagelog package messagelog
import ( import (
"errors"
"sync" "sync"
) )
@ -24,7 +23,7 @@ func (ml *Log) Push(topic string, message Message) error {
defer ml.logLock.Unlock() defer ml.logLock.Unlock()
log, ok := ml.log[topic] log, ok := ml.log[topic]
if !ok { if !ok {
return errors.New("topic doesn't exist") return &ErrTopicNotFound{topic: topic}
} }
message.Index = len(log) message.Index = len(log)
ml.log[topic] = append(log, message) ml.log[topic] = append(log, message)
@ -36,7 +35,7 @@ func (ml *Log) List(topic string, offset int) ([]Message, error) {
defer ml.logLock.RUnlock() defer ml.logLock.RUnlock()
log, ok := ml.log[topic] log, ok := ml.log[topic]
if !ok { if !ok {
return nil, errors.New("topic doesn't exist") return nil, &ErrTopicNotFound{topic: topic}
} }
if offset >= len(log) { if offset >= len(log) {
return []Message{}, nil return []Message{}, nil

@ -10,6 +10,8 @@ type Message struct {
} }
func (m Message) validate() error { func (m Message) validate() error {
// TODO: Use ErrInvalidMessage! if err := validator.Validate(m); err != nil {
return validator.Validate(m) return &ErrInvalidMessage{message: err.Error()}
}
return nil
} }

Loading…
Cancel
Save