code: func marshalError(f string, c ErrorCode, desc string, v interface{}) *MarshalError {
  	e := &MarshalError{ErrorCode: c, Func: f, Description: desc}
  	switch t := v.(type) {
  	case []byte:
  		slice := make([]byte, len(t))
  		copy(slice, t)
  		e.Value = slice
  	default:
  		e.Value = v
  	}
  
  	return e
  }
docs: // marshalError creates an error given a set of arguments and will copy byte
  // slices into the Value field since they might otherwise be changed from from
  // the original value.