micro/store/options.go
Vasiliy Tolstov 6f6f850af6
Some checks failed
lint / lint (pull_request) Failing after 1m31s
pr / test (pull_request) Failing after 2m37s
move options to dedicated package
Signed-off-by: Vasiliy Tolstov <v.tolstov@unistack.org>
2023-07-29 00:40:58 +03:00

206 lines
4.8 KiB
Go

package store
import (
"context"
"crypto/tls"
"time"
"go.unistack.org/micro/v4/codec"
"go.unistack.org/micro/v4/logger"
"go.unistack.org/micro/v4/metadata"
"go.unistack.org/micro/v4/meter"
"go.unistack.org/micro/v4/options"
"go.unistack.org/micro/v4/tracer"
)
// Options contains configuration for the Store
type Options struct {
// Meter used for metrics
Meter meter.Meter
// Tracer used for tracing
Tracer tracer.Tracer
// Context holds external options
Context context.Context
// Codec used to marshal/unmarshal
Codec codec.Codec
// Logger used for logging
Logger logger.Logger
// TLSConfig holds tls.TLSConfig options
TLSConfig *tls.Config
// Name specifies store name
Name string
// Namespace of the records
Namespace string
// Separator used as key parts separator
Separator string
// Address contains store address
Address []string
// Timeout specifies timeout duration for all operations
Timeout time.Duration
}
// NewOptions creates options struct
func NewOptions(opts ...options.Option) Options {
options := Options{
Logger: logger.DefaultLogger,
Context: context.Background(),
Codec: codec.DefaultCodec,
Tracer: tracer.DefaultTracer,
Meter: meter.DefaultMeter,
Separator: DefaultSeparator,
}
for _, o := range opts {
o(&options)
}
return options
}
// Separator the value used as key parts separator
func Separator(s string) options.Option {
return func(src interface{}) error {
return options.Set(src, s, "Separator")
}
}
// Timeout sets the timeout
func Timeout(td time.Duration) options.Option {
return func(src interface{}) error {
return options.Set(src, td, ".Timeout")
}
}
// ReadOptions configures an individual Read operation
type ReadOptions struct {
// Context holds external options
Context context.Context
// Namespace holds namespace
Namespace string
}
// NewReadOptions fills ReadOptions struct with opts slice
func NewReadOptions(opts ...options.Option) ReadOptions {
options := ReadOptions{}
for _, o := range opts {
o(&options)
}
return options
}
// WriteOptions configures an individual Write operation
type WriteOptions struct {
// Context holds external options
Context context.Context
// Metadata contains additional metadata
Metadata metadata.Metadata
// Namespace holds namespace
Namespace string
// TTL specifies key TTL
TTL time.Duration
}
// NewWriteOptions fills WriteOptions struct with opts slice
func NewWriteOptions(opts ...options.Option) WriteOptions {
options := WriteOptions{}
for _, o := range opts {
o(&options)
}
return options
}
// WriteMetadata add metadata.Metadata
func WriteMetadata(md metadata.Metadata) options.Option {
return func(src interface{}) error {
return options.Set(src, metadata.Copy(md), ".Metadata")
}
}
// WriteTTL is the time the record expires
func WriteTTL(td time.Duration) options.Option {
return func(src interface{}) error {
return options.Set(src, td, ".TTL")
}
}
// DeleteOptions configures an individual Delete operation
type DeleteOptions struct {
// Context holds external options
Context context.Context
// Namespace holds namespace
Namespace string
}
// NewDeleteOptions fills DeleteOptions struct with opts slice
func NewDeleteOptions(opts ...options.Option) DeleteOptions {
options := DeleteOptions{}
for _, o := range opts {
o(&options)
}
return options
}
// ListOptions configures an individual List operation
type ListOptions struct {
Context context.Context
Prefix string
Suffix string
Namespace string
Limit uint
Offset uint
}
// NewListOptions fills ListOptions struct with opts slice
func NewListOptions(opts ...options.Option) ListOptions {
options := ListOptions{}
for _, o := range opts {
o(&options)
}
return options
}
// ListPrefix returns all keys that are prefixed with key
func ListPrefix(s string) options.Option {
return func(src interface{}) error {
return options.Set(src, s, ".Prefix")
}
}
// ListSuffix returns all keys that end with key
func ListSuffix(s string) options.Option {
return func(src interface{}) error {
return options.Set(src, s, ".Prefix")
}
}
// ListLimit limits the number of returned keys
func ListLimit(n uint) options.Option {
return func(src interface{}) error {
return options.Set(src, n, ".Limit")
}
}
// ListOffset use with Limit for pagination
func ListOffset(n uint) options.Option {
return func(src interface{}) error {
return options.Set(src, n, ".Offset")
}
}
// ExistsOptions holds options for Exists method
type ExistsOptions struct {
// Context holds external options
Context context.Context
// Namespace contains namespace
Namespace string
}
// NewExistsOptions helper for Exists method
func NewExistsOptions(opts ...options.Option) ExistsOptions {
options := ExistsOptions{
Context: context.Background(),
}
for _, o := range opts {
o(&options)
}
return options
}