···173173174174// WriteLooseObject writes an object to the repository as a loose object.
175175func (repo *Repository) WriteLooseObject(obj Object) (Hash, error) {
176176- var raw []byte
177177- var err error
178178-179179- switch o := obj.(type) {
180180- case *Blob:
181181- raw, err = o.Serialize()
182182- case *Tree:
183183- raw, err = o.Serialize()
184184- case *Commit:
185185- raw, err = o.Serialize()
186186- case *Tag:
187187- raw, err = o.Serialize()
188188- default:
189189- return Hash{}, fmt.Errorf("furgit: unsupported object type for writing: %T", obj)
176176+ if obj == nil {
177177+ return Hash{}, ErrInvalidObject
190178 }
191191- // TODO: Consider adding serialize to the interface?
192192-179179+ raw, err := obj.Serialize()
193180 if err != nil {
194181 return Hash{}, err
195182 }
+3
obj.go
···4040type Object interface {
4141 // ObjectType returns the object's type.
4242 ObjectType() ObjectType
4343+ // Serialize renders the object into its raw byte representation,
4444+ // including the header (i.e., "type size\0").
4545+ Serialize() ([]byte, error)
4346}
44474548// StoredObject describes a Git object with a known hash, such as