code: func getRequestFromInv(inv *Invocation) (r task.Request, err error) {
  	r.TriggeredBy = inv.TriggeredBy
  	if r.IncomingTriggers, err = inv.IncomingTriggers(); err != nil {
  		return r, errors.Annotate(err, "failed to deserialize incoming triggers").Err()
  	}
  	if len(inv.PropertiesRaw) != 0 {
  		props := &structpb.Struct{}
  		if err = proto.Unmarshal(inv.PropertiesRaw, props); err != nil {
  			return r, errors.Annotate(err, "failed to deserialize properties").Err()
  		}
  		r.Properties = props
  	}
  	r.Tags = inv.Tags
  	return
  }
docs: // getRequestFromInv constructs task.Request from Invocation fields.
  //
  // It is reverse of putRequestIntoInv. Fails only on deserialization errors,
  // this should be rare.