Metadata-Version: 2.4
Name: literalizer
Version: 2026.3.16.1
Summary: Convert JSON data structures to native language literal syntax.
Author-email: Adam Dangoor <adamdangoor@gmail.com>
License-Expression: MIT
Project-URL: Documentation, https://adamtheturtle.github.io/literalizer/
Project-URL: Source, https://github.com/adamtheturtle/literalizer
Keywords: code-generation,json,literal
Classifier: Development Status :: 4 - Beta
Classifier: Programming Language :: Python :: 3 :: Only
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Classifier: Programming Language :: Python :: 3.14
Requires-Python: >=3.12
Description-Content-Type: text/x-rst
License-File: LICENSE
Requires-Dist: beartype==0.22.9
Requires-Dist: ruamel-yaml>=0.18.16
Provides-Extra: dev
Requires-Dist: actionlint-py==1.7.11.24; extra == "dev"
Requires-Dist: check-manifest==0.51; extra == "dev"
Requires-Dist: deptry==0.24.0; extra == "dev"
Requires-Dist: doc8==2.0.0; extra == "dev"
Requires-Dist: doccmd==2026.3.2; extra == "dev"
Requires-Dist: furo==2025.12.19; extra == "dev"
Requires-Dist: hypothesis>=6.0; extra == "dev"
Requires-Dist: interrogate==1.7.0; extra == "dev"
Requires-Dist: mypy[faster-cache]==1.19.1; extra == "dev"
Requires-Dist: mypy-strict-kwargs==2026.1.12; extra == "dev"
Requires-Dist: prek==0.3.5; extra == "dev"
Requires-Dist: pydocstringformatter==0.7.5; extra == "dev"
Requires-Dist: pylint[spelling]==4.0.5; extra == "dev"
Requires-Dist: pylint-per-file-ignores==3.2.0; extra == "dev"
Requires-Dist: pyproject-fmt==2.18.1; extra == "dev"
Requires-Dist: pyrefly==0.56.0; extra == "dev"
Requires-Dist: pyright==1.1.408; extra == "dev"
Requires-Dist: pyroma==5.0.1; extra == "dev"
Requires-Dist: pytest==9.0.2; extra == "dev"
Requires-Dist: pytest-cov==7.0.0; extra == "dev"
Requires-Dist: pytest-regressions==2.7.0; extra == "dev"
Requires-Dist: ruff==0.15.6; extra == "dev"
Requires-Dist: shellcheck-py==0.11.0.1; extra == "dev"
Requires-Dist: shfmt-py==3.12.0.2; extra == "dev"
Requires-Dist: sphinx==9.1.0; extra == "dev"
Requires-Dist: sphinx-copybutton==0.5.2; extra == "dev"
Requires-Dist: sphinx-lint==1.0.2; extra == "dev"
Requires-Dist: sphinx-pyproject==0.3.0; extra == "dev"
Requires-Dist: sphinx-substitution-extensions==2026.1.12; extra == "dev"
Requires-Dist: sphinxcontrib-spelling==8.0.2; extra == "dev"
Requires-Dist: ty==0.0.21; extra == "dev"
Requires-Dist: vulture==2.15; extra == "dev"
Requires-Dist: yamlfix==1.19.1; extra == "dev"
Requires-Dist: zizmor==1.23.1; extra == "dev"
Provides-Extra: release
Requires-Dist: check-wheel-contents==0.6.3; extra == "release"
Dynamic: license-file

|Build Status| |PyPI|

literalizer
===========

``literalizer`` converts JSON data structures to native language literal syntax (Python, JavaScript, TypeScript, Go, Ruby, C#, C++, Java, Kotlin, Rust, Haskell, Swift, PHP).

.. contents::
   :local:

Installation
------------

Requires Python |minimum-python-version|\+.

.. code-block:: sh

   pip install literalizer


Usage examples
--------------

.. code-block:: python

   """Examples of using literalizer."""

   from literalizer import (
       JAVA,
       JAVASCRIPT,
       PYTHON,
       LanguageSpec,
       format_bytes_hex,
       format_date_iso,
       format_datetime_iso,
       literalize_json,
       literalize_yaml,
   )

   # Convert a JSON array to Java literal items
   result = literalize_json(
       json_string='[true, null, "hi", [1, 2]]',
       language=JAVA,
       prefix="",
       wrap=False,
   )
   # result:
   # true,
   # null,
   # "hi",
   # {1, 2},

   # Convert to JavaScript/TypeScript array
   result = literalize_json(
       json_string='[true, null, "hi", [1, 2]]',
       language=JAVASCRIPT,
       prefix="    ",
       wrap=True,
   )
   # result:
   # [
   #     true,
   #     null,
   #     "hi",
   #     [1, 2],
   # ]

   # Convert a JSON string to Python
   result = literalize_json(
       json_string='[true, null, "hi", [1, 2]]',
       language=PYTHON,
       prefix="",
       wrap=True,
   )
   # result:
   # (
   #     True,
   #     None,
   #     "hi",
   #     (1, 2),
   # )

   # Convert from a YAML string directly
   result = literalize_yaml(
       yaml_string="- true\n- null\n- hi\n- [1, 2]",
       language=PYTHON,
       prefix="",
       wrap=True,
   )
   # result:
   # (
   #     True,
   #     None,
   #     "hi",
   #     (1, 2),
   # )

   # Built-in languages: PYTHON, JAVASCRIPT, TYPESCRIPT, GO, RUBY,
   #                      CSHARP, CPP, JAVA, KOTLIN, RUST, HASKELL, SWIFT, PHP


   # Create a custom language:
   def _omap_entry(key: str, value: str) -> str:
       """Format an ordered-map entry."""
       return f"{key}: {value}"


   custom = LanguageSpec(
       null_literal="nil",
       true_literal="TRUE",
       false_literal="FALSE",
       collection_open="[",
       collection_close="]",
       dict_separator=": ",
       dict_open="{",
       dict_close="}",
       format_dict_entry=None,
       trailing_comma=True,
       single_element_trailing_comma=False,
       format_bytes=format_bytes_hex,
       format_date=format_date_iso,
       format_datetime=format_datetime_iso,
       empty_collection=None,
       empty_dict=None,
       set_open="[",
       set_close="]",
       empty_set=None,
       format_set_entry=None,
       comment_prefix="//",
       omap_open="{",
       omap_close="}",
       format_omap_entry=_omap_entry,
       multiline_close_indent="",
       skip_null_dict_values=False,
       format_variable_declaration=None,
   )

Use cases
---------

* Generate test fixtures from JSON samples.
* Convert API responses to language-native data structures for documentation.
* Create type-safe literal data from JSON config files.

Full documentation
------------------

See the `full documentation <https://adamtheturtle.github.io/literalizer/>`__ for more information including how to contribute.

.. |Build Status| image:: https://github.com/adamtheturtle/literalizer/actions/workflows/ci.yml/badge.svg?branch=main
   :target: https://github.com/adamtheturtle/literalizer/actions
.. |PyPI| image:: https://badge.fury.io/py/literalizer.svg
   :target: https://badge.fury.io/py/literalizer
.. |minimum-python-version| replace:: 3.12
