code: func (reader *GenericDatumReader) Read(v interface{}, dec Decoder) error {
  	rv := reflect.ValueOf(v)
  	if rv.Kind() != reflect.Ptr || rv.IsNil() {
  		return errors.New("Not applicable for non-pointer types or nil")
  	}
  	rv = rv.Elem()
  	if reader.schema == nil {
  		return SchemaNotSet
  	}
  
  	//read the value
  	value, err := reader.readValue(reader.schema, dec)
  	if err != nil {
  		return err
  	}
  
  	newValue := reflect.ValueOf(value)
  	// dereference the value if needed
  	if newValue.Kind() == reflect.Ptr {
  		newValue = newValue.Elem()
  	}
  
  	//set the new value
  	rv.Set(newValue)
  
  	return nil
  }
docs: // Read reads a single entry using this GenericDatumReader.
  // Accepts a value to fill with data and a Decoder to read from. Given value MUST be of pointer type.
  // May return an error indicating a read failure.