Is it possible to inject a serializer? For exampl...
# serialization
p
Is it possible to inject a serializer? For example I have a data class in my gradle module
x
. It has a
UUID
and the
KSerializer<UUID>
lives in gradle module
y
. My module
x
doesn't know anything about my module
y
. Now I would like to inject that UUIDSerializer instance. Is that possible?
t
ther is no difference bettween a serializer and any other object...
p
Well there is because the compiler complains that no serializer for UUID can be found
t
no, there's not. if you decalre an object in modul X and you do not import module X then you cannot access that module, obviously
s
Inject into what ?
p
Into the serializer
Using moshi I would let module y provide an adapter to my app module and then module x would receive a JsonAdapter<UUID> I would then use
t
you need a way to access that object. if you cannot access it, you're lost. of course you could introtude module m which depends on x and y and to the injection there
p
And is it normal, that the functions create serializers each time?
Copy code
output.encodeSerializableElement(serialDesc, 0, (KSerializer)UUIDSerializer.INSTANCE, self.id);
      output.encodeStringElement(serialDesc, 1, self.name);
      output.encodeBooleanElement(serialDesc, 2, self.isYazioRecipe);
      output.encodeSerializableElement(serialDesc, 3, new LinkedHashMapSerializer(new EnumSerializer(Reflection.getOrCreateKotlinClass(Nutrient.class)), (KSerializer)DoubleSerializer.INSTANCE), self.nutrients);
      output.encodeSerializableElement(serialDesc, 4, new LinkedHashMapSerializer(new EnumSerializer(Reflection.getOrCreateKotlinClass(Mineral.class)), (KSerializer)DoubleSerializer.INSTANCE), self.minerals);
      output.encodeSerializableElement(serialDesc, 5, new LinkedHashMapSerializer(new EnumSerializer(Reflection.getOrCreateKotlinClass(Vitamin.class)), (KSerializer)DoubleSerializer.INSTANCE), self.vitamins);
      output.encodeSerializableElement(serialDesc, 6, new LinkedHashMapSerializer(new EnumSerializer(Reflection.getOrCreateKotlinClass(NutritionalValue.class)), (KSerializer)DoubleSerializer.INSTANCE), self.nutritionals);
      output.encodeNullableSerializableElement(serialDesc, 7, (KSerializer)StringSerializer.INSTANCE, self.imageUrl);
      output.encodeIntElement(serialDesc, 8, self.portionCount);
      output.encodeSerializableElement(serialDesc, 9, new ArrayListSerializer((KSerializer)com.yazio.android.recipedata.RecipeServing..serializer.INSTANCE), self.servings);
      output.encodeNullableSerializableElement(serialDesc, 10, (KSerializer)StringSerializer.INSTANCE, self.description);
      output.encodeSerializableElement(serialDesc, 11, new ArrayListSerializer((KSerializer)StringSerializer.INSTANCE), self.instructions);
      output.encodeSerializableElement(serialDesc, 12, new ArrayListSerializer(new EnumSerializer(Reflection.getOrCreateKotlinClass(RecipeTag.class))), self.tags);
      output.encodeIntElement(serialDesc, 13, self.preparationTimeInMinutes);
      output.encodeSerializableElement(serialDesc, 14, new EnumSerializer(Reflection.getOrCreateKotlinClass(RecipeDifficulty.class)), self.difficulty);