adapt to new layout of data source
This commit is contained in:
parent
6e3e3e6321
commit
ecd188ecfe
@ -10,7 +10,7 @@ pub fn parse_inner_node(inner_node: &str) -> String {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if let Some(end) = end {
|
if let Some(end) = end {
|
||||||
let new_end = end - 1;
|
let new_end = end.saturating_sub(1);
|
||||||
|
|
||||||
if new_end >= start_index {
|
if new_end >= start_index {
|
||||||
end_index = new_end
|
end_index = new_end
|
||||||
|
@ -8,6 +8,18 @@ pub struct RemainingPlace {
|
|||||||
pub free: usize,
|
pub free: usize,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl Ord for RemainingPlace {
|
||||||
|
fn cmp(&self, other: &Self) -> std::cmp::Ordering {
|
||||||
|
self.id.cmp(&other.id)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl PartialOrd for RemainingPlace {
|
||||||
|
fn partial_cmp(&self, other: &Self) -> Option<std::cmp::Ordering> {
|
||||||
|
self.id.partial_cmp(&other.id)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
pub fn get_current_places(url: &str) -> Result<Vec<RemainingPlace>, reqwest::Error> {
|
pub fn get_current_places(url: &str) -> Result<Vec<RemainingPlace>, reqwest::Error> {
|
||||||
let body = reqwest::blocking::get(url)?.text()?;
|
let body = reqwest::blocking::get(url)?.text()?;
|
||||||
|
|
||||||
@ -35,19 +47,47 @@ pub fn get_current_places(url: &str) -> Result<Vec<RemainingPlace>, reqwest::Err
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
lines.chunks(4).for_each(|chunk| {
|
lines.chunks(6).for_each(|chunk| {
|
||||||
|
let free = try_parse_free_slot(&chunk[4]);
|
||||||
|
let (id, description) = if let Some((id, description)) = chunk[0].split_once(' ') {
|
||||||
|
(id, description)
|
||||||
|
} else {
|
||||||
|
return;
|
||||||
|
};
|
||||||
|
|
||||||
|
if free.is_none() {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
let new_remaining_place = RemainingPlace {
|
let new_remaining_place = RemainingPlace {
|
||||||
id: chunk[0].clone(),
|
id: id.to_string(),
|
||||||
description: chunk[1].clone(),
|
description: description.to_string(),
|
||||||
date: chunk[2].clone(),
|
date: chunk[2].clone(),
|
||||||
free: match chunk[3].parse() {
|
free: free.unwrap()
|
||||||
Ok(value) => value,
|
|
||||||
Err(_) => 0,
|
|
||||||
},
|
|
||||||
};
|
};
|
||||||
|
|
||||||
places.push(new_remaining_place);
|
places.push(new_remaining_place);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
places.sort();
|
||||||
|
|
||||||
Ok(places)
|
Ok(places)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn try_parse_free_slot(content: &str) -> Option<usize> {
|
||||||
|
if let Ok(slots) = content.parse::<usize>() {
|
||||||
|
return Some(slots)
|
||||||
|
}
|
||||||
|
|
||||||
|
if let Some((left, right)) = content.split_once(' ') {
|
||||||
|
if let Ok(slots) = left.parse::<usize>() {
|
||||||
|
return Some(slots)
|
||||||
|
}
|
||||||
|
|
||||||
|
if let Ok(slots) = right.parse::<usize>() {
|
||||||
|
return Some(slots)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
None
|
||||||
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user