shift_client/types/
home_page.rs

1use crate::util::extract_csrf_token;
2use scraper::Html;
3
4/// Error that may occur while parsing a [`HomePage`].
5#[derive(Debug, thiserror::Error)]
6pub enum FromHtmlError {
7    /// Missing csrf token
8    #[error("missing csrf token")]
9    MissingCsrfToken,
10}
11
12/// The home page
13#[derive(Debug)]
14pub struct HomePage {
15    /// The csrf token
16    pub csrf_token: String,
17}
18
19impl HomePage {
20    /// Parse a [`HomePage`] from html
21    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}