-
Notifications
You must be signed in to change notification settings - Fork 376
/
export.go
43 lines (33 loc) · 902 Bytes
/
export.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
package bertymessenger
import (
"archive/tar"
"io"
"github.com/gogo/protobuf/proto"
"go.uber.org/zap"
"gorm.io/gorm"
"berty.tech/berty/v2/go/pkg/errcode"
)
const exportLocalDBState = "messenger/local_db_state"
func exportMessengerData(writer io.Writer, db *gorm.DB, logger *zap.Logger) error {
tw := tar.NewWriter(writer)
dbState := keepDatabaseLocalState(db, logger)
dbStateBytes, err := proto.Marshal(dbState)
if err != nil {
return errcode.ErrSerialization.Wrap(err)
}
if err := tw.WriteHeader(&tar.Header{
Typeflag: tar.TypeReg,
Name: exportLocalDBState,
Size: int64(len(dbStateBytes)),
Mode: 0o600,
}); err != nil {
return errcode.ErrStreamWrite.Wrap(err)
}
if _, err := tw.Write(dbStateBytes); err != nil {
return errcode.ErrStreamWrite.Wrap(err)
}
if err := tw.Close(); err != nil {
return errcode.ErrStreamWrite.Wrap(err)
}
return nil
}