class GenericSerdeFactory {

  @SuppressWarnings("MethodMayBeStatic") // Part of injected API
  <T> Serde<T> wrapInLoggingSerde(
      final Serde<T> formatSerde,
      final String loggerNamePrefix,
      final ProcessingLogContext processingLogContext
  ) {
    final ProcessingLogger serializerProcessingLogger = processingLogContext.getLoggerFactory()
        .getLogger(join(loggerNamePrefix, SERIALIZER_LOGGER_NAME));
    final ProcessingLogger deserializerProcessingLogger = processingLogContext.getLoggerFactory()
        .getLogger(join(loggerNamePrefix, DESERIALIZER_LOGGER_NAME));

    return Serdes.serdeFrom(
        new LoggingSerializer<>(formatSerde.serializer(), serializerProcessingLogger),
        new LoggingDeserializer<>(formatSerde.deserializer(), deserializerProcessingLogger)
    );
  }

    GenericSerdeFactory();
  @VisibleForTesting  GenericSerdeFactory(final Function<FormatInfo, Format> formatFactory);

}