code: func (errs Errors) MarshalJSON() ([]byte, error) {
  	var tmpErrs struct {
  		Errors []Error `json:"errors,omitempty"`
  	}
  
  	for _, daErr := range errs {
  		var err Error
  
  		switch daErr := daErr.(type) {
  		case ErrorCode:
  			err = daErr.WithDetail(nil)
  		case Error:
  			err = daErr
  		default:
  			err = ErrorCodeUnknown.WithDetail(daErr)
  
  		}
  
  		// If the Error struct was setup and they forgot to set the
  		// Message field (meaning its "") then grab it from the ErrCode
  		msg := err.Message
  		if msg == "" {
  			msg = err.Code.Message()
  		}
  
  		tmpErrs.Errors = append(tmpErrs.Errors, Error{
  			Code:    err.Code,
  			Message: msg,
  			Detail:  err.Detail,
  		})
  	}
  
  	return json.Marshal(tmpErrs)
  }
docs: // MarshalJSON converts slice of error, ErrorCode or Error into a
  // slice of Error - then serializes