diff options
Diffstat (limited to 'weed/filer2/entry_codec.go')
| -rw-r--r-- | weed/filer2/entry_codec.go | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/weed/filer2/entry_codec.go b/weed/filer2/entry_codec.go new file mode 100644 index 000000000..7d2b2da37 --- /dev/null +++ b/weed/filer2/entry_codec.go @@ -0,0 +1,43 @@ +package filer2 + +import ( + "os" + "time" + + "github.com/chrislusf/seaweedfs/weed/pb/filer_pb" + "github.com/gogo/protobuf/proto" + "fmt" +) + +func (entry Entry) EncodeAttributesAndChunks() ([]byte, error) { + message := &filer_pb.Entry{ + Attributes: &filer_pb.FuseAttributes{ + Crtime: entry.Attr.Crtime.Unix(), + Mtime: entry.Attr.Mtime.Unix(), + FileMode: uint32(entry.Attr.Mode), + Uid: entry.Uid, + Gid: entry.Gid, + }, + Chunks: entry.Chunks, + } + return proto.Marshal(message) +} + +func (entry Entry) DecodeAttributesAndChunks(blob []byte) (error) { + + message := &filer_pb.Entry{} + + if err := proto.UnmarshalMerge(blob, message); err != nil { + return fmt.Errorf("decoding value blob for %s: %v", entry.FullPath, err) + } + + entry.Attr.Crtime = time.Unix(message.Attributes.Crtime, 0) + entry.Attr.Mtime = time.Unix(message.Attributes.Mtime, 0) + entry.Attr.Mode = os.FileMode(message.Attributes.FileMode) + entry.Attr.Uid = message.Attributes.Uid + entry.Attr.Gid = message.Attributes.Gid + + entry.Chunks = message.Chunks + + return nil +} |
