stcp_scraper/lines/
mod.rs1mod fetch;
2mod parse;
3
4use crate::{Error, response::StcpResponse};
5use serde::{Deserialize, Serialize};
6use std::fmt::{Display, Formatter};
7use core::fmt;
8
9#[derive(Deserialize, Serialize, Debug, PartialEq)]
11pub struct Code(pub String);
12
13impl From<&str> for Code {
14 fn from(string: &str) -> Self {
15 Code(string.to_string())
16 }
17}
18
19impl Display for Code {
20 fn fmt(&self, f: &mut Formatter) -> fmt::Result {
21 write!(f, "{}", &self.0)
22 }
23}
24
25#[derive(Deserialize, Serialize, Debug, PartialEq)]
27pub struct PubCode(pub String);
28
29#[derive(Deserialize, Serialize, Debug, PartialEq)]
31pub struct Line {
32 pub accessibility: u8,
34
35 pub code: Code,
37
38 #[serde(rename = "pubcode")]
40 pub pub_code: PubCode,
41
42 pub description: String,
44}
45
46type LinesResponse = StcpResponse<Line>;
47
48pub fn fetch_lines() -> Result<Vec<Line>, Error> {
49 let json = fetch::fetch_lines()?;
50
51 let lines = parse::parse_lines(&json)?;
52
53 Ok(lines.records)
54}