15#include <unordered_map>
25 using SchemaIntegratorCallback = std::function <void (
const int,
const class DictionarySchema &)>;
31 using StringType = Data::StringType;
32 using SchemaRegex = std::basic_regex <StringType::value_type>;
49 entry.mandateType (expected);
83 inline bool operator!= (
const SchemaBase &other)
const {
101 virtual std::ostream &
dump (std::ostream &target,
int indent,
bool suppress_indent =
false)
const = 0;
119 virtual std::ostream &
dump (std::ostream &target,
int indent,
bool suppress_ident =
false)
const override;
140 virtual std::ostream &
dump (std::ostream &target,
int indent,
bool suppress_ident =
false)
const override;
148 using size_type = StringType::size_type;
150 size_type min_length;
151 size_type max_length;
154 StringSchema (size_type min = 0, size_type max = std::numeric_limits<size_type>::max());
164 virtual std::ostream &
dump (std::ostream &target,
int indent,
bool suppress_ident =
false)
const override;
172 using size_type = StringType::size_type;
174 StringType expression;
177 RegExSchema (
const StringType &express,
bool case_blind =
false, size_type min = 0, size_type max = std::numeric_limits<size_type>::max());
187 virtual std::ostream &
dump (std::ostream &target,
int indent,
bool suppress_ident =
false)
const override;
194 std::set<StringType> valid_values;
195 bool ignore_case =
true;
209 virtual std::ostream &
dump (std::ostream &target,
int indent,
bool suppress_ident =
false)
const override;
213 template <
typename NumericType>
216 using value_type = NumericType;
219 bool minimumIsInclusive =
true;
221 bool maximumIsInclusive =
true;
225 RangeSchema (
const NumericType min = std::numeric_limits<NumericType>::lowest(),
226 const NumericType max = std::numeric_limits<NumericType>::max());
238 virtual std::ostream &
dump (std::ostream &target,
int indent,
bool suppress_ident =
false)
const override;
247 value_type multiple = 0;
249 using range_type::RangeSchema;
275 virtual std::ostream &
dump (std::ostream &target,
int indent,
bool suppress_ident =
false)
const override;
282 using size_type = Data::ListType::size_type;
285 size_type minimum_required = 0;
286 size_type maximum_allowed = std::numeric_limits<int>::max();
287 bool single_as_nonlist_allowed =
false;
295 ListSchema (
SchemaBaseRef &&, size_type minimum = 0, size_type maximum = std::numeric_limits<size_type>::max());
296 ListSchema (
const SchemaBase &, size_type minimum = 0, size_type maximum = std::numeric_limits<size_type>::max());
303 virtual std::ostream &
dump (std::ostream &target,
int indent,
bool suppress_ident =
false)
const override;
313 using Dependencies = std::set<std::string>;
314 using size_type =
unsigned int;
315 static const Dependencies NoDependencies;
317 size_type minimum_members {0};
318 size_type maximum_members = std::numeric_limits<size_type>::max();
329 enum AdditionalMemberNames { NONE, ANY, PATTERN };
330 std::map <std::string, DictionaryMember> members;
331 AdditionalMemberNames
tolerance = AdditionalMemberNames::NONE;
332 SchemaRegex additional_member_regex;
345 const Dependencies &dependencies = NoDependencies);
352 virtual std::ostream &
dump (std::ostream &target,
int indent,
bool suppress_ident =
false)
const override;
368 static const std::unordered_map<std::string, Action> key_names;
369 std::string action_name;
370 Action action = Action::Any;
371 using ChildrenList = std::vector<SchemaBaseRef>;
372 ChildrenList children;
373 static std::string get_action_name (
const Parsnip::Data &schema_spec);
385 virtual std::ostream &
dump (std::ostream &target,
int indent,
bool suppress_ident =
false)
const override;
A meta-schema that determines if any, all, or exactly one or none of its subschemas are valid.
Definition parsnip_schema.h:358
virtual std::ostream & dump(std::ostream &target, int indent, bool suppress_ident=false) const override
Render the schema in human-friendly text.
Definition parsnip_schema.cpp:1020
virtual void validate(const Parsnip::Data &entry) const override
Verify that Data matches the schema.
Definition parsnip_schema.cpp:977
static bool is_conjunction(const Parsnip::Data &schema_spec)
Checks a schema specification for a conjunction.
Definition parsnip_schema.cpp:900
virtual bool operator==(const SchemaBase &other) const override
Check if two schemas perform the same validation.
Definition parsnip_schema.cpp:1010
virtual ConjunctionSchema * createCopy() const override
Create an identical, deep copy of the schema.
Definition parsnip_schema.cpp:973
Generic data type.
Definition parsnip.h:81
Type
Types that may be stored in the data.
Definition parsnip.h:99
@ Null
Nothing is present.
Type datatype
Type presently stored in object.
Definition parsnip.h:117
Definition parsnip_schema.h:320
bool operator==(const DictionaryMember &other) const
Determine if two dictionary members are equivalent to each other, deep comparing the schema.
Definition parsnip_schema.cpp:607
SchemaBaseRef member_schema
Schema for this dictionary member.
Definition parsnip_schema.h:322
bool mandatory
Whether element must be present.
Definition parsnip_schema.h:324
Dependencies expects
Other elements that must be present when this one is.
Definition parsnip_schema.h:323
Schema component for validating dictionaries.
Definition parsnip_schema.h:307
virtual bool operator==(const SchemaBase &other) const override
Check if two schemas perform the same validation.
Definition parsnip_schema.cpp:753
void removeMember(const char *name)
Remove a member from the schema.
Definition parsnip_schema.cpp:716
virtual void validate(const Parsnip::Data &entry) const override
Validate a dictionary:
Definition parsnip_schema.cpp:764
virtual void mergeSchemas(const SchemaBase &from) override
Merge elements into the current schema.
Definition parsnip_schema.cpp:820
AdditionalMemberNames tolerance
Allow unrecognized members in the dictionary?
Definition parsnip_schema.h:331
virtual std::ostream & dump(std::ostream &target, int indent, bool suppress_ident=false) const override
Render the schema in human-friendly text.
Definition parsnip_schema.cpp:723
void addMember(const char *name, const SchemaBase &schema, bool mandatory=false, const Dependencies &dependencies=NoDependencies)
Add a member to a dictionary schema.
Definition parsnip_schema.cpp:696
virtual DictionarySchema * createCopy() const override
Create an identical, deep copy of the schema.
Definition parsnip_schema.cpp:749
void replaceMember(const char *name, const SchemaBase &schema)
Replace a member in the schema, retaining original mandatory status and dependencies.
Definition parsnip_schema.cpp:710
Class representing issues related to serialization & parsing.
Definition parsnip.h:41
std::string reason
Storage for the exception explanation.
Definition parsnip.h:45
Definition parsnip_schema.h:244
virtual IntegerSchema * createCopy() const override
Create an identical, deep copy of the schema.
Definition parsnip_schema.cpp:432
virtual bool operator==(const SchemaBase &other) const override
Check if two schemas perform the same validation.
Definition parsnip_schema.cpp:436
virtual void validate(const Parsnip::Data &entry) const override
Validate item range: ensure the datatype falls within the allowed range.
Definition parsnip_schema.cpp:441
Parsing/command patterns produce schema inconsistency.
Definition parsnip_schema.h:389
Evaluate a keyword in a command line.
Definition parsnip_evaluate.h:244
Schema component accepting strings with certain values.
Definition parsnip_schema.h:192
virtual KeywordSchema * createCopy() const override
Create an identical, deep copy of the schema.
Definition parsnip_schema.cpp:263
virtual bool operator==(const SchemaBase &other) const override
Check if two schemas perform the same validation.
Definition parsnip_schema.cpp:288
virtual void mergeSchemas(const SchemaBase &from) override
Merge elements into the current schema.
Definition parsnip_schema.cpp:308
virtual void validate(const Parsnip::Data &entry) const override
Validate a Keyword: ensure the datatype is a string, and that it matches one of the allowed values.
Definition parsnip_schema.cpp:295
void addKeyword(const std::string &word)
Add an additional keyword that the schema will allow.
Definition parsnip_schema.cpp:269
virtual std::ostream & dump(std::ostream &target, int indent, bool suppress_ident=false) const override
Render the schema in human-friendly text.
Definition parsnip_schema.cpp:316
Schema component for lists.
Definition parsnip_schema.h:280
virtual bool operator==(const SchemaBase &other) const override
Check if two schemas perform the same validation.
Definition parsnip_schema.cpp:545
virtual void mergeSchemas(const SchemaBase &from) override
Merge elements into the current schema.
Definition parsnip_schema.cpp:577
virtual std::ostream & dump(std::ostream &target, int indent, bool suppress_ident=false) const override
Render the schema in human-friendly text.
Definition parsnip_schema.cpp:589
virtual ListSchema * createCopy() const override
Create an identical, deep copy of the schema.
Definition parsnip_schema.cpp:541
virtual void validate(const Parsnip::Data &entry) const override
Validate a list: ensure all elements conform to a single schema.
Definition parsnip_schema.cpp:555
Evaluate remainder with a different parser.
Definition parsnip_evaluate.h:315
Schema adapter component that allows use of schemas from option parsers.
Definition parsnip_schema.h:258
virtual void validate(const Parsnip::Data &entry) const override
Validate the option's schema by calling that scheme's validator.
Definition parsnip_schema.cpp:474
virtual std::ostream & dump(std::ostream &target, int indent, bool suppress_ident=false) const override
Render the schema in human-friendly text.
Definition parsnip_schema.cpp:492
virtual void mergeSchemas(const SchemaBase &from) override
Merge elements into the current schema.
Definition parsnip_schema.cpp:479
virtual bool operator==(const SchemaBase &other) const override
Check if two schemas perform the same validation.
Definition parsnip_schema.cpp:468
OptionSchema()=default
Validate a type schema: ensure the datatype is as expected.
virtual OptionSchema * createCopy() const override
Create an identical, deep copy of the schema.
Definition parsnip_schema.cpp:464
Schema component for numeric data, either Integer or Real.
Definition parsnip_schema.h:214
virtual RangeSchema * createCopy() const override
Create an identical, deep copy of the schema.
Definition parsnip_schema.cpp:341
virtual bool operator==(const SchemaBase &other) const override
Check if two schemas perform the same validation.
Definition parsnip_schema.cpp:386
virtual void mergeSchemas(const SchemaBase &from) override
Merge elements into the current schema.
Definition parsnip_schema.cpp:394
virtual void validate(const Parsnip::Data &entry) const override
Validate item range: ensure the datatype falls within the allowed range.
Definition parsnip_schema.cpp:367
virtual std::ostream & dump(std::ostream &target, int indent, bool suppress_ident=false) const override
Render the schema in human-friendly text.
Definition parsnip_schema.cpp:403
Schema component requiring data be a string of characters matching a regular expression.
Definition parsnip_schema.h:170
virtual RegExSchema * createCopy() const override
Create an identical, deep copy of the schema.
Definition parsnip_schema.cpp:224
virtual std::ostream & dump(std::ostream &target, int indent, bool suppress_ident=false) const override
Render the schema in human-friendly text.
Definition parsnip_schema.cpp:249
virtual bool operator==(const SchemaBase &other) const override
Check if two schemas perform the same validation.
Definition parsnip_schema.cpp:243
virtual void validate(const Parsnip::Data &entry) const override
Verify that Data matches the schema.
Definition parsnip_schema.cpp:228
Gather the rest of the command line tokens in a list.
Definition parsnip_evaluate.h:302
Definition parsnip_schema.h:28
virtual std::ostream & dump(std::ostream &target, int indent, bool suppress_indent=false) const =0
Render the schema in human-friendly text.
void checkType(Data::Type expected, const Parsnip::Data &entry) const
Check that Data item is an allowed type.
Definition parsnip_schema.h:47
virtual void validate(const Parsnip::Data &entry) const =0
Verify that Data matches the schema.
virtual SchemaBase * createCopy() const =0
Create an identical, deep copy of the schema.
bool isValidlyNull(const Parsnip::Data &entry) const
Determine if the data is Null and if that is allowed.
Definition parsnip_schema.h:56
virtual void mergeSchemas(const SchemaBase &from)
Merge elements into the current schema.
Definition parsnip_schema.cpp:82
bool nullable
If true, element may be null.
Definition parsnip_schema.h:34
bool isType(Data::Type expected, const Parsnip::Data &entry) const
Check if a data object is a particular type.
Definition parsnip_schema.h:64
virtual bool operator==(const SchemaBase &other) const
Check if two schemas perform the same validation.
Definition parsnip_schema.cpp:77
Smart pointer for schemas, with unusual ability to be copied.
Definition parsnip.h:601
Schema component requiring data be a string of characters (no control characters).
Definition parsnip_schema.h:146
virtual StringSchema * createCopy() const override
Create an identical, deep copy of the schema.
Definition parsnip_schema.cpp:166
virtual bool operator==(const SchemaBase &other) const override
Check if two schemas perform the same validation.
Definition parsnip_schema.cpp:186
virtual std::ostream & dump(std::ostream &target, int indent, bool suppress_ident=false) const override
Render the schema in human-friendly text.
Definition parsnip_schema.cpp:192
virtual void validate(const Parsnip::Data &entry) const override
Verify that Data matches the schema.
Definition parsnip_schema.cpp:170
Schema component requiring data be a particular type.
Definition parsnip_schema.h:123
virtual TypeSchema * createCopy() const override
Create an identical, deep copy of the schema.
Definition parsnip_schema.cpp:127
virtual bool operator==(const SchemaBase &other) const override
Check if two schemas perform the same validation.
Definition parsnip_schema.cpp:131
virtual void mergeSchemas(const SchemaBase &from) override
Merge elements into the current schema.
Definition parsnip_schema.cpp:136
virtual std::ostream & dump(std::ostream &target, int indent, bool suppress_ident=false) const override
Render the schema in human-friendly text.
Definition parsnip_schema.cpp:143
virtual void validate(const Parsnip::Data &entry) const override
Verify that Data matches the schema.
Definition parsnip_schema.cpp:123
Schema component requiring data be a particular type.
Definition parsnip_schema.h:109
virtual std::ostream & dump(std::ostream &target, int indent, bool suppress_ident=false) const override
Render the schema in human-friendly text.
Definition parsnip_schema.cpp:102
virtual void validate(const Parsnip::Data &) const override
Construct a schema element that does no checking.
Definition parsnip_schema.cpp:94
virtual UncheckedSchema * createCopy() const override
Create an identical, deep copy of the schema.
Definition parsnip_schema.cpp:98
Evaluate a value/fill-in field.
Definition parsnip_evaluate.h:150
Serialization and parsing library.
Definition parsnip.h:38
Parsnip command-line parsing.