Всем привет. а тут можно ревью небольшого куска кода попросить?

79 строк с учетом use, пустых строк и комментов. пишу на расте что то +- серьезное совсем недолго, хотелось бы узнать какие моменты можно сделать более "растовым" способом и вообще мнение почитать

10 ответов

22 просмотра

Кидай на rust-playground наверняка что-то подскажут

Nikolay- Автор вопроса

https://play.rust-lang.org/?version=stable&mode=debug&edition=2021&gist=dc2253633bbacad6cd6feff2a88ea019 заранее спасибо)

Nikolay
https://play.rust-lang.org/?version=stable&mode=de...

Лишние коллекты убираются, сейчас покажу

Nikolay- Автор вопроса
Денис
А зачем там асинк?

в будущем будет поднянут reqwest с запросами. конкретно в этой функции скорее всего да, он не будет нужен, тут уже убрать забыл просто. этот кусок примерно 1/5 всей задачи выполняет

Nikolay
в будущем будет поднянут reqwest с запросами. конк...

А такой вопросик: сохранение порядка элементов имеет значение? В плане важно ли видеть multiple_bdu в конце bdu_codes?

Nikolay- Автор вопроса

нет, порядок может быть абсолютно любым. тут просто первым пришло в голову аппенд сделать)

Nikolay
нет, порядок может быть абсолютно любым. тут прост...

async fn parse_report(path: impl AsRef<Path>) { // read report file let src_report = fs::read_to_string(path).unwrap(); // setup parser and selector let html = Html::parse_fragment(&src_report); let selector = Selector::parse(r#"td[class="bdu"]"#).unwrap(); // get all bdu codes from report with BDU:XXXX-XXXXX format let many_bdu_codes = html .select(&selector) .map(|bdu| bdu.inner_html()); // retrieve all codes at once, getting many of them at each step let bdu_codes: Vec<_> = many_bdu_codes.flat_map(|mut multicode| { // the key part to do less than more; by splitting off before <br>s // we're getting the shared logic between two similar algorithms multicode.push_str("<br>"); std::iter::from_fn(move || { let rest = multicode.split_off(multicode.find("<br>")?); let mut code = std::mem::replace(&mut multicode, rest); code.replace_range(..code.find(':')?, ""); Some(code) }) }).collect(); println!("{:#?}", bdu_codes); } Не проверял работоспособность, но вроде бы так

Traveller Kolsky
async fn parse_report(path: impl AsRef<Path>) { ...

а магию с from_fn и multicode.split_off(multicode.find("<br>")?) нельзя заменить на multicode.split("<br>")?

Nikolay- Автор вопроса
Traveller Kolsky
async fn parse_report(path: impl AsRef<Path>) { ...

fn parse_report(path: &str) { let report = std::fs::read_to_string("/home/nikolay/Desktop/otchet.html").unwrap(); let html = Html::parse_fragment(&report); let bdu_selector = Selector::parse(r#"td[class="bdu"]"#).unwrap(); let cells = html.select(&bdu_selector).map(|bdu| bdu.inner_html()); for cell in cells { for bdu in cell.split("<br>") { let (_, bdu) = bdu.split_once(':').unwrap(); println!("{:#?}", bdu); } } } еще у знакомого спросил, как это лучше сделать. он вот такой вариант предложил, работает ровно так, как нужно(без контейнеров правда, но это дело 2 строчек). и по конструкциям очень простой для понимания. у меня сказывается привычка к c#, пока не до конца отвык от его логики и в раст протаскиваю это все. но вам все равно спасибо больше за уделенное время, этот вариант тоже разберу для понимания тех конструкций)

Похожие вопросы

Обсуждают сегодня

Ребята, всем привет. Подскажите, пожалуйста, можно ли как-то через бота понять, что этого бота добавили в группу\канал и выдали ему права администратора?
Artem Stormageddon
9
Привет всем! Почему этот код не срабатывает при добавлении или удалении пользователя из чата? bot.on('chat_member', async (ctx) => { console.log(ctx); }) bot.launch({allo...
Alexander
5
Всем привет. Не понимаю, в чём тут шутка юмора. Убирается только разрешение на send_messages. А send_media_messages остаётся. Как сделать, чтобы оба убирались? await b...
Alexander
2
Есть ли лимиты на кол-во вебхук по домену? Стоит в данный момент 900+ ботов и бывает бот перестает отвечать (не приходят вебхуки) 🐒 Помогает только перезапуск
ᅠ [ Кому не ответил, дублируйте ]
11
Ребята привет. Telegraf 3.38 актуален ещё или лучше обновиться?
𝙊𝑙ẽ𝘨 // Rabbit Hole
2
'frakturBold' => ['𝖆', '𝖇', '𝖈', '𝖉', '𝖊', '𝖋', '𝖌', '𝖍', '𝖎', '𝖏', '𝖐', '𝖑', '𝖒', '𝖓', '𝖔', '𝖕', '𝖖', '𝖗', '𝖘', '𝖙', '𝖚', '𝖛', '𝖜', '𝖝', '𝖞', '𝖟', '𝕬', '𝕭', '𝕮', '𝕯'...
Roma
4
Товарищи, здравствуйте Подскажите, пожалуйста, может кто-нибудь сталкивался с такой задачей Через вебапку можно сканировать qr-код, а есть ли возможность считывать nfc?
Artem Stormageddon
8
Товарищи, я с вопросом На сколько мне известно, это, конечно, зависит от того, как программа использует процессор, но у меня всё равно остаётся вопрос Допустим, есть 2 проце...
Shen
1
Визуальное отображение моделей таблиц sql какое посоветуете?
Shen
7
а что делать если тебя убивают на картах?
Yarik yarik kyda ti lezesh
43
Карта сайта