38 lines
1.5 KiB
Go
38 lines
1.5 KiB
Go
package inmem
|
|
|
|
// An Opt modifies store at instantiation.
|
|
type Opt func(*store)
|
|
|
|
// OptRoundTripOnWrite sets whether incoming objects written to store are
|
|
// round-tripped through JSON to ensure they are serializable to JSON.
|
|
//
|
|
// Callers should disable this if they can guarantee all objects passed to
|
|
// Write() are serializable to JSON. Failing to do so may result in undefined
|
|
// behavior, including panics.
|
|
//
|
|
// Usually, when only storing objects in the inmem store that have been read
|
|
// via encoding/json, this is safe to disable, and comes with an improvement
|
|
// in performance and memory use.
|
|
//
|
|
// If setting to false, callers should deep-copy any objects passed to Write()
|
|
// unless they can guarantee the objects will not be mutated after being written,
|
|
// and that mutations happening to the objects after they have been passed into
|
|
// Write() don't affect their logic.
|
|
func OptRoundTripOnWrite(enabled bool) Opt {
|
|
return func(s *store) {
|
|
s.roundTripOnWrite = enabled
|
|
}
|
|
}
|
|
|
|
// OptReturnASTValuesOnRead sets whether data values added to the store should be
|
|
// eagerly converted to AST values, which are then returned on read.
|
|
//
|
|
// When enabled, this feature does not sanity check data before converting it to AST values,
|
|
// which may result in panics if the data is not valid. Callers should ensure that passed data
|
|
// can be serialized to AST values; otherwise, it's recommended to also enable OptRoundTripOnWrite.
|
|
func OptReturnASTValuesOnRead(enabled bool) Opt {
|
|
return func(s *store) {
|
|
s.returnASTValuesOnRead = enabled
|
|
}
|
|
}
|