golazy.dev golazy.dev / lazystorage Index | Files | Directories

package lazystorage

import "golazy.dev/lazystorage"

Package lazystorage defines small interfaces for object-style storage.

The package follows the standard library io/fs pattern: Storage is the small read capability, and optional interfaces add writes, deletes, listing, URLs, and watching. Implementations consume the options they recognize and return the remaining options to callers that compose multiple storage layers.

Functions

func Take[T any]

Take removes the first option assignable to T and returns it with the remaining options. It is useful for director implementations that consume recognized options and pass unknown ones downstream.

func Take[T any](options []any) (T, []any, bool)

func ValidateKey

ValidateKey validates an object key using io/fs path rules.

func ValidateKey(key string) error

Types

type Deleter

Deleter is implemented by storages that can delete objects.

type Deleter interface {
	Delete(context.Context, string, ...any) ([]any, error)
}

type DownloadName

DownloadName requests a download filename for generated URLs.

type DownloadName struct {
	Filename string
}

type Event

Event describes a storage change.

type Event struct {
	Key	string
	Op	string
}

type Events

Events streams storage change events.

type Events interface {
	Next(context.Context) (Event, error)
	Close() error
}

type ExpiresAt

ExpiresAt requests a URL or token that expires at Time.

type ExpiresAt struct {
	Time time.Time
}

type ExpiresIn

ExpiresIn requests a URL or token that expires after Duration.

type ExpiresIn struct {
	Duration time.Duration
}

type File

File is an opened object. Callers must close it.

type File interface {
	io.Reader
	io.Closer
	Stat() (Info, error)
}

type Filesystem

Filesystem stores objects under a local root directory.

type Filesystem struct {
	// contains filtered or unexported fields
}
func NewFilesystem

NewFilesystem creates a filesystem storage rooted at root.

func NewFilesystem(root string, options ...FilesystemOption) *Filesystem
func (s *Filesystem) Delete

Delete removes key.

func (s *Filesystem) Delete(ctx context.Context, key string, options ...any) ([]any, error)
func (s *Filesystem) List

List lists object metadata below prefix.

func (s *Filesystem) List(ctx context.Context, prefix string, options ...any) (Iterator, []any, error)
func (s *Filesystem) Open

Open opens key for reading.

func (s *Filesystem) Open(ctx context.Context, key string, options ...any) (File, []any, error)
func (s *Filesystem) Put

Put writes key atomically where the host filesystem supports rename.

func (s *Filesystem) Put(ctx context.Context, key string, body io.Reader, options ...any) (Info, []any, error)
func (s *Filesystem) URL

URL returns a public URL only when Filesystem was configured with a base URL.

func (s *Filesystem) URL(ctx context.Context, key string, options ...any) (URL, []any, error)

type Info

Info describes a stored object.

type Info struct {
	Key		string
	ContentType	string
	Size		int64
	Checksum	string
	ModifiedAt	time.Time
	Metadata	map[string]any
}

type Iterator

Iterator walks object metadata.

type Iterator interface {
	Next() (Info, error)
	Close() error
}

type Lister

Lister is implemented by storages that can list object keys.

type Lister interface {
	List(context.Context, string, ...any) (Iterator, []any, error)
}

type Private

Private requests private access when the backend supports access policy.

type Private struct{}

type Public

Public requests public access when the backend supports access policy.

type Public struct{}

type Storage

Storage is the minimum read capability for a named object store.

type Storage interface {
	Open(context.Context, string, ...any) (File, []any, error)
}

type URL

URL describes a resolved object URL.

type URL struct {
	String		string
	Public		bool
	ExpiresAt	time.Time
}

type URLer

URLer is implemented by storages that can expose object URLs.

type URLer interface {
	URL(context.Context, string, ...any) (URL, []any, error)
}

type Watcher

Watcher is implemented by storages that can watch for object changes.

type Watcher interface {
	Watch(context.Context, string, ...any) (Events, []any, error)
}

type Writer

Writer is implemented by storages that can write objects.

type Writer interface {
	Put(context.Context, string, io.Reader, ...any) (Info, []any, error)
}

Directories

Path Synopsis
lazystorage/s3 Package s3 provides an S3-compatible lazystorage backend.