FallbackEnumJsonAdapter(Class<T> enumType, T defaultValue) { this.enumType = enumType; this.defaultValue = defaultValue; try { constants = enumType.getEnumConstants(); nameStrings = new String[constants.length]; for (int i = 0; i < constants.length; i++) { T constant = constants[i]; Json annotation = enumType.getField(constant.name()).getAnnotation(Json.class); String name = annotation != null ? annotation.name() : constant.name(); nameStrings[i] = name; } options = JsonReader.Options.of(nameStrings); } catch (NoSuchFieldException e) { throw new AssertionError(e); } }
@CheckReturnValue public static Options of(String... strings) { try { ByteString[] result = new ByteString[strings.length]; Buffer buffer = new Buffer(); for (int i = 0; i < strings.length; i++) { JsonUtf8Writer.string(buffer, strings[i]); buffer.readByte(); // Skip the leading double quote (but leave the trailing one). result[i] = buffer.readByteString(); } return new Options(strings.clone(), okio.Options.of(result)); } catch (IOException e) { throw new AssertionError(e); } } }
EnumJsonAdapter(Class<T> enumType, @Nullable T fallbackValue, boolean useFallbackValue) { this.enumType = enumType; this.fallbackValue = fallbackValue; this.useFallbackValue = useFallbackValue; try { constants = enumType.getEnumConstants(); nameStrings = new String[constants.length]; for (int i = 0; i < constants.length; i++) { String constantName = constants[i].name(); Json annotation = enumType.getField(constantName).getAnnotation(Json.class); String name = annotation != null ? annotation.name() : constantName; nameStrings[i] = name; } options = JsonReader.Options.of(nameStrings); } catch (NoSuchFieldException e) { throw new AssertionError("Missing field in " + enumType.getName(), e); } }
FallbackEnumJsonAdapter(Class<T> enumType, String fallback) { fallbackConstant = Enum.valueOf(enumType, fallback); this.enumType = enumType; try { constants = enumType.getEnumConstants(); nameStrings = new String[constants.length]; for (int i = 0; i < constants.length; i++) { T constant = constants[i]; Json annotation = enumType.getField(constant.name()).getAnnotation(Json.class); String name = annotation != null ? annotation.name() : constant.name(); nameStrings[i] = name; } options = JsonReader.Options.of(nameStrings); } catch (NoSuchFieldException e) { throw new AssertionError(e); } }
EnumJsonAdapter(Class<T> enumType) { this.enumType = enumType; try { constants = enumType.getEnumConstants(); nameStrings = new String[constants.length]; for (int i = 0; i < constants.length; i++) { T constant = constants[i]; Json annotation = enumType.getField(constant.name()).getAnnotation(Json.class); String name = annotation != null ? annotation.name() : constant.name(); nameStrings[i] = name; } options = JsonReader.Options.of(nameStrings); } catch (NoSuchFieldException e) { throw new AssertionError("Missing field in " + enumType.getName(), e); } }
@CheckReturnValue public static Options of(String... strings) { try { ByteString[] result = new ByteString[strings.length]; Buffer buffer = new Buffer(); for (int i = 0; i < strings.length; i++) { JsonUtf8Writer.string(buffer, strings[i]); buffer.readByte(); // Skip the leading double quote (but leave the trailing one). result[i] = buffer.readByteString(); } return new Options(strings.clone(), okio.Options.of(result)); } catch (IOException e) { throw new AssertionError(e); } } }
ClassJsonAdapter(ClassFactory<T> classFactory, Map<String, FieldBinding<?>> fieldsMap) { this.classFactory = classFactory; this.fieldsArray = fieldsMap.values().toArray(new FieldBinding[fieldsMap.size()]); this.options = JsonReader.Options.of( fieldsMap.keySet().toArray(new String[fieldsMap.size()])); }
PolymorphicJsonAdapter(String labelKey, List<String> labels, List<Type> subtypes, List<JsonAdapter<Object>> jsonAdapters, JsonAdapter<Object> objectJsonAdapter) { this.labelKey = labelKey; this.labels = labels; this.subtypes = subtypes; this.jsonAdapters = jsonAdapters; this.objectJsonAdapter = objectJsonAdapter; this.labelKeyOptions = JsonReader.Options.of(labelKey); this.labelOptions = JsonReader.Options.of(labels.toArray(new String[0])); }
@SuppressWarnings("unchecked") MessageJsonAdapter(Moshi moshi, Type type) { this.messageAdapter = RuntimeMessageAdapter.create((Class<M>) type); this.fieldBindings = messageAdapter.fieldBindings() .values() .toArray(new FieldBinding[messageAdapter.fieldBindings().size()]); String[] names = new String[fieldBindings.length]; for (int i = 0; i < fieldBindings.length; i++) { names[i] = fieldBindings[i].name; } this.options = JsonReader.Options.of(names); jsonAdapters = new JsonAdapter[fieldBindings.length]; for (int i = 0; i < fieldBindings.length; i++) { FieldBinding<M, B> fieldBinding = fieldBindings[i]; Type fieldType = fieldBinding.singleAdapter().javaType; if (fieldBinding.isMap()) { Class<?> keyType = fieldBinding.keyAdapter().javaType; fieldType = Types.newParameterizedType(Map.class, keyType, fieldType); } else if (fieldBinding.label.isRepeated()) { fieldType = Types.newParameterizedType(List.class, fieldType); } Class<? extends Annotation>[] qualifiers = new Class[0]; if (fieldBinding.singleAdapter() == ProtoAdapter.UINT64) { qualifiers = new Class[] {Uint64.class}; } jsonAdapters[i] = moshi.adapter(fieldType, qualifiers); } }
EnumJsonAdapter(Class<T> enumType) { this.enumType = enumType; try { constants = enumType.getEnumConstants(); nameStrings = new String[constants.length]; for (int i = 0; i < constants.length; i++) { T constant = constants[i]; Json annotation = enumType.getField(constant.name()).getAnnotation(Json.class); String name = annotation != null ? annotation.name() : constant.name(); nameStrings[i] = name; } options = JsonReader.Options.of(nameStrings); } catch (NoSuchFieldException e) { throw new AssertionError("Missing field in " + enumType.getName(), e); } }
EnumJsonAdapter(Class<T> enumType, @Nullable T fallbackValue, boolean useFallbackValue) { this.enumType = enumType; this.fallbackValue = fallbackValue; this.useFallbackValue = useFallbackValue; try { constants = enumType.getEnumConstants(); nameStrings = new String[constants.length]; for (int i = 0; i < constants.length; i++) { String constantName = constants[i].name(); Json annotation = enumType.getField(constantName).getAnnotation(Json.class); String name = annotation != null ? annotation.name() : constantName; nameStrings[i] = name; } options = JsonReader.Options.of(nameStrings); } catch (NoSuchFieldException e) { throw new AssertionError("Missing field in " + enumType.getName(), e); } }
PolymorphicJsonAdapter(String labelKey, List<String> labels, List<Type> subtypes, List<JsonAdapter<Object>> jsonAdapters, @Nullable Object defaultValue, boolean defaultValueSet) { this.labelKey = labelKey; this.labels = labels; this.subtypes = subtypes; this.jsonAdapters = jsonAdapters; this.defaultValue = defaultValue; this.defaultValueSet = defaultValueSet; this.labelKeyOptions = JsonReader.Options.of(labelKey); this.labelOptions = JsonReader.Options.of(labels.toArray(new String[0])); }
ClassJsonAdapter(ClassFactory<T> classFactory, Map<String, FieldBinding<?>> fieldsMap) { this.classFactory = classFactory; this.fieldsArray = fieldsMap.values().toArray(new FieldBinding[fieldsMap.size()]); this.options = JsonReader.Options.of( fieldsMap.keySet().toArray(new String[fieldsMap.size()])); }