ok, I'm fine with this signature. We just need to write a big `switch()` statement inside.