use std::borrow::Cow;
use std::io;
use std::path::Path;
pub mod node;
pub mod parser;
pub use node::Node;
pub use parser::Parser;
pub type Document = node::element::SVG;
pub fn open<'l, T>(path: T) -> io::Result<Parser<'l>> where T: AsRef<Path> {
use std::fs::File;
use std::io::Read;
let mut content = String::new();
let mut file = try!(File::open(path));
try!(file.read_to_string(&mut content));
Ok(parse(content))
}
#[inline]
pub fn parse<'l, T>(content: T) -> Parser<'l> where T: Into<Cow<'l, str>> {
Parser::new(content)
}
pub fn save<T, U>(path: T, document: &U) -> io::Result<()> where T: AsRef<Path>, U: Node {
use std::fs::File;
use std::io::Write;
let mut file = try!(File::create(path));
file.write_all(&document.to_string().into_bytes())
}
#[cfg(test)]
mod tests {
#[test]
fn open() {
use parser::Event;
let mut parser = ::open("tests/fixtures/benton.svg").unwrap();
macro_rules! test(
($matcher:pat) => (match parser.next().unwrap() {
$matcher => {},
_ => unreachable!(),
});
);
test!(Event::Instruction);
test!(Event::Comment);
test!(Event::Declaration);
test!(Event::Tag("svg", _, _));
test!(Event::Tag("path", _, _));
test!(Event::Tag("path", _, _));
test!(Event::Tag("path", _, _));
test!(Event::Tag("path", _, _));
test!(Event::Tag("svg", _, _));
assert!(parser.next().is_none());
}
}