// SPDX-FileCopyrightText: © 2023 Matthias Andreas Benkard <code@mail.matthias.benkard.de>
//
// SPDX-License-Identifier: GPL-3.0-or-later

/**
 * The {@code jgvariant} command line tool.
 *
 * <p>The {@link eu.mulk.jgvariant.tool} module contains a tool called {@code jgvariant} that can be
 * used to manipulate GVariant-formatted files from the command line. Its primary purpose is to
 * enable the scripting of OSTree repository management tasks.
 *
 * <p>The {@link eu.mulk.jgvariant.tool.Main} class defines the entry point of the tool.
 *
 * <p>Usage example (dumping the contents of an OSTree summary file):
 *
 * {@snippet lang="sh" :
 * $ jgvariant ostree summary read ./jgvariant-ostree/src/test/resources/ostree/summary
 * }
 *
 * <p>Output:
 *
 * {@snippet lang="json" :
 * {
 *     "entries": [
 *         {
 *             "ref": "mulkos/1.x/amd64",
 *             "value": {
 *                 "checksum": "66ff167ff35ce87daac817447a9490a262ee75f095f017716a6eb1a9d9eb3350",
 *                 "metadata": {
 *                     "fields": {
 *                         "ostree.commit.timestamp": 1640537170
 *                     }
 *                 },
 *                 "size": 214
 *             }
 *         }
 *     ],
 *     "metadata": {
 *         "fields": {
 *             "ostree.summary.last-modified": 1640537300,
 *             "ostree.summary.tombstone-commits": false,
 *             "ostree.static-deltas": {
 *                 "3d3b3329dca38871f29aeda1bf5854d76c707fa269759a899d0985c91815fe6f-66ff167ff35ce87daac817447a9490a262ee75f095f017716a6eb1a9d9eb3350": "03738040e28e7662e9c9d2599c530ea974e642c9f87e6c00cbaa39a0cdac8d44",
 *                 "31c8835d5c9d2c6687a50091c85142d1b2d853ff416a9fb81b4ee30754510d52": "f481144629474bd88c106e45ac405ebd75b324b0655af1aec14b31786ae1fd61",
 *                 "31c8835d5c9d2c6687a50091c85142d1b2d853ff416a9fb81b4ee30754510d52-3d3b3329dca38871f29aeda1bf5854d76c707fa269759a899d0985c91815fe6f": "2c6a07bc1cf4d7ce7d00f82d7d2d6d156fd0e31d476851b46dc2306b181b064a"
 *             },
 *             "ostree.summary.mode": "bare",
 *             "ostree.summary.indexed-deltas": true
 *         }
 *     }
 * }
 * }
 */
module eu.mulk.jgvariant.tool {
  requires transitive eu.mulk.jgvariant.ostree;
  requires info.picocli;
  requires jakarta.json;
  requires jakarta.json.bind;
  requires java.logging;
  requires static com.google.errorprone.annotations;
  requires static org.apiguardian.api;
  requires static org.jetbrains.annotations;

  opens eu.mulk.jgvariant.tool to
      info.picocli;

  exports eu.mulk.jgvariant.tool;
}
