44import com .google .gson .JsonElement ;
55import com .google .gson .JsonObject ;
66import net .minecraft .util .ResourceLocation ;
7+ import rml .deserializer .struct .std .StructArray ;
8+ import rml .deserializer .struct .std .StructElement ;
9+ import rml .deserializer .struct .std .StructObject ;
710import rml .jrx .announces .EarlyClass ;
811import rml .jrx .announces .PublicAPI ;
912import rml .jrx .utils .ClassHelper ;
@@ -81,15 +84,15 @@ public <T> AbstractDeserializer<T> addDefaultEntry(AbstractDeserializer<T> abst
8184 *
8285 * @throws JsonDeserializeException the exception. Error format? Unexpected context?
8386 */
84- public <T > T decode (Class <T > clazz , JsonElement jsonElement ) throws JsonDeserializeException {
87+ public <T > T decode (Class <T > clazz , StructElement jsonElement ) throws JsonDeserializeException {
8588 ClassHelper .forceInitAll (clazz );
8689 clazz = DeserializerBuilder .avoidPrimitive (clazz );
8790
8891 try {
8992 if (clazz .isArray ()){
9093 Class <?> clazzComponentType = clazz .getComponentType ();
91- if (jsonElement .isJsonArray ()){
92- JsonArray array = jsonElement .getAsJsonArray ();
94+ if (jsonElement .isArray ()){
95+ StructArray array = jsonElement .getAsArray ();
9396 Object arrayToReturn = Array .newInstance (clazzComponentType , array .size ());
9497 for (int index = 0 ; index < array .size () ; index ++){
9598 Array .set (arrayToReturn , index , decode (clazzComponentType , array .get (index )));
@@ -101,9 +104,9 @@ public <T> T decode(Class<T> clazz, JsonElement jsonElement) throws JsonDeserial
101104 return clazz .cast (arrayToReturn );
102105 }
103106 } else {
104- if (jsonElement .isJsonObject ()){
105- JsonObject jsonObject = jsonElement .getAsJsonObject ();
106- if (jsonObject .has ("type" )){
107+ if (jsonElement .isObject ()){
108+ StructObject jsonObject = jsonElement .getAsObject ();
109+ if (jsonObject .containsKey ("type" )){
107110 ResourceLocation decoderName = parseLocation (jsonObject .get ("type" ).getAsString ());
108111 if (!registry .containsKey (clazz )) throw new JsonDeserializeException (jsonObject , "Deserializer for " + clazz +" , is not registered." );
109112 HashMap <ResourceLocation , AbstractDeserializer <?>> typedRegistry = registry .get (clazz );
@@ -131,7 +134,7 @@ public <T> T decode(Class<T> clazz, JsonElement jsonElement) throws JsonDeserial
131134 }
132135
133136
134- public <T > T decodeSilently (Class <T > clazz , JsonElement jsonElement ){
137+ public <T > T decodeSilently (Class <T > clazz , StructElement jsonElement ){
135138 JsonDeserializeException exception = null ;
136139 try {
137140 return decode (clazz , jsonElement );
@@ -160,20 +163,19 @@ public DeserializerManager(String defaultDomain){
160163 public DeserializerManager (String defaultDomain , Consumer <DeserializerManager > consumer ){
161164 this .defaultDomain = defaultDomain ;
162165 ResourceLocation GSON = new ResourceLocation ("google" , "primitive" );
163- this .addDefaultEntry (new AbstractDeserializer <>(GSON , Integer .class , AbstractDeserializer .safeRun (JsonElement :: getAsInt )));
164- this .addDefaultEntry (new AbstractDeserializer <>(GSON , Float .class , AbstractDeserializer .safeRun (JsonElement ::getAsFloat )));
165- this .addDefaultEntry (new AbstractDeserializer <>(GSON , Double .class , AbstractDeserializer .safeRun (JsonElement ::getAsDouble )));
166- this .addDefaultEntry (new AbstractDeserializer <>(GSON , Long .class , AbstractDeserializer .safeRun (JsonElement ::getAsLong )));
167- this .addDefaultEntry (new AbstractDeserializer <>(GSON , Character .class , AbstractDeserializer .safeRun (JsonElement ::getAsCharacter )));
168- this .addDefaultEntry (new AbstractDeserializer <>(GSON , Byte .class , AbstractDeserializer .safeRun (JsonElement ::getAsByte )));
169- this .addDefaultEntry (new AbstractDeserializer <>(GSON , String .class , AbstractDeserializer .safeRun (JsonElement ::getAsString )));
170- this .addDefaultEntry (new AbstractDeserializer <>(GSON , Boolean .class , AbstractDeserializer .safeRun (JsonElement ::getAsBoolean )));
171- this .addDefaultEntry (new AbstractDeserializer <>(GSON , Short .class , AbstractDeserializer .safeRun (JsonElement ::getAsShort )));
172- this .addDefaultEntry (new AbstractDeserializer <>(GSON , BigInteger .class , AbstractDeserializer .safeRun (JsonElement ::getAsBigInteger )));
173- this .addDefaultEntry (new AbstractDeserializer <>(GSON , BigDecimal .class , AbstractDeserializer .safeRun (JsonElement ::getAsBigDecimal )));
174- this .addDefaultEntry (new AbstractDeserializer <>(GSON , Number .class , AbstractDeserializer .safeRun (JsonElement :: getAsNumber )));
166+ this .addDefaultEntry (new AbstractDeserializer <>(GSON , Integer .class , AbstractDeserializer .safeRun (StructElement :: getAsInteger )));
167+ this .addDefaultEntry (new AbstractDeserializer <>(GSON , Float .class , AbstractDeserializer .safeRun (StructElement ::getAsFloat )));
168+ this .addDefaultEntry (new AbstractDeserializer <>(GSON , Double .class , AbstractDeserializer .safeRun (StructElement ::getAsDouble )));
169+ this .addDefaultEntry (new AbstractDeserializer <>(GSON , Long .class , AbstractDeserializer .safeRun (StructElement ::getAsLong )));
170+ this .addDefaultEntry (new AbstractDeserializer <>(GSON , Character .class , AbstractDeserializer .safeRun (StructElement ::getAsCharacter )));
171+ this .addDefaultEntry (new AbstractDeserializer <>(GSON , Byte .class , AbstractDeserializer .safeRun (StructElement ::getAsByte )));
172+ this .addDefaultEntry (new AbstractDeserializer <>(GSON , String .class , AbstractDeserializer .safeRun (StructElement ::getAsString )));
173+ this .addDefaultEntry (new AbstractDeserializer <>(GSON , Boolean .class , AbstractDeserializer .safeRun (StructElement ::getAsBoolean )));
174+ this .addDefaultEntry (new AbstractDeserializer <>(GSON , Short .class , AbstractDeserializer .safeRun (StructElement ::getAsShort )));
175+ this .addDefaultEntry (new AbstractDeserializer <>(GSON , BigInteger .class , AbstractDeserializer .safeRun (StructElement ::getAsBigInteger )));
176+ this .addDefaultEntry (new AbstractDeserializer <>(GSON , BigDecimal .class , AbstractDeserializer .safeRun (StructElement ::getAsBigDecimal )));
177+ this .addDefaultEntry (new AbstractDeserializer <>(GSON , Number .class , AbstractDeserializer .safeRun (( number )-> number . getAsNumber (). castToNumber () )));
175178 this .addDefaultEntry (new AbstractDeserializer <>(GSON , Void .class , AbstractDeserializer .safeRun ((jsonElement )->null )));
176- this .addDefaultEntry (new AbstractDeserializer <>(GSON , JsonObject .class , AbstractDeserializer .safeRun (JsonElement ::getAsJsonObject )));
177179 consumer .accept (this );
178180 }
179181
@@ -203,15 +205,15 @@ public <T, F> AbstractDeserializer<T> map(final Class<T> tClass, final Class<F>
203205 return new AbstractDeserializer <T >(resourceLocation , tClass , jsonElement -> function .apply (DeserializerManager .this .decode (fClass , jsonElement )));
204206 }
205207
206- public static JsonElement getFromPath (JsonObject jsonObject , String path ){
208+ public static StructElement getFromPath (StructObject jsonObject , String path ){
207209 int i = path .indexOf ('.' );
208210 if (i == -1 ){
209211 return jsonObject .get (path );
210212 }else {
211213 String first = path .substring (0 , i -1 );
212- JsonElement element1 = jsonObject .get (first );
213- if (element1 instanceof JsonObject ){
214- return getFromPath (( JsonObject ) element1 , path .substring (i +1 ));
214+ StructElement element1 = jsonObject .get (first );
215+ if (element1 . isObject () ){
216+ return getFromPath (element1 . getAsObject () , path .substring (i +1 ));
215217 }else return null ;
216218 }
217219 }
0 commit comments