1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
use crate::ast_impl::Builder;
use crate::printer::Printer;
use crate::ToDsl;
use regex::Error;
use regex::Regex;
use regex_syntax::ast::parse::Parser;

impl<T: ToString> ToDsl for T {
    fn to_dsl(&self) -> Result<String, Error> {
        let str = self.to_string();
        Regex::new(&str)?;
        let mut parser = Parser::new();
        // This must pass since the regular expression is valid
        let ast = parser.parse(&str).unwrap();
        let mut printer = Printer::new();
        ast.print_ast(&mut printer);
        Ok(printer.to_string())
    }
}