2022-12-14 14:37:14 +00:00
|
|
|
package filer
|
|
|
|
|
|
|
|
import (
|
|
|
|
"context"
|
|
|
|
"fmt"
|
|
|
|
"io"
|
2023-05-31 09:11:17 +00:00
|
|
|
"time"
|
2022-12-14 14:37:14 +00:00
|
|
|
)
|
|
|
|
|
|
|
|
type WriteMode int
|
|
|
|
|
|
|
|
const (
|
|
|
|
OverwriteIfExists WriteMode = iota
|
|
|
|
CreateParentDirectories = iota << 1
|
|
|
|
)
|
|
|
|
|
2023-05-31 09:11:17 +00:00
|
|
|
// FileInfo abstracts over file information from different file systems.
|
|
|
|
// Inspired by https://pkg.go.dev/io/fs#FileInfo.
|
|
|
|
type FileInfo struct {
|
|
|
|
// The type of the file in workspace.
|
|
|
|
Type string
|
|
|
|
|
|
|
|
// Base name.
|
|
|
|
Name string
|
|
|
|
|
|
|
|
// Size in bytes.
|
|
|
|
Size int64
|
|
|
|
|
|
|
|
// Modification time.
|
|
|
|
ModTime time.Time
|
|
|
|
}
|
|
|
|
|
2022-12-14 14:37:14 +00:00
|
|
|
type FileAlreadyExistsError struct {
|
|
|
|
path string
|
|
|
|
}
|
|
|
|
|
|
|
|
func (err FileAlreadyExistsError) Error() string {
|
|
|
|
return fmt.Sprintf("file already exists: %s", err.path)
|
|
|
|
}
|
|
|
|
|
|
|
|
type NoSuchDirectoryError struct {
|
|
|
|
path string
|
|
|
|
}
|
|
|
|
|
|
|
|
func (err NoSuchDirectoryError) Error() string {
|
|
|
|
return fmt.Sprintf("no such directory: %s", err.path)
|
|
|
|
}
|
|
|
|
|
|
|
|
// Filer is used to access files in a workspace.
|
|
|
|
// It has implementations for accessing files in WSFS and in DBFS.
|
|
|
|
type Filer interface {
|
|
|
|
// Write file at `path`.
|
|
|
|
// Use the mode to further specify behavior.
|
|
|
|
Write(ctx context.Context, path string, reader io.Reader, mode ...WriteMode) error
|
|
|
|
|
|
|
|
// Read file at `path`.
|
|
|
|
Read(ctx context.Context, path string) (io.Reader, error)
|
|
|
|
|
|
|
|
// Delete file at `path`.
|
|
|
|
Delete(ctx context.Context, path string) error
|
2023-05-31 09:11:17 +00:00
|
|
|
|
|
|
|
// Return contents of directory at `path`.
|
|
|
|
ReadDir(ctx context.Context, path string) ([]FileInfo, error)
|
|
|
|
|
|
|
|
// Creates directory at `path`, creating any intermediate directories as required.
|
|
|
|
Mkdir(ctx context.Context, path string) error
|
2022-12-14 14:37:14 +00:00
|
|
|
}
|