El patrón 'Parse, don't validate' (parsear, no validar) es un enfoque de diseño de software que utiliza el sistema de tipos para garantizar invariantes, eliminando la necesidad de validaciones explícitas en el código de cliente. Este artículo analiza la aplicación de este concepto en el lenguaje Rust, contrastándolo con la práctica habitual de devolver tipos genéricos como Vec<T> que requieren manejo de casos nulos mediante Option. El texto argumenta que, aunque Vec es útil para datos que pueden estar vacíos, su uso en contextos donde se garantiza la no vacuidad introduce riesgos de claridad y rendimiento, ya que el sistema de tipos no verifica formalmente la ausencia de elementos vacíos.
La solución propuesta implica la creación o uso de tipos específicos que codifican la invariante, como NonEmpty<T>, que no permite la construcción de vectores vacíos. Al devolver un NonEmpty en lugar de un Vec, el código de cliente puede acceder directamente a los elementos sin comprobar la vacuidad, mejorando la seguridad y la legibilidad. El artículo detalla ejemplos concretos en la biblioteca estándar de Rust, como NonZero<usize> para enteros no nulos, y en proyectos de terceros como rust-analyzer y posixutils-rs. En estos casos, se demuestra cómo la validación se realiza durante el proceso de parseo o construcción, transformando el dato en un tipo más específico (como AbsPathBuf o NonEmpty) que lleva la información de validación implícitamente. Este enfoque permite una refinería gradual de tipos, donde el código posterior no necesita repetir las comprobaciones realizadas en etapas anteriores, facilitando la mantenibilidad y reduciendo errores lógicos.
