Antonio Mika
·
2026-10-09
1package storage
2
3import (
4 "io"
5 "os"
6 "time"
7
8 "github.com/picosh/pico/pkg/send/utils"
9)
10
11type Bucket struct {
12 Name string
13 Path string
14 Root string
15}
16
17type ObjectInfo struct {
18 Size int64
19 LastModified time.Time
20 ETag string
21 ContentType string
22}
23
24type BucketStorage interface {
25 GetBucket(name string) (Bucket, error)
26 GetBucketQuota(bucket Bucket) (uint64, error)
27 UpsertBucket(name string) (Bucket, error)
28 ListBuckets() ([]string, error)
29 DeleteBucket(bucket Bucket) error
30}
31
32type ObjectStorage interface {
33 GetObject(bucket Bucket, fpath string) (utils.ReadAndReaderAtCloser, *ObjectInfo, error)
34 // StatObject returns an object's info without opening it.
35 StatObject(bucket Bucket, fpath string) (*ObjectInfo, error)
36 PutObject(bucket Bucket, fpath string, contents io.Reader, info *ObjectInfo) (string, int64, error)
37 // PutDir creates a directory, and its parents, that is listed even
38 // while it's empty.
39 PutDir(bucket Bucket, dir string) error
40 // DeleteObject removes a file or an empty directory. Deleting a missing
41 // path succeeds. A directory stays after its last file is deleted.
42 DeleteObject(bucket Bucket, fpath string) error
43 ListObjects(bucket Bucket, dir string, recursive bool) ([]os.FileInfo, error)
44}
45
46type StorageServe interface {
47 BucketStorage
48 ObjectStorage
49}