code: func (q *Quest_Desc) Normalize() error {
  	if q.Meta == nil {
  		q.Meta = &Quest_Desc_Meta{
  			Retry:    &Quest_Desc_Meta_Retry{},
  			Timeouts: &Quest_Desc_Meta_Timeouts{},
  		}
  	} else {
  		if q.Meta.Retry == nil {
  			q.Meta.Retry = &Quest_Desc_Meta_Retry{}
  		}
  		if q.Meta.Timeouts == nil {
  			q.Meta.Timeouts = &Quest_Desc_Meta_Timeouts{}
  		}
  	}
  	if err := q.Meta.Timeouts.Normalize(); err != nil {
  		return err
  	}
  
  	length := len(q.Parameters) + len(q.DistributorParameters)
  	if length > QuestDescPayloadMaxLength {
  		return fmt.Errorf("quest payload is too large: %d > %d",
  			length, QuestDescPayloadMaxLength)
  	}
  	normed, err := templateproto.NormalizeJSON(q.Parameters, true)
  	if err != nil {
  		return fmt.Errorf("failed to normalize parameters: %s", err)
  	}
  	q.Parameters = normed
  
  	normed, err = templateproto.NormalizeJSON(q.DistributorParameters, true)
  	if err != nil {
  		return fmt.Errorf("failed to normalize distributor parameters: %s", err)
  	}
  	q.DistributorParameters = normed
  	return nil
  }
docs: // Normalize returns an error iff the Quest_Desc is invalid.