Size: a a a

Rust — русскоговорящее сообществo

2020 March 22

🦉⁣

🦉 ⁣ in Rust — русскоговорящее сообществo
ну и тому подобное
источник

M

Marat in Rust — русскоговорящее сообществo
Dmitry
А если проверяю на отсутствие, то я вместо Ok(_) использую Err(VarError::NotPresent)?
да !matches!(var("FOO"), Err(VarError::NotPresent))
источник

D

Dmitry in Rust — русскоговорящее сообществo
Marat
да !matches!(var("FOO"), Err(VarError::NotPresent))
Спасибо
источник

R

Re-L in Rust — русскоговорящее сообществo
Mike Lubinets
Но зачем, когда есть thiserror, который без отсебятины генерирует реализации Трейтов из std
потому что сегодня он есть, а завтра его забросили. а std всегда есть.
источник

В

Вафель in Rust — русскоговорящее сообществo
Dmitry
    if let Ok(_) = var("WAYLAND_DISPLAY") &&  {
       if let Ok(_) = var("SWAYSOCK") {
           return "sway".to_string();
       }

Кажется работает, но не пойму как запихать эти две проверки в один if let
Иначе ругается на то, что else нету
if let (Ok(_), Ok(_)) = (var(...), var(...)) {}
источник

R

Re-L in Rust — русскоговорящее сообществo
Вафель
if let (Ok(_), Ok(_)) = (var(...), var(...)) {}
есть же is_ok()
источник

R

Re-L in Rust — русскоговорящее сообществo
я выше кидал
источник

В

Вафель in Rust — русскоговорящее сообществo
Я предложил альтернативный вариант. if let более расширяймый
источник

M

Marat in Rust — русскоговорящее сообществo
А если VarError::NotUnicode(_) - это тоже вариант ок, ему же просто наличие надо проверять, а не валидность юникода
источник

МЛ

Михаил Лёсин in Rust — русскоговорящее сообществo
Re-L
#[derive(Debug)]
struct MyError;
impl std::error::Error for MyError {...}
impl std::fmt::Display for MyError {...}
это классно, но это только одна ошибка, а как оформить их вектор как отдельный тип ошибки?
источник

R

Re-L in Rust — русскоговорящее сообществo
Михаил Лёсин
это классно, но это только одна ошибка, а как оформить их вектор как отдельный тип ошибки?
через enum
источник

ML

Mike Lubinets in Rust — русскоговорящее сообществo
Re-L
потому что сегодня он есть, а завтра его забросили. а std всегда есть.
Ну хз. Имхо, бойлерплейт описания своих ошибок полностью руками не стоит этого мнимого выигрыша в независимости кодовой базы.
Боишься что исчезнет — завендори
источник

R

Re-L in Rust — русскоговорящее сообществo
а, вектор
источник

D

Denis in Rust — русскоговорящее сообществo
Михаил Лёсин
а можешь набросать пример как с помощью anyhow можно вернуть вектор из ошибок в Err()?
https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=bc7b0a6f6b14170991a53ac1cc0f315c
на плейграунде нет крейта anyhow, так что надо локально запускать
источник

R

Re-L in Rust — русскоговорящее сообществo
ну внутрь вектор пихаешь
источник

D

Denis in Rust — русскоговорящее сообществo
Михаил Лёсин
а можешь набросать пример как с помощью anyhow можно вернуть вектор из ошибок в Err()?
но вообще я бы задумался: а оно точно нужно? может проще некритичные ошибки просто логгировать, а не складывать в векторы?
источник

R

Re-L in Rust — русскоговорящее сообществo
Ну я бы сделал всё-таки кастомную ошибку с items: Vec<MyErrorKind> внутри.
Это может быть полезно, когда пользовательский ввод валидируешь, и надо сразу все ошибки показать, чтобы по одной не выдавать, и не заставлять юзера по сто раз сабмитить форму например.
источник

D

Dmitry in Rust — русскоговорящее сообществo
Marat
да !matches!(var("FOO"), Err(VarError::NotPresent))
Оно в nightly баля
источник

D

Dmitry in Rust — русскоговорящее сообществo
Мне теперь придется CI/CD еще переписывать и пкгбилды
источник

R

Re-L in Rust — русскоговорящее сообществo
Dmitry
Оно в nightly баля
через tuple выше показали ещё
источник