def mf2_to_json()

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


def mf2_to_json(message: Message) -> dict[str, Any]:
    """
    Represent a message using the MessageFormat 2 data model [JSON Schema](https://github.com/unicode-org/message-format-wg/blob/main/spec/data-model/message.json).

    Does not validate the message; for that, use `mf2_validate_message()`.
    """
    json_declarations = [
        {
            "type": (
                "input"
                if isinstance(expr.arg, VariableRef) and expr.arg.name == name
                else "local"
            ),
            "name": name,
            "value": _expression(expr),
        }
        for name, expr in message.declarations.items()
    ]

    if isinstance(message, PatternMessage):
        return {
            "type": "message",
            "declarations": json_declarations,
            "pattern": _pattern(message.pattern),
        }
    else:
        assert isinstance(message, SelectMessage)
        return {
            "type": "select",
            "declarations": json_declarations,
            "selectors": [_variable(sel) for sel in message.selectors],
            "variants": [
                {"keys": [_key(key) for key in keys], "value": _pattern(pattern)}
                for keys, pattern in message.variants.items()
            ],
        }