87 lines
2.0 KiB
Go
87 lines
2.0 KiB
Go
// Copyright (c) HashiCorp, Inc.
|
|
// SPDX-License-Identifier: MPL-2.0
|
|
|
|
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.
|
|
// 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
|
|
}
|
|
}
|