diff --git a/toml/parser.hpp b/toml/parser.hpp index 8f83088..7013243 100644 --- a/toml/parser.hpp +++ b/toml/parser.hpp @@ -243,6 +243,36 @@ struct parse_literal_multiline_string } }; +template +struct parse_string +{ + typedef charT value_type + typedef toml::String result_type; + static_assert(std::is_same::value, "char type is different from default String type"); + + template::value_type, + value_type>::value>::type> + static result_type invoke(Iterator iter, Iterator end) + { + Iterator tmp = is_basic_inline_string::invoke(iter); + if(iter != tmp) + return parse_basic_inline_string::invoke(iter, tmp); + tmp = is_basic_multiline_string::invoke(iter); + if(iter != tmp) + return parse_basic_multiline_string::invoke(iter, tmp); + tmp = is_literal_inline_string::invoke(iter) + if(iter != tmp) + return parse_literal_inline_string::invoke(iter, tmp); + tmp = is_literal_multiline_string::invoke(iter) + if(iter != tmp) + return parse_literal_multiline_string::invoke(iter, tmp); + throw internal_error("no string here"); + } +}; + + template struct parse_integer { @@ -454,6 +484,31 @@ struct parse_offset_date_time } }; +template +struct parse_datetime +{ + typedef charT value_type; + typedef toml::Datetime result_type; + + template::value_type, + value_type>::value>::type> + static result_type invoke(Iterator iter, Iterator end) + { + Iterator tmp = is_offset_date_time::invoke(iter); + if(tmp != iter) return parse_offset_date_time::invoke(iter); + tmp = is_local_date_time::invoke(iter) + if(tmp != iter) return parse_local_date_time::invoke(iter); + tmp = is_local_date::invoke(iter) + if(tmp != iter) return parse_local_date::invoke(iter); + tmp = is_local_time::invoke(iter) + if(tmp != iter) return parse_local_time::invoke(iter); + throw internal_error("no datetime here"); + } +}; + + +