Lua serializer & deserializer optimization
This commit is contained in:
parent
a136183d18
commit
b1bf37bb7e
4
pom.xml
4
pom.xml
@ -16,8 +16,8 @@
|
||||
<packaging>jar</packaging>
|
||||
|
||||
<properties>
|
||||
<maven.compiler.source>1.8</maven.compiler.source>
|
||||
<maven.compiler.target>1.8</maven.compiler.target>
|
||||
<maven.compiler.source>14</maven.compiler.source>
|
||||
<maven.compiler.target>14</maven.compiler.target>
|
||||
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
||||
</properties>
|
||||
|
||||
|
@ -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> T deserialize(LuaTable table, Class<T> obj) {
|
||||
try {
|
||||
List<String> 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;
|
||||
}
|
||||
} */
|
||||
}
|
||||
|
@ -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<Player> 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<String, Object> 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:
|
||||
|
Loading…
x
Reference in New Issue
Block a user