switch/case pattern