Skip to content

Commit

Permalink
Simplify code, update to new multification version.
Browse files Browse the repository at this point in the history
  • Loading branch information
vLuckyyy committed Jun 29, 2024
1 parent 215f6dd commit 63a4f51
Show file tree
Hide file tree
Showing 10 changed files with 81 additions and 311 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
import com.eternalcode.multification.notice.NoticeKey;
import com.eternalcode.multification.notice.resolver.NoticeResolverRegistry;
import com.eternalcode.multification.notice.resolver.NoticeSerdesResult;
import com.eternalcode.multification.notice.resolver.NoticeSerdesResult.Multiple;
import com.eternalcode.multification.notice.resolver.chat.ChatContent;

import com.eternalcode.multification.notice.NoticePart;
Expand Down Expand Up @@ -97,8 +98,8 @@ private Result<Element<?>, Exception> serializeAll(SerializeContext context) {
continue;
}

if (result instanceof NoticeSerdesResult.Multi multi) {
section.append(toSection(key, context.description, multi.elements()));
if (result instanceof Multiple multiple) {
section.append(toSection(key, context.description, multiple.elements()));
continue;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ public List<String> anyElements() {
}
}

record Multi(List<String> elements) implements NoticeSerdesResult {
record Multiple(List<String> elements) implements NoticeSerdesResult {
@Override
public List<String> anyElements() {
return elements;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

import com.eternalcode.multification.notice.NoticeKey;
import com.eternalcode.multification.notice.resolver.NoticeSerdesResult;
import com.eternalcode.multification.notice.resolver.NoticeSerdesResult.Multiple;
import com.eternalcode.multification.notice.resolver.text.TextContentResolver;
import java.util.List;
import java.util.Optional;
Expand Down Expand Up @@ -50,7 +51,7 @@ public NoticeSerdesResult serialize(ChatContent content) {
return new NoticeSerdesResult.Single(messages.get(0));
}

return new NoticeSerdesResult.Multi(messages);
return new Multiple(messages);
}

@Override
Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -2,42 +2,32 @@

import com.eternalcode.multification.notice.Notice;
import com.eternalcode.multification.notice.Notice.Builder;
import com.eternalcode.multification.notice.NoticeContent.Music;
import com.eternalcode.multification.notice.NoticeContent.None;
import com.eternalcode.multification.notice.NoticeContent.Text;
import com.eternalcode.multification.notice.NoticeContent.Times;
import com.eternalcode.multification.notice.NoticeKey;
import com.eternalcode.multification.notice.NoticePart;
import com.eternalcode.multification.notice.NoticeType;
import com.eternalcode.multification.notice.resolver.NoticeContent;
import com.eternalcode.multification.notice.resolver.NoticeDeserializeResult;
import com.eternalcode.multification.notice.resolver.NoticeResolverRegistry;
import com.eternalcode.multification.notice.resolver.NoticeSerdesResult;
import com.eternalcode.multification.notice.resolver.NoticeSerdesResult.Multiple;
import com.eternalcode.multification.notice.resolver.NoticeSerdesResult.Single;
import com.eternalcode.multification.notice.resolver.chat.ChatContent;
import eu.okaeri.configs.schema.GenericsDeclaration;
import eu.okaeri.configs.serdes.DeserializationData;
import eu.okaeri.configs.serdes.ObjectSerializer;
import eu.okaeri.configs.serdes.SerializationData;
import java.util.Collections;
import java.util.List;
import java.util.Set;
import org.jetbrains.annotations.ApiStatus.Experimental;
import org.jetbrains.annotations.NotNull;

@Experimental
public class MultificationNoticeSerializer implements ObjectSerializer<Notice> {

private static final int SINGLE_SERIALIZE_DESERIALIZE_PART = 1;

private static boolean serializeSingleChat(SerializationData data, NoticePart<?> part) {
if (part.type() == NoticeType.CHAT) {
Text text = (Text) part.content();
List<String> messages = text.messages();
private final NoticeResolverRegistry noticeRegistry;

if (messages.size() == SINGLE_SERIALIZE_DESERIALIZE_PART) {
data.setValue(messages.get(0));
return true;
}

data.setValue(messages);
return true;
}

return false;
public MultificationNoticeSerializer(NoticeResolverRegistry noticeRegistry) {
this.noticeRegistry = noticeRegistry;
}

@Override
Expand All @@ -49,92 +39,104 @@ public boolean supports(@NotNull Class<? super Notice> type) {
public void serialize(Notice notice, @NotNull SerializationData data, @NotNull GenericsDeclaration generics) {
List<NoticePart<?>> parts = notice.parts();

if (parts.size() == SINGLE_SERIALIZE_DESERIALIZE_PART) {
NoticePart<?> part = parts.get(0);
boolean isChatBeautifulSerialized = trySerializeChatBeautiful(data, notice);

if (serializeSingleChat(data, part)) {
return;
}
if (isChatBeautifulSerialized) {
return;
}

for (NoticePart<?> part : parts) {
String key = part.type().getKey();
NoticeSerdesResult result = this.noticeRegistry.serialize(part);

if (part.content() instanceof Text text) {
List<String> messages = text.messages();
data.add(key, messages);
if (result instanceof NoticeSerdesResult.Single single) {
data.add(part.noticeKey().key(), single.element());
continue;
}

if (part.content() instanceof Times times) {
data.add(key, times);
continue;
}

if (part.content() instanceof None none) {
data.add(key, none);
continue;
}

if (part.content() instanceof Music music) {
data.add(key, music);
if (result instanceof Multiple multiple) {
data.add(part.noticeKey().key(), multiple.elements());
}
}
}

@Override
public Notice deserialize(DeserializationData data, @NotNull GenericsDeclaration generics) {

Builder builder = Notice.builder();

Set<String> keys = data.asMap().keySet();

if (keys.size() == SINGLE_SERIALIZE_DESERIALIZE_PART && data.isValue()) {
if (data.isValue()) {
Object value = data.getValueRaw();

if (value instanceof String stringValue) {
List<String> messages = Collections.singletonList(stringValue);
builder.withPart(new NoticePart<>(NoticeType.CHAT, new Text(messages)));
builder.withPart(NoticeKey.CHAT, new ChatContent(messages));
}

if (value instanceof List) {
List<String> messages = data.getValueAsList(String.class);
builder.withPart(new NoticePart<>(NoticeType.CHAT, new Text(messages)));
builder.withPart(NoticeKey.CHAT, new ChatContent(messages));
}

return builder.build();
}

Set<String> keys = data.asMap().keySet();

for (String key : keys) {
Object value = data.getRaw(key);

NoticeType noticeType = NoticeType.fromKey(key);
if (value instanceof String stringValue) {
NoticeDeserializeResult<?> noticeResult = this.noticeRegistry.deserialize(key, new Single(stringValue))
.orElseThrow(() -> new UnsupportedOperationException(
"Unsupported notice key: " + key + " with value: " + stringValue));

if (noticeType.contentType() == Text.class) {
builder.withPart(new NoticePart<>(noticeType, new Text((List<String>) value)));
this.withPart(builder, noticeResult);
continue;
}

if (noticeType.contentType() == Times.class) {
Times times = data.get(key, Times.class);
builder.withPart(new NoticePart<>(noticeType, times));
continue;
}
if (value instanceof List) {
List<String> messages = data.getAsList(key, String.class);

if (noticeType.contentType() == Music.class) {
Music music = data.get(key, Music.class);
builder.withPart(new NoticePart<>(noticeType, music));
continue;
}
NoticeDeserializeResult<?> noticeResult = this.noticeRegistry.deserialize(key, new Multiple(messages))
.orElseThrow(() -> new UnsupportedOperationException(
"Unsupported notice key: " + key + " with values: " + messages));

if (noticeType.contentType() == None.class) {
builder.withPart(new NoticePart<>(noticeType, None.INSTANCE));
this.withPart(builder, noticeResult);
continue;
}

throw new UnsupportedOperationException("Unsupported notice type: " + noticeType);
throw new UnsupportedOperationException(
"Unsupported notice type: " + value.getClass() + " for key: " + key);
}

return builder.build();
}

private <T extends NoticeContent> void withPart(Builder builder, NoticeDeserializeResult<T> noticeResult) {
builder.withPart(noticeResult.noticeKey(), noticeResult.content());
}

private static boolean trySerializeChatBeautiful(SerializationData data, Notice notice) {
List<NoticePart<?>> parts = notice.parts();

if (parts.size() != 1) {
return false;
}

NoticePart<?> part = parts.get(0);

if (part.noticeKey() != NoticeKey.CHAT) {
return false;
}

ChatContent chat = (ChatContent) part.content();
List<String> messages = chat.contents();

if (messages.size() == SINGLE_SERIALIZE_DESERIALIZE_PART) {
data.setValue(messages.get(0));
return true;
}

data.setValue(messages);
return true;
}
}
Original file line number Diff line number Diff line change
@@ -1,15 +1,20 @@
package com.eternalcode.multification.okaeri;
import com.eternalcode.multification.notice.resolver.NoticeResolverRegistry;
import eu.okaeri.configs.serdes.OkaeriSerdesPack;
import eu.okaeri.configs.serdes.SerdesRegistry;
import org.jetbrains.annotations.ApiStatus.Experimental;
import org.jetbrains.annotations.NotNull;

@Experimental
public class MultificationSerdesPack implements OkaeriSerdesPack {

private final NoticeResolverRegistry noticeRegistry;

public MultificationSerdesPack(NoticeResolverRegistry noticeRegistry) {
this.noticeRegistry = noticeRegistry;
}

@Override
public void register(@NotNull SerdesRegistry registry) {
registry.register(new MultificationTimesTransformer());
registry.register(new MultificationMusicTransformer());
registry.register(new MultificationNoticeSerializer());
registry.register(new MultificationNoticeSerializer(this.noticeRegistry));
}
}

This file was deleted.

Loading

0 comments on commit 63a4f51

Please sign in to comment.