Skip nil values when marshaling.

This commit is contained in:
Jack Palevich 2010-01-20 23:20:25 +08:00
parent b1f8c9d7a7
commit f81cd34e34

View file

@ -355,6 +355,9 @@ func writeSVList(w io.Writer, svList StringValueArray) (err os.Error) {
sort.Sort(svList)
for _, sv := range (svList) {
if isValueNil(sv.value) {
continue // Skip null values
}
s := sv.key
_, err = fmt.Fprintf(w, "%d:%s", len(s), s)
if err != nil {
@ -468,6 +471,19 @@ func writeValue(w io.Writer, val reflect.Value) (err os.Error) {
return
}
func isValueNil(val reflect.Value) bool {
if val == nil {
return true
}
switch v := val.(type) {
case *reflect.InterfaceValue:
return isValueNil(v.Elem())
default:
return false
}
return false
}
func Marshal(w io.Writer, val interface{}) os.Error {
return writeValue(w, reflect.NewValue(val))
}