diff --git a/pom.xml b/pom.xml
index 3072d3b..6ba0a6d 100644
--- a/pom.xml
+++ b/pom.xml
@@ -16,8 +16,8 @@
jar
- 1.8
- 1.8
+ 14
+ 14
UTF-8
diff --git a/src/main/java/com/alterdekim/javabot/util/LuaDeserializer.java b/src/main/java/com/alterdekim/javabot/util/LuaDeserializer.java
index f0ec8e9..91fdeee 100644
--- a/src/main/java/com/alterdekim/javabot/util/LuaDeserializer.java
+++ b/src/main/java/com/alterdekim/javabot/util/LuaDeserializer.java
@@ -7,6 +7,7 @@ import lombok.extern.slf4j.Slf4j;
import org.luaj.vm2.LuaTable;
import org.luaj.vm2.LuaValue;
+import java.lang.reflect.Field;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
@@ -20,6 +21,39 @@ public class LuaDeserializer {
.collect(Collectors.toList());
}
+ private static T deserialize(LuaTable table, Class obj) {
+ try {
+ List keys = Arrays.stream(table.keys())
+ .map(LuaValue::checkjstring)
+ .collect(Collectors.toList());
+ T result = obj.getDeclaredConstructor().newInstance();
+ Arrays.stream(obj.getDeclaredFields())
+ .filter(f -> keys.contains(f.getName()))
+ .forEach(f -> {
+ try {
+ f.setAccessible(true);
+ f.set(result, checkObject(f, table.get(f.getName())));
+ } catch (IllegalAccessException e) {
+ log.error(e.getMessage());
+ }
+ });
+ return result;
+ } catch (Exception e) {
+ log.error(e.getMessage());
+ }
+ return null;
+ }
+
+ private static Object checkObject(Field f, LuaValue val) {
+ return switch(f.getType().getCanonicalName()) {
+ case "java.lang.Boolean" -> val.checkboolean();
+ case "java.lang.Long" -> val.checklong();
+ case "java.lang.Float", "java.lang.Double" -> val.checkdouble();
+ case "java.lang.Integer" -> val.checkint();
+ default -> null;
+ };
+ }
+
private static Player deserializePlayer(LuaTable table) {
int age = table.get("age").checkint();
Player p = new Player(table.get("telegramId").checklong(), table.get("firstName").checkjstring());
@@ -28,16 +62,24 @@ public class LuaDeserializer {
p.setIsVoted(table.get("isVoted").checkboolean());
p.setScriptMessageId(table.get("scriptMessageId").checkint());
- p.setGender(deserializeGender(table.get("gender").checktable()));
+ p.setGender(deserialize(table.get("gender").checktable(), Bio.class));
+ p.setHealth(deserialize(table.get("health").checktable(), Health.class));
+ p.setHobby(deserialize(table.get("hobby").checktable(), Hobby.class));
+ p.setWork(deserialize(table.get("work").checktable(), Work.class));
+ p.setLuggage(deserialize(table.get("luggage").checktable(), Luggage.class));
+ p.setInfoSections(deserialize(table.get("infoSections").checktable(), InfoSections.class));
+
+ /*p.setGender(deserializeGender(table.get("gender").checktable()));
p.setHealth(deserializeHealth(table.get("health").checktable()));
p.setHobby(deserializeHobby(table.get("hobby").checktable()));
p.setWork(deserializeWork(table.get("work").checktable()));
p.setLuggage(deserializeLuggage(table.get("luggage").checktable()));
- p.setInfoSections(deserializeInfoSections(table.get("infoSections").checktable()));
+ p.setInfoSections(deserializeInfoSections(table.get("infoSections").checktable()));*/
return p;
}
+ /*
private static InfoSections deserializeInfoSections(LuaTable table) {
InfoSections infoSections = new InfoSections();
infoSections.setIsGenderShowed(table.get("isGenderShowed").checkboolean());
@@ -103,5 +145,5 @@ public class LuaDeserializer {
bio.setIsMale(table.get("isMale").checkboolean());
bio.setIsFemale(table.get("isFemale").checkboolean());
return bio;
- }
+ } */
}
diff --git a/src/main/java/com/alterdekim/javabot/util/LuaSerializer.java b/src/main/java/com/alterdekim/javabot/util/LuaSerializer.java
index 3389e1e..cffd518 100644
--- a/src/main/java/com/alterdekim/javabot/util/LuaSerializer.java
+++ b/src/main/java/com/alterdekim/javabot/util/LuaSerializer.java
@@ -1,6 +1,5 @@
package com.alterdekim.javabot.util;
-import com.alterdekim.javabot.bot.Player;
import lombok.extern.slf4j.Slf4j;
import org.luaj.vm2.LuaTable;
import org.luaj.vm2.LuaValue;
@@ -17,12 +16,6 @@ import java.util.stream.IntStream;
@Slf4j
public class LuaSerializer {
- /* public static LuaTable serializeObjectList(List list) {
- LuaTable table = new LuaTable();
- IntStream.range(0, list.size()).forEach(i -> table.set(i, serializeObject(list.get(i))));
- return table;
- }*/
-
public static LuaTable serializeObjectList(List> list) {
LuaTable table = new LuaTable();
IntStream.range(0, list.size()).forEach(i -> table.set(i, serializeObject(list.get(i))));
@@ -31,15 +24,17 @@ public class LuaSerializer {
public static LuaValue serializeObject(Object o) {
Map map = new HashMap<>();
- getPrivateFields(o.getClass()).stream()
+ getPrivateFields(o.getClass())
.forEach(f -> {
try {
f.setAccessible(true);
String type_name = ((Class) f.getType()).getName();
String name = f.getName();
switch (type_name) {
- case "java.lang.Long":
- map.put(name, ((Long) f.get(o)).longValue());
+ case "java.lang.Long", "java.lang.Integer",
+ "java.lang.Float", "java.lang.Double",
+ "java.lang.Boolean", "java.lang.String":
+ map.put(name, f.get(o));
break;
case "long":
map.put(name, f.getLong(o));
@@ -47,30 +42,15 @@ public class LuaSerializer {
case "int":
map.put(name, f.getInt(o));
break;
- case "java.lang.Integer":
- map.put(name, ((Integer) f.get(o)).intValue());
- break;
case "float":
map.put(name, f.getFloat(o));
break;
- case "java.lang.Float":
- map.put(name, ((Float) f.get(o)).floatValue());
- break;
case "double":
map.put(name, f.getDouble(o));
break;
- case "java.lang.Double":
- map.put(name, ((Double) f.get(o)).doubleValue());
- break;
case "boolean":
map.put(name, f.getBoolean(o));
break;
- case "java.lang.Boolean":
- map.put(name, ((Boolean) f.get(o)).booleanValue());
- break;
- case "java.lang.String":
- map.put(name, (String) f.get(o));
- break;
case "java.util.List":
break;
default: