/
bucket.go
61 lines (50 loc) · 1.18 KB
/
bucket.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
package bucket
import (
"fmt"
"io"
"log"
"os"
"reflect"
)
const (
AwsProvider BucketType = iota
MockProvider
)
type BucketType int
type BucketInterface interface {
Upload(reader io.Reader, destiny string) error
Download(source string, destiny string) (*os.File, error)
Delete(string) error
}
type Bucket struct {
provider BucketInterface
}
func New(bt BucketType, cfg any) (b *Bucket, err error) {
b = new(Bucket)
providerConfig := reflect.TypeOf(cfg)
switch bt {
case AwsProvider:
if providerConfig.Name() != "AwsProviderConfig" {
return nil, fmt.Errorf("config need's to be of type AwsProviderConfig")
}
b.provider = newAwsProvider(cfg.(AwsProviderConfig))
case MockProvider:
cf := cfg.(MockBucketConfig)
b.provider = &MockBucket{
content: make(map[string][]byte),
mockOptions: cf,
}
default:
log.Fatal("type not implemented")
}
return
}
func (b *Bucket) Upload(reader io.Reader, destiny string) error {
return b.provider.Upload(reader, destiny)
}
func (b *Bucket) Download(source, destiny string) (*os.File, error) {
return b.provider.Download(source, destiny)
}
func (b *Bucket) Delete(destiny string) error {
return b.provider.Delete(destiny)
}