Skip to content

benkard/jgvariant

Folders and files

NameName
Last commit message
Last commit date

Latest commit

5250458 · Oct 9, 2022

History

68 Commits
Dec 18, 2021
Feb 3, 2022
Feb 4, 2022
Oct 9, 2022
Oct 9, 2022
Oct 9, 2022
Oct 9, 2022
Mar 1, 2022
Dec 12, 2021
Oct 9, 2022
Oct 9, 2022

Repository files navigation

GVariant for Java

This library provides a GVariant parser in pure Java.

Overview

jgvariant-core provides Decoder<T>, which read a given type of GVariant-encoded value from a ByteBuffer. The class also contains factory methods to acquire those instances.

The various subclasses of Decoder together implement the GVariant serialization specification.

jgvariant-ostree provides instances of Decoder<T> for various GVariant types used in OSTree repositories.

Example

To parse a GVariant value of type "a(si)", which is an array of pairs of String and int, you can use the following code:

record ExampleRecord(String s, int i) {}

var decoder =
  Decoder.ofArray(
    Decoder.ofStructure(
      ExampleRecord.class,
      Decoder.ofString(StandardCharsets.UTF_8),
      Decoder.ofInt().withByteOrder(ByteOrder.LITTLE_ENDIAN)));

byte[] bytes = ...;
List<ExampleRecord> example = decoder.decode(ByteBuffer.wrap(bytes));

Installation

Usage with Maven

<project>
  ...

  <dependencyManagement>
    ...

    <dependencies>
      <dependency>
        <groupId>eu.mulk.jgvariant</groupId>
        <artifactId>jgvariant-bom</artifactId>
        <version>0.1.7</version>
        <type>pom</type>
        <scope>import</scope>
      </dependency>
    </dependencies>

    ...
  </dependencyManagement>

  <dependencies>
    ...

    <dependency>
      <groupId>eu.mulk.jgvariant</groupId>
      <artifactId>jgvariant-core</artifactId>
    </dependency>
    <dependency>
      <groupId>eu.mulk.jgvariant</groupId>
      <artifactId>jgvariant-ostree</artifactId>
    </dependency>

    ...
  </dependencies>

  ...
</project>

Usage with Gradle

dependencies {
  ...

  implementation(platform("eu.mulk.jgvariant:jgvariant-bom:0.1.7")
  implementation("eu.mulk.jgvariant:jgvariant-core")
  implementation("eu.mulk.jgvariant:jgvariant-ostree")

  ...
}