You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
34 lines
832 B
34 lines
832 B
package main
|
|
|
|
import (
|
|
"encoding/json"
|
|
"fmt"
|
|
"io"
|
|
"os"
|
|
)
|
|
|
|
type journalIdentity struct {
|
|
OperationID string `json:"operation_id"`
|
|
State string `json:"state"`
|
|
}
|
|
|
|
func readJournalOperation(path string) (journalIdentity, error) {
|
|
file, err := os.Open(path)
|
|
if err != nil {
|
|
return journalIdentity{}, err
|
|
}
|
|
defer file.Close()
|
|
var journal journalIdentity
|
|
decoder := json.NewDecoder(io.LimitReader(file, 1024*1024))
|
|
if err := decoder.Decode(&journal); err != nil {
|
|
return journalIdentity{}, err
|
|
}
|
|
var trailing any
|
|
if err := decoder.Decode(&trailing); err != io.EOF {
|
|
return journalIdentity{}, fmt.Errorf("journal must contain exactly one JSON value")
|
|
}
|
|
if journal.OperationID == "" || journal.State == "" {
|
|
return journalIdentity{}, fmt.Errorf("journal identity or state is empty")
|
|
}
|
|
return journal, nil
|
|
}
|
|
|