В Rust путь состоит из разных компонентов: имени папки, корня,
. или ... Если функция принимает произвольную строку, ей могут передать .. или абсолютный путь и неожиданно изменить результат объединения.Автор статьи предлагает выделить обычное имя в отдельный тип
NormalComponent. Тогда сигнатура говорит сама за себя:
fn join_normal(&self, name: &NormalComponent) -> AbsPath
Функция принимает только компонент имени, а не любой фрагмент пути. Ошибочный вызов отсекается типами, без россыпи проверок внутри функции. Приём простой: если разные варианты
enum дают разные гарантии, иногда полезно представить нужный вариант отдельным типом.https://www.schneems.com/2026/09/24/a-type-stronger-than-the-sum-of-its-components/
