From 397eb22166afa8cd273dbd0decdcb2ac7f2d34df Mon Sep 17 00:00:00 2001 From: Runxi Yu Date: Thu, 29 Jan 2026 22:05:30 +0100 Subject: obj, loose: Add Object.Serialize() interface --- loose.go | 19 +++---------------- obj.go | 3 +++ 2 files changed, 6 insertions(+), 16 deletions(-) diff --git a/loose.go b/loose.go index 8f8d12a8..89779a93 100644 --- a/loose.go +++ b/loose.go @@ -173,23 +173,10 @@ func objTypeFromName(name string) (ObjectType, error) { // WriteLooseObject writes an object to the repository as a loose object. func (repo *Repository) WriteLooseObject(obj Object) (Hash, error) { - var raw []byte - var err error - - switch o := obj.(type) { - case *Blob: - raw, err = o.Serialize() - case *Tree: - raw, err = o.Serialize() - case *Commit: - raw, err = o.Serialize() - case *Tag: - raw, err = o.Serialize() - default: - return Hash{}, fmt.Errorf("furgit: unsupported object type for writing: %T", obj) + if obj == nil { + return Hash{}, ErrInvalidObject } - // TODO: Consider adding serialize to the interface? - + raw, err := obj.Serialize() if err != nil { return Hash{}, err } diff --git a/obj.go b/obj.go index 41400985..f3ed8bfa 100644 --- a/obj.go +++ b/obj.go @@ -40,6 +40,9 @@ const ( type Object interface { // ObjectType returns the object's type. ObjectType() ObjectType + // Serialize renders the object into its raw byte representation, + // including the header (i.e., "type size\0"). + Serialize() ([]byte, error) } // StoredObject describes a Git object with a known hash, such as -- cgit v1.3.1-10-gc9f91