optional arguments – How to manually create options that can be entered as a sequence or list?

I am trying to implement custom options in my code manually, rather than using the built-in Options tools. So I have functions that look like f(x_,y_,opts___) where opts is intended to be a (possibly empty) list or sequence of rules.

I’d like to be able to enter opts as a sequence or list, but I’m having a very hard time getting my code to cover both cases. How can I program my functions so that opts is converted to a list of rules, regardless of whether they are fed into the function as a list or sequence?