blob: 1754096273ce4b1c612b6a1217ab800df5f06075 [file] [log] [blame]
Matthias Andreas Benkard4c32c392021-12-12 21:23:53 +01001/**
Matthias Andreas Benkard55c34812021-12-14 21:51:10 +01002 * Provides {@link eu.mulk.jgvariant.core.Decoder}, the foundational class for <a
3 * href="https://docs.gtk.org/glib/struct.Variant.html">GVariant</a> parsing.
Matthias Andreas Benkard4c32c392021-12-12 21:23:53 +01004 *
Matthias Andreas Benkard55c34812021-12-14 21:51:10 +01005 * <p>Instances of {@link eu.mulk.jgvariant.core.Decoder} read a given value type from a {@link
6 * java.nio.ByteBuffer}. The class also contains factory methods to create those instances.
Matthias Andreas Benkard4c32c392021-12-12 21:23:53 +01007 *
8 * <p><strong>Example</strong>
9 *
Matthias Andreas Benkard35f7a202021-12-14 19:29:26 +010010 * <p>To parse a GVariant of type {@code "a(si)"}, which is an array of pairs of {@link
11 * java.lang.String} and {@code int}, you can use the following code:
Matthias Andreas Benkard4c32c392021-12-12 21:23:53 +010012 *
13 * <pre>{@code
Matthias Andreas Benkard35f7a202021-12-14 19:29:26 +010014 * record ExampleRecord(String s, int i) {}
Matthias Andreas Benkard4c32c392021-12-12 21:23:53 +010015 *
16 * var decoder =
17 * Decoder.ofArray(
18 * Decoder.ofStructure(
19 * ExampleRecord.class,
Matthias Andreas Benkard35f7a202021-12-14 19:29:26 +010020 * Decoder.ofString(UTF_8),
21 * Decoder.ofInt().withByteOrder(LITTLE_ENDIAN)));
Matthias Andreas Benkard4c32c392021-12-12 21:23:53 +010022 *
23 * byte[] bytes = ...;
Matthias Andreas Benkard35f7a202021-12-14 19:29:26 +010024 * List<ExampleRecord> example = decoder.decode(ByteBuffer.wrap(bytes));
Matthias Andreas Benkard4c32c392021-12-12 21:23:53 +010025 * }</pre>
26 */
27package eu.mulk.jgvariant.core;