-
Notifications
You must be signed in to change notification settings - Fork 0
/
save.go
75 lines (61 loc) · 1.7 KB
/
save.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
62
63
64
65
66
67
68
69
70
71
72
73
74
75
package bettergoapi
import (
"bytes"
"encoding/json"
"io"
"os"
"github.com/aws/aws-sdk-go/aws"
"github.com/aws/aws-sdk-go/service/s3"
"github.com/aws/aws-sdk-go/service/s3/s3manager"
)
type MyUploader interface {
Upload(*s3manager.UploadInput) (*s3manager.UploadOutput, error)
}
type MyDownloader interface {
Download(io.WriterAt, *s3.GetObjectInput, ...func(*s3manager.Downloader)) (int64, error)
}
// call as SaveToS3(monitor, "monitors.json", s3manager.NewUploader(getAWSsession()))
func SaveToS3(monitor []Monitor, path string, uploader MyUploader) error {
data, _ := json.MarshalIndent(monitor, " ", " ")
_, err := uploader.Upload(&s3manager.UploadInput{
Bucket: aws.String("bettergoapi-monitor"),
Key: aws.String(path),
Body: bytes.NewReader(data),
})
return err
}
// call as LoadFromS3("monitors.json", s3manager.NewDownloader(getAWSsession()))
func LoadFromS3(path string, downloader MyDownloader) ([]Monitor, error) {
var monitor []Monitor
buf := aws.NewWriteAtBuffer([]byte{})
_, err := downloader.Download(buf, &s3.GetObjectInput{
Bucket: aws.String("bettergoapi-monitor"),
Key: aws.String(path),
})
if err != nil {
return monitor, err
}
json.Unmarshal(buf.Bytes(), &monitor)
return monitor, nil
}
func SaveToFile(monitor []Monitor, path string) error {
var file io.WriteCloser
var err error
file, err = os.Create(path)
if err != nil {
return err
}
defer file.Close()
data, _ := json.MarshalIndent(monitor, " ", " ")
file.Write(data)
return nil
}
func LoadFromFile(path string) ([]Monitor, error) {
var monitor []Monitor
filebytes, err := os.ReadFile(path)
if err != nil {
return monitor, err
}
json.Unmarshal(filebytes, &monitor)
return monitor, nil
}