Я пробовал пару раз сделать подобный рефакторинг, но ничего кроме утроение boilerplate-a это не приводило. Вместо этого я сделал матчеры чтобы не работать с туплами напрямую, но тут это абстракция протекла. Нужно подумать, за 3 минуты это не зарефакториш красиво.