package uulm.teamname.marvelous.gamelibrary.json; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.InjectableValues; import com.fasterxml.jackson.databind.ObjectMapper; import uulm.teamname.marvelous.gamelibrary.config.CharacterConfig; import uulm.teamname.marvelous.gamelibrary.messages.BasicMessage; import uulm.teamname.marvelous.gamelibrary.messages.EventMessage; /** * Class that contains JSON encoding and decoding. It is initiated with the Character configuration. */ public class JSON { private final ObjectMapper mapper = new ObjectMapper(); public JSON (CharacterConfig config) { // add the config to the mappers InjectableValues, where it is later accessed by the EntityDeserializer this.mapper.setInjectableValues(new InjectableValues .Std() .addValue("CharacterConfig", config)); } /** Deserializes an incoming network message into a {@link EventMessage}. * @param input The JSON to deserialize * @return The parsed message or {@code null} if the deserialization failed */ public EventMessage parse(String input) { EventMessage result = null; try { return mapper.readValue(input, EventMessage.class); } catch (JsonProcessingException e) { e.printStackTrace(); return null; } } /** Serializes a {@link EventMessage} into a JSON string. * @param input The message to serialize * @return The message as JSON or {@code null} if the serialization failed */ public String stringify(BasicMessage input) { try { return mapper.writeValueAsString(input); } catch (JsonProcessingException e) { e.printStackTrace(); return null; } } }