aboutsummaryrefslogtreecommitdiffstats
path: root/src/parser.rs
blob: 61d1be890d18224dc2de1feb4ead713c3ddb109e (plain)
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
pub mod token;
pub mod conversion;
mod pest_rst;
mod pair_ext_parse;
#[cfg(test)]
pub mod tests;

use std::io::Write;

use failure::Error;
use pest::Parser;

use crate::document_tree::elements::Document;

use self::pest_rst::{RstParser,Rule};
use self::conversion::convert_document;


/// tokens to Document tree. resolves sections, but not references
pub fn parse(source: &str) -> Result<Document, Error> {
    let pairs = RstParser::parse(Rule::document, source)?;
    convert_document(pairs)
}


pub fn serialize_json<W>(source: &str, stream: W) -> Result<(), Error> where W: Write {
    let parsed = parse(source)?;
    serde_json::to_writer(stream, &parsed)?;
    Ok(())
}

pub fn serialize_xml<W>(source: &str, stream: W) -> Result<(), Error> where W: Write {
    let parsed = parse(source)?;
    serde_xml_rs::serialize(&parsed, stream)?;
    Ok(())
}