summaryrefslogtreecommitdiff
path: root/buildscripts/idl/idl/parser.py
diff options
context:
space:
mode:
authorSara Golemon <sara.golemon@mongodb.com>2018-09-26 15:17:56 +0000
committerSara Golemon <sara.golemon@mongodb.com>2018-10-05 23:33:33 +0000
commitf9600749453db5dec58bd1bbfd967e16b1578a24 (patch)
tree22e0f6e8f773483ad12828d92f4bf8d1496fbe70 /buildscripts/idl/idl/parser.py
parent2db04b524dc5e2121b74829814db7c8e84e5696d (diff)
downloadmongo-f9600749453db5dec58bd1bbfd967e16b1578a24.tar.gz
SERVER-37168 Add validators for IDL fields
Diffstat (limited to 'buildscripts/idl/idl/parser.py')
-rw-r--r--buildscripts/idl/idl/parser.py18
1 files changed, 18 insertions, 0 deletions
diff --git a/buildscripts/idl/idl/parser.py b/buildscripts/idl/idl/parser.py
index 052f9a21782..bb778a5633f 100644
--- a/buildscripts/idl/idl/parser.py
+++ b/buildscripts/idl/idl/parser.py
@@ -191,6 +191,23 @@ def _parse_type(ctxt, spec, name, node):
spec.symbols.add_type(ctxt, idltype)
+def _parse_validator(ctxt, node):
+ # type: (errors.ParserContext, yaml.nodes.MappingNode) -> syntax.Validator
+ """Parse a validator for a field."""
+ validator = syntax.Validator(ctxt.file_name, node.start_mark.line, node.start_mark.column)
+
+ _generic_parser(
+ ctxt, node, "validator", validator, {
+ "gt": _RuleDesc("scalar"),
+ "lt": _RuleDesc("scalar"),
+ "gte": _RuleDesc("scalar"),
+ "lte": _RuleDesc("scalar"),
+ "callback": _RuleDesc("scalar"),
+ })
+
+ return validator
+
+
def _parse_field(ctxt, name, node):
# type: (errors.ParserContext, str, Union[yaml.nodes.MappingNode, yaml.nodes.ScalarNode, yaml.nodes.SequenceNode]) -> syntax.Field
"""Parse a field in a struct/command in the IDL file."""
@@ -207,6 +224,7 @@ def _parse_field(ctxt, name, node):
"default": _RuleDesc('scalar'),
"supports_doc_sequence": _RuleDesc("bool_scalar"),
"comparison_order": _RuleDesc("int_scalar"),
+ "validator": _RuleDesc('mapping', mapping_parser_func=_parse_validator),
})
return field