(m protocol.Message)
| 15 | ) |
| 16 | |
| 17 | func closeMessage(m protocol.Message) { |
| 18 | forEachField(reflect.ValueOf(m), func(v reflect.Value) { |
| 19 | if v.Type().Implements(recordReader) { |
| 20 | rr := v.Interface().(protocol.RecordReader) |
| 21 | for { |
| 22 | r, err := rr.ReadRecord() |
| 23 | if err != nil { |
| 24 | break |
| 25 | } |
| 26 | if r.Key != nil { |
| 27 | r.Key.Close() |
| 28 | } |
| 29 | if r.Value != nil { |
| 30 | r.Value.Close() |
| 31 | } |
| 32 | } |
| 33 | } |
| 34 | }) |
| 35 | } |
| 36 | |
| 37 | func load(v interface{}) (reset func()) { |
| 38 | return loadValue(reflect.ValueOf(v)) |