package storage import ( "os" "time" ) // DoesNotExistError is used as a generic error to return when a target path does not // exist in storage. Equivalent to os.ErrorNotExist such that it will work with os.IsNotExist(err) var DoesNotExistError = os.ErrNotExist // StorageInfo is a data object containing basic information about the path in storage. type StorageInfo struct { Name string // base name of the file Size int64 // length in bytes for regular files ModTime time.Time // modification time } // Storage provides an API for storing binary data type Storage interface { // FullPath returns the storage working path combined with the path provided FullPath(path string) string // Stat returns the StorageStats for the specific path. Stat(path string) (*StorageInfo, error) // Read uses the relative path of the storage combined with the provided path to // read the contents. Read(path string) ([]byte, error) // Write uses the relative path of the storage combined with the provided path // to write a new file or overwrite an existing file. Write(path string, data []byte) error // Remove uses the relative path of the storage combined with the provided path to // remove a file from storage permanently. Remove(path string) error // Exists uses the relative path of the storage combined with the provided path to // determine if the file exists. Exists(path string) (bool, error) // List uses the relative path of the storage combined with the provided path to return // storage information for the files. List(path string) ([]*StorageInfo, error) } // IsNotExist returns true if the error provided from a storage object is DoesNotExist func IsNotExist(err error) bool { if err == nil { return false } return err.Error() == DoesNotExistError.Error() }