Size: a a a

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

2020 March 22

D

Denis in Rust — русскоговорящее сообществo
Михаил Лёсин
Добрый день!
Что я делаю не так? Хочу чтобы ошибка могла хранить несколько, чтобы их накапливать. Делаю так:
#[derive(Debug)]
pub struct CError(Vec<Box<dyn std::error::Error>>);

impl<T: std::error::Error + 'static> From<T> for CError {
   fn from(error: T) -> Self {
       CError(vec![Box::new(error)])
   }
}

и потом получаю вот это:
error[E0277]: the trait bound &str: std::convert::From<&str> is not satisfied
 --> src/lib/file.rs:25:41
  |
25 |             .ok_or_else(|| CError::from("Name attribute is mandatory for file"))?;
  |                                         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  |                                         |
  |                                         expected an implementor of trait std::convert::From<&str>
  |                                         help: consider borrowing here: &"Name attribute is mandatory for file"
  |
  = note: required because of the requirements on the impl of std::convert::From<&str> for lib::error::CError
  = note: required by std::convert::From::from

error[E0277]: the trait bound std::string::String: std::convert::From<std::string::String> is not satisfied
str же не имлементит Error
источник

D

Denis in Rust — русскоговорящее сообществo
источник

D

Denis in Rust — русскоговорящее сообществo
а тебе он не даст определить отдельно трейт From для &str, потом что ничто не мешает в будущем добавить имлементацию трейта Error для &str, что не является ломающим изменением, но твой код при этом сломается => противоречие => такие штуки в расте запрещены
источник

ED

Eto Demerzel in Rust — русскоговорящее сообществo
источник

D

Denis in Rust — русскоговорящее сообществo
Михаил Лёсин
Добрый день!
Что я делаю не так? Хочу чтобы ошибка могла хранить несколько, чтобы их накапливать. Делаю так:
#[derive(Debug)]
pub struct CError(Vec<Box<dyn std::error::Error>>);

impl<T: std::error::Error + 'static> From<T> for CError {
   fn from(error: T) -> Self {
       CError(vec![Box::new(error)])
   }
}

и потом получаю вот это:
error[E0277]: the trait bound &str: std::convert::From<&str> is not satisfied
 --> src/lib/file.rs:25:41
  |
25 |             .ok_or_else(|| CError::from("Name attribute is mandatory for file"))?;
  |                                         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  |                                         |
  |                                         expected an implementor of trait std::convert::From<&str>
  |                                         help: consider borrowing here: &"Name attribute is mandatory for file"
  |
  = note: required because of the requirements on the impl of std::convert::From<&str> for lib::error::CError
  = note: required by std::convert::From::from

error[E0277]: the trait bound std::string::String: std::convert::From<std::string::String> is not satisfied
источник

🦉⁣

🦉 ⁣ in Rust — русскоговорящее сообществo
🦉 ⁣
сделал достаточную версию генератора кода для actix_swagger.
Генерирует такое: https://github.com/sergeysova/actix-swagger/blob/master/cargo-swagg/out.rs

Впринципе, этого достаточно, чтобы писать приложения, у меня примерно такое юзается. Но тут нет исполнения контракта обработчиков запросов. Нет обязания правильно обрабатывать request body в обработчике. Я не смог найти способ это сделать через actix_web::dev::Factory.

Вот issue обсуждения: https://github.com/actix/actix-web/pull/1339

По actix-swagger:
Сейчас буду писать конвертацию yaml структур, в формат генератора кода. Скорее всего там будет пачка HashMap/BTreeMap, чтобы корректно резолвить ссылки. Первая реализация будет очень тупая, и сможет работать только со ссылками в requestBody, responses, params и прочим. Также не будет поддержки импортов из файлов.

В чем нужна помощь:
- Поревьювить код. Там почти всё написано так, чтобы получить первую рабочую версию.
- Было бы круто накидать тесты на генератор кода(называется printer). Думаю банальных inline snapshots было бы достаточно. Дать на вход разные варианты конфигурации, и получить вменяемый код.
- Преобразовать свои личные openapi3 файлы спеки апи в структуры cargo-swagg и поглядеть достаточно ли того, что там есть или нужно что-то ещё. Если нужно ещё что-то, создать issue/pr с реализацией.
источник

🦉⁣

🦉 ⁣ in Rust — русскоговорящее сообществo
Я сломался.

Пытаюсь форматить код в тестах через rustfmt::run
источник

🦉⁣

🦉 ⁣ in Rust — русскоговорящее сообществo
При этом если скопировать output в play, форматится отлично

https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=47c7e6702ab3f4ec95a2fba38ddf1ea5
источник

🦉⁣

🦉 ⁣ in Rust — русскоговорящее сообществo
а, понятно. это старый код
источник

🦉⁣

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

🦉⁣

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

DZ

Dmitry Zherebko in Rust — русскоговорящее сообществo
о графвиз
источник

🦉⁣

🦉 ⁣ in Rust — русскоговорящее сообществo
и на найтли развалилось
источник

DZ

Dmitry Zherebko in Rust — русскоговорящее сообществo
🙈
источник

e🦀

eupn 🦀 in Rust — русскоговорящее сообществo
Поэтому нельзя писать проекты на найтли
источник

🦉⁣

🦉 ⁣ in Rust — русскоговорящее сообществo
я просто хотел форматировать резльутат работы quote, чтобы сделать snapshot
источник

R

Roman Q in Rust — русскоговорящее сообществo
в закрепе была ссылка на либу для tg-бота, напомните название, пожалуйста
источник

🦉⁣

🦉 ⁣ in Rust — русскоговорящее сообществo
Roman Q
в закрепе была ссылка на либу для tg-бота, напомните название, пожалуйста
teloxide?
источник

R

Roman Q in Rust — русскоговорящее сообществo
спс
источник

В

Вафель in Rust — русскоговорящее сообществo
🦉 ⁣
и на найтли развалилось
Так недавно добавили resume-аргументы в генераторы, чтобы async избавить от TLS
источник