]> git.giacomolli.uk - onechat/blobdiff - log.go
Name private helpers for their owning feature
[onechat] / log.go
diff --git a/log.go b/log.go
index 2b9f32f5952c1285dda18bd78ff6ed0886849686..1ed70e78e36aaccaf862118cfe56c95fa107c671 100644 (file)
--- a/log.go
+++ b/log.go
@@ -105,6 +105,50 @@ func (l *Log) Close() error {
        return err
 }
 
        return err
 }
 
+// catchUp indexes the lines after the last indexed line.
+func (l *Log) catchUp(ctx context.Context) error {
+       start := Position{}
+       if l.index.count > 0 {
+               record, _, err := l.index.Read(l.index.count - 1)
+               if err != nil {
+                       return err
+               }
+
+               last := decodePosition(record)
+               start = Position{
+                       day:    last.day,
+                       offset: last.offset + uint64(last.length),
+               }
+       }
+
+       return l.journal.Scan(ctx, start, func(line []byte, place Position) error {
+               var message Message
+
+               err := json.Unmarshal(line, &message)
+               if err != nil {
+                       return fmt.Errorf("decode log message: %w", err)
+               }
+
+               if message.ID != l.index.count {
+                       return fmt.Errorf("expected message %d, found %d", l.index.count, message.ID)
+               }
+
+               err = logValidateMessage(message)
+               if err != nil {
+                       return fmt.Errorf("message %d: %w", message.ID, err)
+               }
+
+               return l.addIndex(place)
+       })
+}
+
+func (l *Log) addIndex(place Position) error {
+       record := make([]byte, positionBytes)
+       encodePosition(record, place)
+
+       return l.index.Append(record)
+}
+
 // Append writes a new message to the log and returns it with its ID, size, and
 // date.
 func (l *Log) Append(kind, text string) (Message, error) {
 // Append writes a new message to the log and returns it with its ID, size, and
 // date.
 func (l *Log) Append(kind, text string) (Message, error) {
@@ -202,50 +246,6 @@ func (l *Log) Message(id int) (Message, error) {
        return message, nil
 }
 
        return message, nil
 }
 
-// catchUp indexes the lines after the last indexed line.
-func (l *Log) catchUp(ctx context.Context) error {
-       start := Position{}
-       if l.index.count > 0 {
-               record, _, err := l.index.Read(l.index.count - 1)
-               if err != nil {
-                       return err
-               }
-
-               last := decodePosition(record)
-               start = Position{
-                       day:    last.day,
-                       offset: last.offset + uint64(last.length),
-               }
-       }
-
-       return l.journal.Scan(ctx, start, func(line []byte, place Position) error {
-               var message Message
-
-               err := json.Unmarshal(line, &message)
-               if err != nil {
-                       return fmt.Errorf("decode log message: %w", err)
-               }
-
-               if message.ID != l.index.count {
-                       return fmt.Errorf("expected message %d, found %d", l.index.count, message.ID)
-               }
-
-               err = logValidateMessage(message)
-               if err != nil {
-                       return fmt.Errorf("message %d: %w", message.ID, err)
-               }
-
-               return l.addIndex(place)
-       })
-}
-
-func (l *Log) addIndex(place Position) error {
-       record := make([]byte, positionBytes)
-       encodePosition(record, place)
-
-       return l.index.Append(record)
-}
-
 // logValidateMessage makes sure that a message has a known kind, valid UTF-8
 // text, the size of its text, and a valid date.
 func logValidateMessage(message Message) error {
 // logValidateMessage makes sure that a message has a known kind, valid UTF-8
 // text, the size of its text, and a valid date.
 func logValidateMessage(message Message) error {