Size: a a a

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

2021 June 13

Э

Эрик in Rust — русскоговорящее сообщество
Спроси у TryFrom, зачем им резалт.
источник

ΑZ

Αλεχ Zhukovsky in Rust — русскоговорящее сообщество
в TryFrom уже написана сигнатура и тип ошибки там тоже указан - турбофиш там не нужен
источник

C

ChzChz in Rust — русскоговорящее сообщество
есть вот такие алиасы

```
type GenericError = Box<dyn std::error::Error + Sync + Send>;
type Result<T> = std::result::Result<T, GenericError>;

```
далее у меня есть хэндлер функциия handle_incoming которая возвращает Result<Response<Body>>

```
let make_service = make_service_fn(move |_con| {
   let client = Arc::clone(&main_client);

   async move {
       Ok::<_, GenericError>(service_fn(move |req| {
           debug!("\nmaking request{:?}", req);
           handle_incoming(req, Arc::clone(&client))
       }))
   }
});



let server = Server::bind(&addr).serve(make_service);

if let Err(err) = server.await {
   eprintln!("server error: {}", err);
}

```
внутри хэндлера все ошибки пропагейтятся через ?. Если просто анвраплю, то тогда паника в консоли отображаются, но если я пытаюсь использовать ?. то ничего не происходит. Хде я туплю подскажите?
источник

f

faramo_zayw in Rust — русскоговорящее сообщество
Потому что ? ≠ unwrap. Скорее всего ошибка уходит куда-то дальше

https://doc.rust-lang.org/edition-guide/rust-2018/error-handling-and-panics/the-question-mark-operator-for-easier-error-handling.html
источник

C

ChzChz in Rust — русскоговорящее сообщество
так у меня же type GenericError = Box<dyn std::error::Error + Sync + Send>; должен любую ошибку отловить и вот здесь вывести:

```
if let Err(err) = server.await {
   eprintln!("server error: {}", err);
}

```
источник

D

Denis in Rust — русскоговорящее сообщество
ошибка в обработчике соединения не приводит к остановке сервера
источник

D

Denis in Rust — русскоговорящее сообщество
подключай env_logger (или аналог) и выводи логи куда-нибудь
источник

C

ChzChz in Rust — русскоговорящее сообщество
@mexus так он у меня есть, я не понимаю где мне это ловить =)))
источник

D

Denis in Rust — русскоговорящее сообщество
что значит "ловить"?
источник

C

ChzChz in Rust — русскоговорящее сообщество
@mexus обрабатывать, матчить
источник

D

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

C

ChzChz in Rust — русскоговорящее сообщество
всмысле
источник

C

ChzChz in Rust — русскоговорящее сообщество
=)))
источник

D

Denis in Rust — русскоговорящее сообщество
если ты отдал внутрь хайпера ошибку, то он её просто залогирует
источник

D

Denis in Rust — русскоговорящее сообщество
хочешь как-то сам "обрабатывать" — не отдавай её хайперу
источник

C

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

C

ChzChz in Rust — русскоговорящее сообщество
а если я через ? пропагейчу ошибку то не отображает в логе
источник

D

Denis in Rust — русскоговорящее сообщество
ты env_logger используешь или какой-то другой крейт для отображения логов?
источник

D

Denis in Rust — русскоговорящее сообщество
если его, то не забудь при запуске указать RUST_LOG=error, типа RUST_LOG=error cargo run .. или там RUST_LOG=error ./target/release/...
источник

C

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