-
Notifications
You must be signed in to change notification settings - Fork 13
Description
The case is: we want to create a copy of the default mapper and add some custom converters there. But we don't want to affect all existing converter stack. For example - I want to create a method that converts all Integers to Strings for some specific space..
We can't reuse a custom MessagePackMapper
right now.
cartridge-java/src/main/java/io/tarantool/driver/mappers/DefaultMessagePackMapper.java
Lines 293 to 296 in 5ed7e3e
@Override | |
public MessagePackMapper copy() { | |
return new DefaultMessagePackMapper(this); | |
} |
cartridge-java/src/main/java/io/tarantool/driver/mappers/DefaultMessagePackMapper.java
Lines 43 to 53 in 5ed7e3e
/** | |
* Copying constructor | |
* @param mapper another mapper instance | |
*/ | |
public DefaultMessagePackMapper(DefaultMessagePackMapper mapper) { | |
this(); | |
this.valueConverters.putAll(mapper.valueConverters); | |
this.objectConverters.putAll(mapper.objectConverters); | |
this.valueConvertersByTarget.putAll(mapper.valueConvertersByTarget); | |
this.objectConvertersByTarget.putAll(mapper.objectConvertersByTarget); | |
} |
cartridge-java/src/main/java/io/tarantool/driver/mappers/DefaultMessagePackMapper.java
Lines 27 to 31 in 5ed7e3e
private final Map<String, List<ValueConverter<? extends Value, ?>>> valueConverters; | |
private final Map<String, List<ObjectConverter<?, ? extends Value>>> objectConverters; | |
private final Map<String, ValueConverter<? extends Value, ?>> valueConvertersByTarget; | |
private final Map<String, ObjectConverter<?, ? extends Value>> objectConvertersByTarget; | |
private final ObjectConverter<Object, NilValue> nilConverter = new DefaultNilConverter(); |
tarantoolClient.getConfig().getMessagePackMapper().copy();
Deepcopy is not used here, so copying does not make sense. It only copies the surface layer:
if there was an entry in tarantoolClient.getConfig().getMessagePackMapper()
in Map<String, List<ValueConverter<? extends Value, ?>>> valueConverters;
with the key org.msgpack.value.ArrayValue
, then the copied list List<ValueConverter<? extends Value, ?>
will be the same for all copied configs, and when registering a new converter for the copied config, it will appear for the original one as well.
For details see these comments' threads:
tarantool/cartridge-springdata#80 (comment)
tarantool/cartridge-springdata#80 (comment)
tarantool/cartridge-springdata#80 (comment)