CASM
1.1.0
A Clusters Approach to Statistical Mechanics
|
#include <InputParser.hh>
Base data structure for parsing values from JSON and storing error and warning messages
This contains two jsonParser references:
this->input.find_at(this->path)
that will be parsed when member functions (require, optional, etc.) are called and which any error or warning messages they create are referenced to.Basic example:
Similar options allow returning parsed values instead of assigning, optionally parsing if values exists in the JSON, specifying default values if no value exists, etc.
The make_report
, print_errors
and print_warnings
methods allow formatted output of error and warning messages.
Definition at line 66 of file InputParser.hh.
Public Types | |
typedef std::multimap< fs::path, std::shared_ptr< KwargsParser > > | map_type |
Public Member Functions | |
KwargsParser (jsonParser const &_input, fs::path _path, bool _required) | |
virtual | ~KwargsParser () |
const jsonParser & | parent () const |
fs::path | parent_path () const |
std::string | name () const |
Name of this->self, equivalent to this->path.filename().string() More... | |
bool | exists () const |
fs::path | relpath (const fs::path &val) const |
Return this->path / val, ensuring the result is a relative path. More... | |
map_type::const_iterator | begin () const |
Begin iterator over subparsers. More... | |
map_type::const_iterator | end () const |
End iterator over subparsers. More... | |
bool | valid () const |
Return true if this and and all subparsers are valid. More... | |
std::map< fs::path, std::set< std::string > > | all_warnings () const |
Return warning messages from this and all subparsers. More... | |
std::map< fs::path, std::set< std::string > > | all_errors () const |
Return error messages from this and all subparsers. More... | |
void | insert (fs::path path, const std::shared_ptr< KwargsParser > &subparser) |
void | insert_error (fs::path option, std::string message) |
Insert a subparser at location option with a single error message More... | |
void | insert_warning (fs::path option, std::string message) |
Insert a subparser at location option with a single warning message More... | |
bool | warn_unnecessary (const std::set< std::string > &expected) |
Insert a warning if any unexpected JSON attributes are found in self. More... | |
Validator & | insert (const Validator &other) |
void | clear () |
Validator & | insert (const Validator &other) |
Public Attributes | |
jsonParser const & | input |
Reference to the top of the JSON document being parsed. More... | |
fs::path | path |
jsonParser const & | self |
bool | required |
If this->input.at(this->path) is required to exist. More... | |
std::string | type_name |
std::set< std::string > | error |
std::set< std::string > | warning |
Private Types | |
typedef map_type::value_type | PairType |
Private Attributes | |
map_type | m_subparsers |
typedef std::multimap<fs::path, std::shared_ptr<KwargsParser> > CASM::KwargsParser::map_type |
Definition at line 134 of file InputParser.hh.
|
private |
Definition at line 172 of file InputParser.hh.
CASM::KwargsParser::KwargsParser | ( | jsonParser const & | _input, |
fs::path | _path, | ||
bool | _required | ||
) |
Construct KwargsParser
_input | Reference to top of the JSON document |
_path | Location of JSON component, relative to input, to be parsed |
_required | If true, insert an error if JSON component refered to by _path does not exist |
If required to exist, but does not, the KwargsParser will be constructed and the following error will be inserted:
Definition at line 20 of file InputParser.cc.
|
inlinevirtual |
Definition at line 102 of file InputParser.hh.
std::map< fs::path, std::set< std::string > > CASM::KwargsParser::all_errors | ( | ) | const |
Return error messages from this and all subparsers.
Definition at line 77 of file InputParser.cc.
std::map< fs::path, std::set< std::string > > CASM::KwargsParser::all_warnings | ( | ) | const |
Return warning messages from this and all subparsers.
Definition at line 61 of file InputParser.cc.
KwargsParser::map_type::const_iterator CASM::KwargsParser::begin | ( | ) | const |
Begin iterator over subparsers.
Definition at line 48 of file InputParser.cc.
|
inlineinherited |
Definition at line 14 of file Validator.hh.
KwargsParser::map_type::const_iterator CASM::KwargsParser::end | ( | ) | const |
End iterator over subparsers.
Definition at line 52 of file InputParser.cc.
bool CASM::KwargsParser::exists | ( | ) | const |
Check if this->input.find_at(this->path) exists
When KwargsParser is contructed with a path that does not exist, then this->self=this->input.
Definition at line 44 of file InputParser.cc.
|
inline |
Definition at line 19 of file Validator.hh.
Definition at line 19 of file Validator.hh.
void CASM::KwargsParser::insert | ( | fs::path | path, |
const std::shared_ptr< KwargsParser > & | subparser | ||
) |
Insert a subparser
Subparsers are stored in a map of path (from this->input) to the subparser. After being inserted, the subparser's errors and warnings are included in validation checks (valid
) and in parser output (make_report
, print_warnings
, print_errors
, etc.).
Definition at line 92 of file InputParser.cc.
void CASM::KwargsParser::insert_error | ( | fs::path | option, |
std::string | message | ||
) |
Insert a subparser at location option
with a single error message
Definition at line 97 of file InputParser.cc.
void CASM::KwargsParser::insert_warning | ( | fs::path | option, |
std::string | message | ||
) |
Insert a subparser at location option
with a single warning message
Definition at line 104 of file InputParser.cc.
std::string CASM::KwargsParser::name | ( | ) | const |
Name of this->self, equivalent to this->path.filename().string()
Definition at line 42 of file InputParser.cc.
const jsonParser & CASM::KwargsParser::parent | ( | ) | const |
Return a const reference to the parent JSON object of this->self
If self==input, returns self.
Definition at line 33 of file InputParser.cc.
fs::path CASM::KwargsParser::parent_path | ( | ) | const |
Return a fs::path from the top-level to the parent JSON object of this->self
The result satisfies: this->parent()==this->input.find_at(this->parent_path())
Definition at line 40 of file InputParser.cc.
|
inline |
Return this->path / val, ensuring the result is a relative path.
Definition at line 128 of file InputParser.hh.
bool CASM::KwargsParser::valid | ( | ) | const |
Return true if this and and all subparsers are valid.
Definition at line 56 of file InputParser.cc.
bool CASM::KwargsParser::warn_unnecessary | ( | const std::set< std::string > & | expected | ) |
Insert a warning if any unexpected JSON attributes are found in self.
Definition at line 111 of file InputParser.cc.
|
inherited |
Definition at line 11 of file Validator.hh.
jsonParser const& CASM::KwargsParser::input |
Reference to the top of the JSON document being parsed.
Definition at line 68 of file InputParser.hh.
|
private |
Used to store sub-parsers. Allows code re-use w/ storage of all errors & warnings. Can use static_cast to get values from InputParser subparsers if they are included.
Definition at line 178 of file InputParser.hh.
fs::path CASM::KwargsParser::path |
Path to the JSON component to be parsed from the opt of the JSON document. If it exists, this->self = this->input.at(this->path))
Definition at line 72 of file InputParser.hh.
bool CASM::KwargsParser::required |
If this->input.at(this->path) is required to exist.
Definition at line 84 of file InputParser.hh.
jsonParser const& CASM::KwargsParser::self |
Reference to the JSON component to be parsed, if it exists, otherwise set to this->input
Note:
Definition at line 81 of file InputParser.hh.
std::string CASM::KwargsParser::type_name |
Default empty, can be used to differentiate between parsers when multiple values are parsed from a single JSON object
Definition at line 88 of file InputParser.hh.
|
inherited |
Definition at line 12 of file Validator.hh.