A1(Option<u32>),
                  
                  
                      A2(Option<String>),
                  
                  
                     ...
                  
                  
                     An(Option<T>)
                  
                  
                  }
                  
                  
                  Список большой, типов всего 8(все описаны, генерика нет), возможно будет больше.
                  
                  
                  Как реализовать PartialEq так, чтобы A::A1(Some(u32)) равнялся A::A1(None)? Тоесть прям partial eq(derive не помог)
                  
                  
                
https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=a1d3f8c074d713604f815e0a92b9a2e5
Я бы не стал так нарушать эквивалентность объектов типа А, а просто создал бы новый тип B для представителей А, на которых уже определил бы нужную эквивалентность, т.е. Eq. Иначе не совсем логично получается. Что-то вроде проекции A -> B для нужной эквивалентности, где уже можно было бы задействовать derive.
Обсуждают сегодня