diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/bin.rs | 10 | ||||
| -rw-r--r-- | src/parser.rs | 7 |
2 files changed, 13 insertions, 4 deletions
@@ -6,18 +6,21 @@ use structopt::StructOpt; use clap::{_clap_count_exprs, arg_enum}; use quicli::{main, fs::read_file, prelude::Verbosity}; -use self::parser::serialize_json; +use self::parser::{ + serialize_json, + serialize_xml, +}; arg_enum! { #[derive(Debug)] - enum Format { json } + enum Format { json, xml } } #[derive(Debug, StructOpt)] #[structopt(raw(setting = "structopt::clap::AppSettings::ColoredHelp"))] struct Cli { #[structopt( - long = "format", short = "f", default_value = "json", + long = "format", short = "f", default_value = "json", // xml is pretty defunct… raw(possible_values = "&Format::variants()", case_insensitive = "true"), )] format: Format, @@ -31,5 +34,6 @@ main!(|args: Cli, log_level: verbosity| { let stdout = std::io::stdout(); match args.format { Format::json => serialize_json(&content, stdout)?, + Format::xml => serialize_xml (&content, stdout)?, } }); diff --git a/src/parser.rs b/src/parser.rs index 69ead45..a75d2a1 100644 --- a/src/parser.rs +++ b/src/parser.rs @@ -125,9 +125,14 @@ pub fn parse(source: &str) -> Result<Document, Error> { } -/// only until we can serialize DocumentTrees 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(()) +} |
