Денис
https://play.rust-lang.org/?gist=d9dc4ff4df3a99262cfc43e5d01b0077&version=nightly
Денис
https://doc.rust-lang.org/std/iter/trait.FromIterator.html#implementors
Денис
вот почему это работает
Αλεχ
лол
Αλεχ
блин, казалось бы нет динамической диспетчеризации в расте
Αλεχ
все должно быть понятно
Αλεχ
ан нет
Αλεχ
особенно перегруженные операторы
Αλεχ
Ну трейты не в счет
Денис
SubstBot O_O
ㅤ
Азащз
պլհկ
Meh
Saphire
s/o_o/o.o/
Saphire
s/o/O/g
ㅤ
Нет, написано, что фронтенд Тинькофф
Saphire
Ай тьфу.
ㅤ
Но это маскировка
Денис
чё удалили-то
Денис
чё удалили-то
s/удалили/затёрли
Anonymous
чё удалили-то
чё затёрли-то
Денис
еее
Loo
еее
Когда узнаешь что в чате есть substbot
Денис
^_^
Alexander
Serde тоже думает как указать сериализаторы внутренних структур: https://github.com/serde-rs/serde/issues/723
Mehul
Lifetimes in #rustlang balu.github.io/lifetimes.html
Alex
корпоративный фаервол пишет что там малварь :)
Денис
я надеюсь ты зарепотрил false-positive?)
Денис
хм
Денис
у вас фаервол https фильтрует?
Денис
фиктивный корневой сертикифат?
Денис
ужас
Alex
a security threat was discovered by the Cisco Umbrella security researchers.
Alex
учоные не одобряют
Alexander
Как указать serde remote для типа у которого есть параметр?
Alexander
https://gist.github.com/rust-play/642343eb1da5b916c62700f267b91902
Alexander
Type my = datetime<utc> что-то тоже не получилось.
Маjко
Если ты реализуешь трейт для своей структуры — ты доолжен использовать свою структуру
Маjко
То что ты заюзал как поле DateTime в своей структуре, для которой реализован Serialize
Маjко
Никак не реализует Serialize для DateTime
Alexander
Но смотрите, я может не понимаю, но serde remote именно для этого и придуман.
Alexander
И пока проблема что та remote структура имеет параметр. В примере serde не так.
Alexander
А remote заставляет serde не дёргать дефолтный serialize типа.
Антон
Когда узнаешь что в чате есть substbot
До сих пор не понимаю, почему его нельзя в свой чатег добавить
Судзумия
в компиляторе!
Антон
cargo expand
Антон
Не изкаробки, но есть на crates.io
Антон
Ищи по proc_macro и Debug
Ilya
failure используй, она классная
Судзумия
Хорошо, что не от борроучекера
Денис
А, то есть ты хотел найти имплементацию derive(Debug), чтобы по аналогии сделать свою?)) плохая идея)
Денис
Юзай failure и не знай горя :)
Судзумия
Дисплей ещё можно имплементнуть
Денис
ну суть дисплея-то в том, что это не автоматически что-то генерируется, а ты по-человечески описываешь
Судзумия
Дисплей не деривится
Alexander
Не выйдет. Ну если именно ищешь аналог debug
Судзумия
Если учишься кодить на Расте, то проще анвраппить и паниковать для начала :)
Alexander
Можно свой макрос писать, но с первого дня врядли такое получится.
Alexander
Может есть крейт какой, но я не смотрел.
Денис
можешь сделать на дурака impl fmt::Display for Type { fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { Debug::fmt(self, f) } }
Aleksey
Есть еще display derive крейт чтобы failure не тянуть
Судзумия
Фига ты головастый
Alexander
Ну по человечески это как @denis выше написал наверное . Это если не написание своего derive ты имел ввиду.
Денис
по-человечески это юзать failure :)
Anton
о релиз
Anton
хорошо закрепили
Anton
так бы пропустил
Денис
а теперь смотри, как это бы выглядело с failure
Денис
#[derive(Fail, Debug)] enum Error { #[fail(display = "A number must be positive")] MustBePositive, #[fail(display = "A number must be negativ")] MustBeNegative, #[fail(display = "A number must not be zero")] MustNotBeZero, }
Денис
причём enum лучше назвать по-человечески, как-нибудь типа "NumberError"
Денис
да
Денис
#[fail(display = "A number must be positive")] вот это пойдёт в дисплей
Денис
дык об том и речь, фейлур жутко удобный
Денис
ну, failure несколько в стороне от обычных ошибок типа std::error::Error
Денис
то есть это не одно и то же
Денис
с std::error::Error — нет
Денис
но, как показывает практика, оно и не нужно
Денис
крейт Failure предоставляет свой собственный тип Error
Денис
в который можно автоматически конвертировать и стандартную ошибку (std::...::Error), и любую ошибку, которая имплементит Fail
Денис
то есть ты можешь сделать у себя use failure::Error, и потом в коде возвращать`Result<i32, Error>`