Комментарии 12
let error : String = "Error during data processing: ".to_string() + &err.to_string(); println!("{error}");
format!
, не (аналогично тут)? Ну и раз вы все равно его в принты выводите не очень понятно, что мешало на месте это отформатировать. И для ошибок есть eprintln!
который пишет в stderror.
Ещё заметил непонятный unreachable!
, который стоит явно не к месту.
Спасибо за рекомендации по формату и stderror
- поправил в проекте.
unreachable!
в этот пример переехал из основного примера с той идеей, что код после serve
не должен быть доступен, поскольку там под капотом Loops that dynamically terminate
.
unreachable там точно не к месту. Его используют в качестве ассерта в условиях для подсказки какие ветки кода будут исполняться, а какие точно являются некорректными. Паника вместо того чтобы вернуть ошибку звучит как плохой план. Типичиный юзкейс: если вы скармливаете в функцию массив чисел, который гарантированно должен содержать только 0 или 1 в контейнере.
fn foo(vec: Vec<i32>) {
for v in vec.into_iter() {
match v {
0 => process_zero(),
1 => process_one(),
_ => unreachable!(), // в эту ветку никогда не должны попадать
// иначе считаем введёные даныне некорректными
}
}
}
Внутри serve по идее должен быть loop и использовать недостижимое макро в контексте выхода из скоупа как-то странно.
Запускать сервис при помощи самого демона D-Bus сейчас уже не рекомендуется, так как демон D-Bus умеет гораздо хуже управлять сервисами, чем systemd. К тому же, гораздо лучше, когда родителем процесса сервиса является systemd.
Современный systemd сам умеет активировать сервисы при поступлении запросов на шину D-Bus.
Интересно, спасибо. Надо будет принять это во внимание.
Вижу, что сборка происходит на хосте. Планируется ли обновлять rust на движке сборки, чтобы достаточно было в .spec
файле прописать `cargo build --release` ? На данный момент он там хоть и есть, но имеет какую-то совсем протухшую версию.
Как написать D-Bus сервис, работающий на системной шине, на Rust