47 lines
1.5 KiB
Rust
47 lines
1.5 KiB
Rust
use shared::names::Site;
|
|
|
|
pub fn previous_url(source_url: &String, names: &Vec<Site>) -> Option<String> {
|
|
match names.iter().position(|r| &r.url == source_url) {
|
|
Some(index) if index == 0 => Some(names[names.len() - 1].url.to_string()),
|
|
Some(index) => Some(names[index - 1].url.to_string()),
|
|
None => None,
|
|
}
|
|
}
|
|
|
|
pub fn next_url(source_url: &String, names: &Vec<Site>) -> Option<String> {
|
|
// this is gay
|
|
match names.iter().position(|r| &r.url == source_url) {
|
|
Some(index) if index == names.len() - 1 => Some(names[0].url.to_string()),
|
|
Some(index) => Some(names[index + 1].url.to_string()),
|
|
None => None,
|
|
}
|
|
}
|
|
|
|
pub fn previous_name(source_url: &String, names: &Vec<Site>) -> Option<String> {
|
|
match names.iter().position(|r| &r.url == source_url) {
|
|
Some(index) if index == 0 => match &names[names.len() - 1].name {
|
|
Some(name) => Some(name.clone()),
|
|
None => previous_url(source_url, names),
|
|
},
|
|
Some(index) => match &names[index - 1].name {
|
|
Some(name) => Some(name.clone()),
|
|
None => previous_url(source_url, names),
|
|
},
|
|
None => None,
|
|
}
|
|
}
|
|
|
|
pub fn next_name(source_url: &String, names: &Vec<Site>) -> Option<String> {
|
|
match names.iter().position(|r| &r.url == source_url) {
|
|
Some(index) if index == names.len() - 1 => match &names[0].name {
|
|
Some(name) => Some(name.clone()),
|
|
None => next_url(source_url, names),
|
|
},
|
|
Some(index) => match &names[index + 1].name {
|
|
Some(name) => Some(name.clone()),
|
|
None => next_url(source_url, names),
|
|
},
|
|
None => None,
|
|
}
|
|
}
|