2020-02-28 15:44:15 +01:00
|
|
|
package vfscommon
|
|
|
|
|
|
|
|
import (
|
|
|
|
"fmt"
|
|
|
|
|
2020-12-11 18:48:09 +01:00
|
|
|
"github.com/rclone/rclone/fs"
|
2020-02-28 15:44:15 +01:00
|
|
|
"github.com/rclone/rclone/lib/errors"
|
|
|
|
)
|
|
|
|
|
|
|
|
// CacheMode controls the functionality of the cache
|
|
|
|
type CacheMode byte
|
|
|
|
|
|
|
|
// CacheMode options
|
|
|
|
const (
|
|
|
|
CacheModeOff CacheMode = iota // cache nothing - return errors for writes which can't be satisfied
|
2020-10-13 23:49:58 +02:00
|
|
|
CacheModeMinimal // cache only the minimum, e.g. read/write opens
|
2020-02-28 15:44:15 +01:00
|
|
|
CacheModeWrites // cache all files opened with write intent
|
|
|
|
CacheModeFull // cache all files opened in any mode
|
|
|
|
)
|
|
|
|
|
|
|
|
var cacheModeToString = []string{
|
|
|
|
CacheModeOff: "off",
|
|
|
|
CacheModeMinimal: "minimal",
|
|
|
|
CacheModeWrites: "writes",
|
|
|
|
CacheModeFull: "full",
|
|
|
|
}
|
|
|
|
|
|
|
|
// String turns a CacheMode into a string
|
|
|
|
func (l CacheMode) String() string {
|
|
|
|
if l >= CacheMode(len(cacheModeToString)) {
|
|
|
|
return fmt.Sprintf("CacheMode(%d)", l)
|
|
|
|
}
|
|
|
|
return cacheModeToString[l]
|
|
|
|
}
|
|
|
|
|
|
|
|
// Set a CacheMode
|
|
|
|
func (l *CacheMode) Set(s string) error {
|
|
|
|
for n, name := range cacheModeToString {
|
|
|
|
if s != "" && name == s {
|
|
|
|
*l = CacheMode(n)
|
|
|
|
return nil
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return errors.Errorf("Unknown cache mode level %q", s)
|
|
|
|
}
|
|
|
|
|
|
|
|
// Type of the value
|
|
|
|
func (l *CacheMode) Type() string {
|
|
|
|
return "CacheMode"
|
|
|
|
}
|
2020-12-11 18:48:09 +01:00
|
|
|
|
|
|
|
// UnmarshalJSON makes sure the value can be parsed as a string or integer in JSON
|
|
|
|
func (l *CacheMode) UnmarshalJSON(in []byte) error {
|
|
|
|
return fs.UnmarshalJSONFlag(in, l, func(i int64) error {
|
|
|
|
if i < 0 || i >= int64(len(cacheModeToString)) {
|
|
|
|
return errors.Errorf("Unknown cache mode level %d", i)
|
|
|
|
}
|
|
|
|
*l = CacheMode(i)
|
|
|
|
return nil
|
|
|
|
})
|
|
|
|
}
|