def _expression()

in python/moz/l10n/formats/mf2/from_json.py [0:0]


def _expression(json: dict[str, Any]) -> Expression:
    if json["type"] != "expression":
        raise MF2ValidationError(f"Invalid JSON expression type: {json}")
    arg = _value(json["arg"]) if "arg" in json else None
    json_func = json.get("function", None)
    if json_func:
        if json_func["type"] != "function":
            raise MF2ValidationError(f"Invalid JSON function type: {json_func}")
        function = _string(json_func, "name")
        options = _options(json_func["options"]) if "options" in json_func else {}
    else:
        function = None
        options = {}
    if arg is None and function is None:
        raise MF2ValidationError(
            f"Invalid JSON expression with no operand and no function: {json}"
        )
    attributes = _attributes(json["attributes"]) if "attributes" in json else {}
    return Expression(arg, function, options, attributes)