Modelando Universos Abertos e Fechados de Escolhas em Rust

Este artigo explora como modelar escolhas em Rust, distinguindo entre universos fechados (onde todas as opções são conhecidas e fixas, como o tipo `Option` do Rust) e universos abertos (onde novas opções podem ser adicionadas). Para universos fechados, enums são adequados. Universos semi-abertos (onde os autores da biblioteca podem adicionar opções, mas os usuários não podem), são melhor tratados com enums não exaustivos, forçando os usuários a considerar padrões curinga e garantindo a compatibilidade com versões anteriores da API. Universos totalmente abertos são melhor abordados com strings ou newtypes, ou traits para maior flexibilidade. O artigo também discute as armadilhas de usar uma variante 'Desconhecido' e explora o uso de traits selados. O autor conclui recomendando uma abordagem caso a caso, ponderando as compensações entre a abordagem mais simples baseada em strings e a abordagem mais poderosa, porém mais complexa, baseada em traits.