1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
#[macro_use]
extern crate ego_tree;

mod extractor;
mod parser;
mod util;

pub use extractor::ExtractorError;
pub use parser::{
    Argument, Field, Method, MethodArgs, Object, ObjectData, ParseError, Parsed, Type,
};

pub const BOT_API_DOCS_URL: &str = "https://core.telegram.org/bots/api/";

use extractor::Extractor;

#[derive(Debug, thiserror::Error)]
pub enum Error {
    #[error("Extractor: {0}")]
    Extractor(
        #[from]
        #[source]
        ExtractorError,
    ),
    #[error("Parser: {0}")]
    Parse(
        #[from]
        #[source]
        ParseError,
    ),
}

pub fn get(html_doc: &str) -> Result<Parsed, Error> {
    let extractor = Extractor::from_str(html_doc);
    let extracted = extractor.extract()?;
    let parsed = parser::parse(extracted)?;
    Ok(parsed)
}