blob: f485be11d39046b6c9dca86e4900a11c5b20fc1e [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
Matthias Andreas Benkard91dbd742022-10-17 19:38:56 +02007import static java.nio.charset.StandardCharsets.UTF_8;
8
Matthias Andreas Benkard4e8423d2021-12-19 22:56:09 +01009import eu.mulk.jgvariant.core.Decoder;
10import eu.mulk.jgvariant.core.Variant;
Matthias Andreas Benkard329168c2021-12-28 01:20:05 +010011import java.util.Map;
Matthias Andreas Benkard4e8423d2021-12-19 22:56:09 +010012
13/**
Matthias Andreas Benkard05114642021-12-29 21:51:29 +010014 * A wrapper for a set of metadata fields.
Matthias Andreas Benkard4e8423d2021-12-19 22:56:09 +010015 *
16 * <p>Reference: (embedded in other data types)
Matthias Andreas Benkard05114642021-12-29 21:51:29 +010017 *
18 * @param fields a set of metadata fields indexed by name.
Matthias Andreas Benkard4e8423d2021-12-19 22:56:09 +010019 */
Matthias Andreas Benkard329168c2021-12-28 01:20:05 +010020public record Metadata(Map<String, Variant> fields) {
Matthias Andreas Benkard4e8423d2021-12-19 22:56:09 +010021
22 private static final Decoder<Metadata> DECODER =
Matthias Andreas Benkardaa11d822023-12-10 09:20:48 +010023 Decoder.ofDictionary(Decoder.ofString(UTF_8), Decoder.ofVariant())
24 .map(Metadata::new, Metadata::fields);
Matthias Andreas Benkard4e8423d2021-12-19 22:56:09 +010025
Matthias Andreas Benkard05114642021-12-29 21:51:29 +010026 /**
27 * Acquires a {@link Decoder} for the enclosing type.
28 *
29 * @return a possibly shared {@link Decoder}.
30 */
Matthias Andreas Benkard4e8423d2021-12-19 22:56:09 +010031 public static Decoder<Metadata> decoder() {
32 return DECODER;
33 }
34}