code: func (v *Error) ErrorBody() string {
  	var s string
  	switch v.Type {
  	case ErrorTypeRequired, ErrorTypeForbidden, ErrorTypeTooLong, ErrorTypeInternal:
  		s = v.Type.String()
  	default:
  		value := v.BadValue
  		valueType := reflect.TypeOf(value)
  		if value == nil || valueType == nil {
  			value = "null"
  		} else if valueType.Kind() == reflect.Ptr {
  			if reflectValue := reflect.ValueOf(value); reflectValue.IsNil() {
  				value = "null"
  			} else {
  				value = reflectValue.Elem().Interface()
  			}
  		}
  		switch t := value.(type) {
  		case int64, int32, float64, float32, bool:
  			// use simple printer for simple types
  			s = fmt.Sprintf("%s: %v", v.Type, value)
  		case string:
  			s = fmt.Sprintf("%s: %q", v.Type, t)
  		case fmt.Stringer:
  			// anything that defines String() is better than raw struct
  			s = fmt.Sprintf("%s: %s", v.Type, t.String())
  		default:
  			// fallback to raw struct
  			// TODO: internal types have panic guards against json.Marshalling to prevent
  			// accidental use of internal types in external serialized form.  For now, use
  			// %#v, although it would be better to show a more expressive output in the future
  			s = fmt.Sprintf("%s: %#v", v.Type, value)
  		}
  	}
  	if len(v.Detail) != 0 {
  		s += fmt.Sprintf(": %s", v.Detail)
  	}
  	return s
  }
docs: // ErrorBody returns the error message without the field name.  This is useful
  // for building nice-looking higher-level error reporting.