ref: 397eb22166afa8cd273dbd0decdcb2ac7f2d34df
parent: 50cd7868cf055bce46e1a4253840089dfc602a11
author: Runxi Yu <me@runxiyu.org>
date: Thu Jan 29 17:05:30 EST 2026
obj, loose: Add Object.Serialize() interface
--- a/loose.go
+++ b/loose.go
@@ -173,23 +173,10 @@
// 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}
--- a/obj.go
+++ b/obj.go
@@ -40,6 +40,9 @@
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
--
⑨