json: support tuple types ([number, string]
)
This commit is contained in:
parent
09248e0897
commit
2d9580a37b
1 changed files with 26 additions and 17 deletions
|
@ -86,24 +86,33 @@ class SchemaConverter:
|
||||||
|
|
||||||
elif schema_type == 'array' and 'items' in schema:
|
elif schema_type == 'array' and 'items' in schema:
|
||||||
# TODO `prefixItems` keyword
|
# TODO `prefixItems` keyword
|
||||||
item_rule_name = self.visit(schema['items'], f'{name}{"-" if name else ""}item')
|
items = schema['items']
|
||||||
list_item_operator = f'("," space {item_rule_name})'
|
if isinstance(items, list):
|
||||||
successive_items = ""
|
return self._add_rule(
|
||||||
min_items = schema.get("minItems", 0)
|
rule_name,
|
||||||
max_items = schema.get("maxItems")
|
'"[" space ' +
|
||||||
if min_items > 0:
|
' "," space '.join(
|
||||||
successive_items = list_item_operator * (min_items - 1)
|
self.visit(item, f'{name}-{i}')
|
||||||
min_items -= 1
|
for i, item in enumerate(items)) +
|
||||||
if max_items is not None and max_items > min_items:
|
' "]" space')
|
||||||
successive_items += (list_item_operator + "?") * (max_items - min_items - 1)
|
|
||||||
else:
|
else:
|
||||||
successive_items += list_item_operator + "*"
|
item_rule_name = self.visit(items, f'{name}{"-" if name else ""}item')
|
||||||
if min_items == 0:
|
list_item_operator = f'("," space {item_rule_name})'
|
||||||
rule = f'"[" space ({item_rule_name} {successive_items})? "]" space'
|
successive_items = ""
|
||||||
else:
|
min_items = schema.get("minItems", 0)
|
||||||
rule = f'"[" space {item_rule_name} {successive_items} "]" space'
|
max_items = schema.get("maxItems")
|
||||||
return self._add_rule(rule_name, rule)
|
if min_items > 0:
|
||||||
|
successive_items = list_item_operator * (min_items - 1)
|
||||||
|
min_items -= 1
|
||||||
|
if max_items is not None and max_items > min_items:
|
||||||
|
successive_items += (list_item_operator + "?") * (max_items - min_items - 1)
|
||||||
|
else:
|
||||||
|
successive_items += list_item_operator + "*"
|
||||||
|
if min_items == 0:
|
||||||
|
rule = f'"[" space ({item_rule_name} {successive_items})? "]" space'
|
||||||
|
else:
|
||||||
|
rule = f'"[" space {item_rule_name} {successive_items} "]" space'
|
||||||
|
return self._add_rule(rule_name, rule)
|
||||||
else:
|
else:
|
||||||
assert schema_type in PRIMITIVE_RULES, f'Unrecognized schema: {schema}'
|
assert schema_type in PRIMITIVE_RULES, f'Unrecognized schema: {schema}'
|
||||||
return self._add_rule(
|
return self._add_rule(
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue