aboutsummaryrefslogtreecommitdiff
path: root/objects/object.go
diff options
context:
space:
mode:
Diffstat (limited to 'objects/object.go')
-rw-r--r--objects/object.go20
1 files changed, 20 insertions, 0 deletions
diff --git a/objects/object.go b/objects/object.go
index ced78bd..4e096ad 100644
--- a/objects/object.go
+++ b/objects/object.go
@@ -118,3 +118,23 @@ type Object interface {
Payload() []byte
FromPayload([]byte) error
}
+
+func (ro RawObject) Object() (o Object, err error) {
+ switch ro.Type {
+ case OTBlob:
+ o = new(Blob)
+ case OTFile:
+ o = new(File)
+ case OTTree:
+ o = make(Tree)
+ case OTSnapshot:
+ o = new(Snapshot)
+ default:
+ return nil, fmt.Errorf("Unknown object type %s", ro.Type)
+ }
+
+ if err = o.FromPayload(ro.Payload); err != nil {
+ o = nil
+ }
+ return
+}