From 1e43e9de9531552e926a3f97ce2f14798b2515d0 Mon Sep 17 00:00:00 2001 From: Yuheng Chen Date: Mon, 25 May 2015 03:29:52 +0800 Subject: [PATCH] Add parse for Yaml --- parser/Cargo.toml | 3 --- parser/src/lib.rs | 3 +-- parser/src/yaml.rs | 15 +++++---------- 3 files changed, 6 insertions(+), 15 deletions(-) diff --git a/parser/Cargo.toml b/parser/Cargo.toml index 82b30d2..d7dd718 100644 --- a/parser/Cargo.toml +++ b/parser/Cargo.toml @@ -2,6 +2,3 @@ name = "yaml-rust" version = "0.1.0" authors = ["Yuheng Chen "] - -[dependencies] -regex = "*" diff --git a/parser/src/lib.rs b/parser/src/lib.rs index 1241d22..6dd2656 100644 --- a/parser/src/lib.rs +++ b/parser/src/lib.rs @@ -1,8 +1,7 @@ -extern crate regex; - pub mod yaml; pub mod scanner; pub mod parser; + #[test] fn it_works() { } diff --git a/parser/src/yaml.rs b/parser/src/yaml.rs index cab65cc..05b9fad 100644 --- a/parser/src/yaml.rs +++ b/parser/src/yaml.rs @@ -1,7 +1,7 @@ use std::collections::BTreeMap; use std::ops::Index; use std::string; -use regex::Regex; +use std::str::FromStr; #[derive(Clone, PartialEq, PartialOrd, Debug, Eq, Ord)] pub enum Yaml { @@ -65,10 +65,6 @@ pub fn $name(&self) -> Option<$t> { ); ); -// these regex are from libyaml-rust project -macro_rules! regex( - ($s:expr) => (Regex::new($s).unwrap()); -); impl Yaml { define_as!(as_i64, i64, I64); define_as!(as_bool, bool, Boolean); @@ -91,12 +87,11 @@ impl Yaml { } } - pub fn as_f64(&self) -> Option { + pub fn parse(&self) -> Option { // XXX(chenyh) precompile me - let float_pattern = regex!(r"^([-+]?)(\.[0-9]+|[0-9]+(\.[0-9]*)?([eE][-+]?[0-9]+)?)$"); match *self { - Yaml::String(ref v) if float_pattern.is_match(v) => { - v.parse::().ok() + Yaml::String(ref v) => { + v.parse::().ok() }, _ => None } @@ -146,7 +141,7 @@ c: [1, 2] let mut parser = Parser::new(s.chars()); let out = parser.load().unwrap(); assert_eq!(out["a"].as_str().unwrap(), "1"); - assert_eq!(out["c"][1].as_str().unwrap(), "2"); + assert_eq!(out["c"][1].parse::().unwrap(), 2); assert!(out["d"][0].is_badvalue()); //assert_eq!(out.as_hash().unwrap()[&Yaml::String("a".to_string())].as_i64().unwrap(), 1i64); }