blob: 6e1f820caf6bb9f3fe9b9239a71ac7bb43410c34 [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 Benkard4e8423d2021-12-19 22:56:09 +01005package eu.mulk.jgvariant.ostree;
6
7import eu.mulk.jgvariant.core.Decoder;
8import eu.mulk.jgvariant.core.Variant;
9import java.nio.charset.StandardCharsets;
Matthias Andreas Benkard329168c2021-12-28 01:20:05 +010010import java.util.Map;
Matthias Andreas Benkard4e8423d2021-12-19 22:56:09 +010011
12/**
Matthias Andreas Benkard05114642021-12-29 21:51:29 +010013 * A wrapper for a set of metadata fields.
Matthias Andreas Benkard4e8423d2021-12-19 22:56:09 +010014 *
15 * <p>Reference: (embedded in other data types)
Matthias Andreas Benkard05114642021-12-29 21:51:29 +010016 *
17 * @param fields a set of metadata fields indexed by name.
Matthias Andreas Benkard4e8423d2021-12-19 22:56:09 +010018 */
Matthias Andreas Benkard329168c2021-12-28 01:20:05 +010019public record Metadata(Map<String, Variant> fields) {
Matthias Andreas Benkard4e8423d2021-12-19 22:56:09 +010020
21 private static final Decoder<Metadata> DECODER =
Matthias Andreas Benkard329168c2021-12-28 01:20:05 +010022 Decoder.ofDictionary(Decoder.ofString(StandardCharsets.UTF_8), Decoder.ofVariant())
23 .map(Metadata::new);
Matthias Andreas Benkard4e8423d2021-12-19 22:56:09 +010024
Matthias Andreas Benkard05114642021-12-29 21:51:29 +010025 /**
26 * Acquires a {@link Decoder} for the enclosing type.
27 *
28 * @return a possibly shared {@link Decoder}.
29 */
Matthias Andreas Benkard4e8423d2021-12-19 22:56:09 +010030 public static Decoder<Metadata> decoder() {
31 return DECODER;
32 }
33}