code: public synchronized void setupCustomCommandSerializationAndDeserialization(CommandSerializer commandSerializer, CommandDeserializer commandDeserializer) {
          checkState(!running);
          checkState(!initialized);
          checkState(!setupConversion);
  
          jdbcLog.setupCustomCommandSerializerAndDeserializer(commandSerializer, commandDeserializer);
          RaftRPC.setupCustomCommandSerializationAndDeserialization(mapper, commandSerializer, commandDeserializer);
  
          setupConversion = true;
      }
docs: Setup custom serialization and deserialization for POJO {@link Command} objects.
  This method should <strong>only</strong> be called once.
  
  @param commandSerializer {@code CommandSerializer} that can serialize a POJO {@code Command} into binary
  @param commandDeserializer {@code CommandDeserializer} that can deserialize binary into a {@code Command} POJO
  @throws IllegalStateException if this method is called multiple times
  
  @see RaftRPC#setupCustomCommandSerializationAndDeserialization(ObjectMapper, CommandSerializer, CommandDeserializer)