blob: e2e814339f910d8bd020f603c68390e7d2bcf87b [file] [log] [blame]
Matthias Andreas Benkardb5d657a2022-02-03 21:14:30 +01001// SPDX-FileCopyrightText: © 2021 Matthias Andreas Benkard <code@mail.matthias.benkard.de>
2//
3// SPDX-License-Identifier: LGPL-3.0-or-later
4
Matthias Andreas Benkard4c32c392021-12-12 21:23:53 +01005/**
Matthias Andreas Benkard55c34812021-12-14 21:51:10 +01006 * Provides {@link eu.mulk.jgvariant.core.Decoder}, the foundational class for <a
7 * href="https://docs.gtk.org/glib/struct.Variant.html">GVariant</a> parsing.
Matthias Andreas Benkard4c32c392021-12-12 21:23:53 +01008 *
Matthias Andreas Benkard55c34812021-12-14 21:51:10 +01009 * <p>Instances of {@link eu.mulk.jgvariant.core.Decoder} read a given value type from a {@link
10 * java.nio.ByteBuffer}. The class also contains factory methods to create those instances.
Matthias Andreas Benkard4c32c392021-12-12 21:23:53 +010011 *
12 * <p><strong>Example</strong>
13 *
Matthias Andreas Benkard35f7a202021-12-14 19:29:26 +010014 * <p>To parse a GVariant of type {@code "a(si)"}, which is an array of pairs of {@link
15 * java.lang.String} and {@code int}, you can use the following code:
Matthias Andreas Benkard4c32c392021-12-12 21:23:53 +010016 *
Matthias Andreas Benkard0239d322022-04-15 20:21:37 +020017 * {@snippet lang="java" :
Matthias Andreas Benkard35f7a202021-12-14 19:29:26 +010018 * record ExampleRecord(String s, int i) {}
Matthias Andreas Benkard4c32c392021-12-12 21:23:53 +010019 *
20 * var decoder =
21 * Decoder.ofArray(
22 * Decoder.ofStructure(
23 * ExampleRecord.class,
Matthias Andreas Benkard35f7a202021-12-14 19:29:26 +010024 * Decoder.ofString(UTF_8),
25 * Decoder.ofInt().withByteOrder(LITTLE_ENDIAN)));
Matthias Andreas Benkard4c32c392021-12-12 21:23:53 +010026 *
Matthias Andreas Benkard0239d322022-04-15 20:21:37 +020027 * byte[] bytes;
Matthias Andreas Benkard35f7a202021-12-14 19:29:26 +010028 * List<ExampleRecord> example = decoder.decode(ByteBuffer.wrap(bytes));
Matthias Andreas Benkard0239d322022-04-15 20:21:37 +020029 * }
Matthias Andreas Benkard4c32c392021-12-12 21:23:53 +010030 */
31package eu.mulk.jgvariant.core;