blob: 1b819c519969bc0a9d66815e869027618c4af62f [file] [log] [blame]
Matthias Andreas Benkard4c32c392021-12-12 21:23:53 +01001/**
Matthias Andreas Benkard35f7a202021-12-14 19:29:26 +01002 * Provides {@link eu.mulk.jgvariant.core.Variant} and {@link eu.mulk.jgvariant.core.Decoder}, the
Matthias Andreas Benkard4c32c392021-12-12 21:23:53 +01003 * foundational classes for <a href="https://docs.gtk.org/glib/struct.Variant.html">GVariant</a>
4 * parsing.
5 *
Matthias Andreas Benkard35f7a202021-12-14 19:29:26 +01006 * <p>{@link eu.mulk.jgvariant.core.Variant} is a sum type (sealed interface) that represents a
Matthias Andreas Benkard4c32c392021-12-12 21:23:53 +01007 * GVariant value. Its subtypes represent the different types of values that GVariant supports.
8 *
9 * <p>Instances of {@link eu.mulk.jgvariant.core.Decoder} read a given concrete subtype of {@link
Matthias Andreas Benkard35f7a202021-12-14 19:29:26 +010010 * eu.mulk.jgvariant.core.Variant} from a {@link java.nio.ByteBuffer}. The class also contains
11 * factory methods to create those instances.
Matthias Andreas Benkard4c32c392021-12-12 21:23:53 +010012 *
13 * <p><strong>Example</strong>
14 *
Matthias Andreas Benkard35f7a202021-12-14 19:29:26 +010015 * <p>To parse a GVariant of type {@code "a(si)"}, which is an array of pairs of {@link
16 * java.lang.String} and {@code int}, you can use the following code:
Matthias Andreas Benkard4c32c392021-12-12 21:23:53 +010017 *
18 * <pre>{@code
Matthias Andreas Benkard35f7a202021-12-14 19:29:26 +010019 * record ExampleRecord(String s, int i) {}
Matthias Andreas Benkard4c32c392021-12-12 21:23:53 +010020 *
21 * var decoder =
22 * Decoder.ofArray(
23 * Decoder.ofStructure(
24 * ExampleRecord.class,
Matthias Andreas Benkard35f7a202021-12-14 19:29:26 +010025 * Decoder.ofString(UTF_8),
26 * Decoder.ofInt().withByteOrder(LITTLE_ENDIAN)));
Matthias Andreas Benkard4c32c392021-12-12 21:23:53 +010027 *
28 * byte[] bytes = ...;
Matthias Andreas Benkard35f7a202021-12-14 19:29:26 +010029 * List<ExampleRecord> example = decoder.decode(ByteBuffer.wrap(bytes));
Matthias Andreas Benkard4c32c392021-12-12 21:23:53 +010030 * }</pre>
31 */
32package eu.mulk.jgvariant.core;