I want to create a function that takes in a required argument x, and either a optional argument opt1 OR a keyword argument opt2.

Right now I have

(defn foo x & [opt1 {:keys [opt2]}]
  ...

But the above signature only lets me pass in keyword argument opt2 when both x and opt1 is present like

(foo 'x 'opt1 {:opt2 'opt2})

not like this

(foo 'x {:opt2 'opt2})

Please help me create a function that takes a required argument X and either opt1 or opt2, where opt2 is a keyword argument.

Thank you.

EDIT: I want to do the same for other macros as well. So I still need to use the defmacro.

Edit
Report