41 lines
770 B
Go
41 lines
770 B
Go
|
package meta
|
||
|
|
||
|
func ReadStructGeneric(r Reader, createStruct StructFactory, field string) (Struct, error) {
|
||
|
if err := r.BeginContainer(field); err != nil {
|
||
|
return nil, err
|
||
|
}
|
||
|
|
||
|
var classId uint32
|
||
|
if err := r.ReadUint32(&classId, ""); err != nil {
|
||
|
return nil, err
|
||
|
}
|
||
|
|
||
|
s, err := createStruct(classId)
|
||
|
if err != nil {
|
||
|
return nil, err
|
||
|
}
|
||
|
|
||
|
if err := s.Read(r); err != nil {
|
||
|
return nil, err
|
||
|
}
|
||
|
|
||
|
if err := r.EndContainer(); err != nil {
|
||
|
return nil, err
|
||
|
}
|
||
|
|
||
|
return s, nil
|
||
|
}
|
||
|
|
||
|
func WriteStructGeneric(w Writer, s Struct, field string) error {
|
||
|
if err := w.BeginCollection(2, field); err != nil {
|
||
|
return err
|
||
|
}
|
||
|
if err := w.WriteUint32(s.ClassId(), ""); err != nil {
|
||
|
return err
|
||
|
}
|
||
|
if err := s.Write(w); err != nil {
|
||
|
return err
|
||
|
}
|
||
|
return w.EndCollection()
|
||
|
}
|