1pub mod order;
16
17use scraper::{Html, Selector};
18use serde::{Deserialize, Serialize};
19
20use crate::work_schedule::order::Order;
21
22#[derive(Clone, PartialEq, PartialOrd, Eq, Ord, Debug, Hash, Serialize, Default, Deserialize)]
24pub struct WorkSchedule(pub Vec<Order>);
25
26impl WorkSchedule {
27 pub fn from(html: &str) -> WorkSchedule {
29 let fragment = Html::parse_fragment(html);
30 let orders = WorkSchedule::parse(&fragment);
31
32 WorkSchedule(orders)
33 }
34
35 fn parse(fragment: &Html) -> Vec<Order> {
36 let request_rows_selector = Selector::parse("table tr td table tr.requestrow").unwrap();
37 let request_rows = fragment.select(&request_rows_selector);
38
39 let mut orders = Vec::new();
40
41 for row in request_rows {
42 orders.push(Order::from_row_and_fragment(&row, fragment));
43 }
44
45 orders
46 }
47}