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.
boundary/internal/storage/options.go

88 lines
2.1 KiB

// Copyright (c) HashiCorp, Inc.
// SPDX-License-Identifier: BUSL-1.1
package storage
// SyncMode is used to determine how a file is synced when closed.
type SyncMode uint8
const (
// Asynchronous mode will trigger a file to sync to the storage
// bucket on a recurring interval once it has been closed. It will continue
// retrying until the root container is closed.
// Asynchronous is the default sync mode.
Asynchronous SyncMode = iota
// Synchronous mode will cause a file closed call to block until the file
// has been synced to the storage bucket. Any error while syncing the file
// will be returned to the caller of Close.
Synchronous
// NoSync mode will result in Close not syncing the file to the storage
// bucket.
NoSync
)
// AccessMode is use to determine the access mode a file is opened with.
type AccessMode uint8
const (
// ReadOnly mode will open a file as read only.
// ReadOnly is the default access mode.
ReadOnly AccessMode = iota
// WriteOnly mode will open a file for writing only.
WriteOnly
// ReadWrite mode will open a file for reading and writing.
ReadWrite
)
// GetOpts - iterate the inbound Options and return a struct.
func GetOpts(opt ...Option) Options {
opts := getDefaultOptions()
for _, o := range opt {
o(&opts)
}
return opts
}
func getDefaultOptions() Options {
return Options{
WithCloseSyncMode: Asynchronous,
WithFileAccessMode: ReadOnly,
WithCreateFile: false,
}
}
// Options are storage options.
type Options struct {
WithCloseSyncMode SyncMode
WithFileAccessMode AccessMode
WithCreateFile bool
}
// Option is a storage option.
type Option func(*Options)
// WithCloseSyncMode sets how a file is synced when closed.
func WithCloseSyncMode(m SyncMode) Option {
return func(o *Options) {
o.WithCloseSyncMode = m
}
}
// WithCreateFile indicates a file should be created when opening.
func WithCreateFile() Option {
return func(o *Options) {
o.WithCreateFile = true
}
}
// WithFileAccessMode sets the access mode when a file is opened.
func WithFileAccessMode(m AccessMode) Option {
return func(o *Options) {
o.WithFileAccessMode = m
}
}