implemented persistence
This commit is contained in:
@@ -0,0 +1,46 @@
|
||||
package internal
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
||||
"github.com/shopspring/decimal"
|
||||
)
|
||||
|
||||
// StateVersion is the schema version of the persisted State struct.
|
||||
const StateVersion = "1"
|
||||
|
||||
// State is the platform-agnostic representation of the buy-queue state that is
|
||||
// written to disk after a successful run and reloaded on the next run.
|
||||
type State struct {
|
||||
Version string `json:"version"`
|
||||
Platform string `json:"platform"`
|
||||
Queues map[string][]persistedFiller `json:"queues"`
|
||||
}
|
||||
|
||||
// persistedFiller is the on-disk representation of a single Filler. The
|
||||
// Record-specific data is kept as opaque bytes so the internal package does
|
||||
// not need to know about any broker package's concrete Record type.
|
||||
type persistedFiller struct {
|
||||
ReaderData []byte `json:"reader_data"`
|
||||
Quantity decimal.Decimal `json:"quantity"`
|
||||
Price decimal.Decimal `json:"price"`
|
||||
Filled decimal.Decimal `json:"filled"`
|
||||
}
|
||||
|
||||
// RecordEncoder encodes a Record into its broker-specific byte representation.
|
||||
type RecordEncoder interface {
|
||||
MarshalRecord(context.Context, Record) ([]byte, error)
|
||||
}
|
||||
|
||||
// RecordDecoder decodes broker-specific bytes back into a Record.
|
||||
type RecordDecoder interface {
|
||||
UnmarshalRecord(context.Context, []byte) (Record, error)
|
||||
}
|
||||
|
||||
// RecordSerializer composes encoding and decoding of Records. Broker packages
|
||||
// own the implementation so that lazy/closured Record fields can be re-wired
|
||||
// on load.
|
||||
type RecordSerializer interface {
|
||||
RecordEncoder
|
||||
RecordDecoder
|
||||
}
|
||||
Reference in New Issue
Block a user