code: func (c *Client) UpdateMacro(ctx context.Context, id platform.ID, update *platform.MacroUpdate) (*platform.Macro, error) {
  	op := getOp(platform.OpUpdateMacro)
  	var macro *platform.Macro
  	err := c.db.Update(func(tx *bolt.Tx) error {
  		m, pe := c.findMacroByID(ctx, tx, id)
  		if pe != nil {
  			return &platform.Error{
  				Op:  op,
  				Err: pe,
  			}
  		}
  
  		if err := update.Apply(m); err != nil {
  			return &platform.Error{
  				Op:  op,
  				Err: err,
  			}
  		}
  
  		macro = m
  		if pe = c.putMacro(ctx, tx, macro); pe != nil {
  			return &platform.Error{
  				Op:  op,
  				Err: pe,
  			}
  		}
  		return nil
  	})
  
  	return macro, err
  }
docs: // UpdateMacro updates a single macro in the store with a changeset