shift_client/types/
home_page.rs1use crate::util::extract_csrf_token;
2use scraper::Html;
3
4#[derive(Debug, thiserror::Error)]
6pub enum FromHtmlError {
7 #[error("missing csrf token")]
9 MissingCsrfToken,
10}
11
12#[derive(Debug)]
14pub struct HomePage {
15 pub csrf_token: String,
17}
18
19impl HomePage {
20 pub(crate) fn from_html(html: &Html) -> Result<Self, FromHtmlError> {
22 let csrf_token = extract_csrf_token(html)
23 .ok_or(FromHtmlError::MissingCsrfToken)?
24 .to_string();
25
26 Ok(Self { csrf_token })
27 }
28}
29
30#[cfg(test)]
31mod test {
32 use super::*;
33
34 const SAMPLE_1: &str = include_str!("../../test_data/home.html");
35
36 #[test]
37 fn sample_1() {
38 let html = Html::parse_document(SAMPLE_1);
39 let _page = HomePage::from_html(&html).expect("failed to parse home page");
40 }
41}