/* * Decompiled with CFR 0.152. * * Could not load the following classes: * javax.annotation.Nullable */ package de.maxhenkel.voicechat.configbuilder.custom.serializer; import de.maxhenkel.voicechat.configbuilder.custom.StringMap; import de.maxhenkel.voicechat.configbuilder.entry.serializer.ValueSerializer; import java.util.ArrayList; import java.util.LinkedHashMap; import java.util.Map; import java.util.regex.Matcher; import java.util.regex.Pattern; import javax.annotation.Nullable; public class StringMapValueSerializer implements ValueSerializer { public static final StringMapValueSerializer INSTANCE = new StringMapValueSerializer(); public static final Pattern QUOTE_ESCAPE_PATTERN = Pattern.compile("\"((?:(?![\"\\\\]).|\\\\.)*)\"\\s*=\\s*\"((?:(?![\"\\\\]).|\\\\.)*)\""); @Override @Nullable public StringMap deserialize(String str) { boolean matches = QUOTE_ESCAPE_PATTERN.splitAsStream(str).allMatch(s -> s.trim().isEmpty() || s.trim().equals(",")); if (!matches) { return null; } LinkedHashMap map = new LinkedHashMap(); Matcher matcher = QUOTE_ESCAPE_PATTERN.matcher(str); while (matcher.find()) { map.put(StringMapValueSerializer.unescape(matcher.group(1)), StringMapValueSerializer.unescape(matcher.group(2))); } return StringMap.of(map); } @Override public String serialize(StringMap val) { ArrayList resultList = new ArrayList(val.size()); for (Map.Entry entry : val.entrySet()) { resultList.add("\"" + StringMapValueSerializer.escape((String)entry.getKey()) + "\"=\"" + StringMapValueSerializer.escape((String)entry.getValue()) + "\""); } return String.join((CharSequence)",", resultList); } private static String escape(String input) { return input.replace("\\", "\\\\").replace("\"", "\\\""); } private static String unescape(String input) { return input.replace("\\\"", "\"").replace("\\\\", "\\"); } }