// Path: reactive-conversion-api/src/main/java/com/github/jloisel/reactive/conversion/api/ConversionFactory.java
// public interface ConversionFactory {
// 
//   /**
//    * Provides a {@link Serializer} instance.
//    * 
//    * @param clazz type of bean to serialize
//    * @return serializer instance
//    */
//   <T extends ReactiveEntity> Serializer<T> serializer();
// 
//   /**
//    * Provides a {@link Deserializer} instance.
//    * 
//    * @param clazz type of bean to serialize
//    * @return serializer instance
//    */
//   <T extends ReactiveEntity> Deserializer<T> deserializer();
// }
// 
// Path: reactive-conversion-api/src/main/java/com/github/jloisel/reactive/conversion/api/Deserializer.java
// public interface Deserializer<T extends ReactiveEntity> extends
//  Func1<RawJsonDocument, T> {
// 
// }
// 
// Path: reactive-conversion-api/src/main/java/com/github/jloisel/reactive/conversion/api/Serializer.java
// public interface Serializer<T extends ReactiveEntity> extends
//  Func1<T, RawJsonDocument> {
// 
// }
// 
// Path: reactive-entity-api/src/main/java/com/github/jloisel/reactive/entity/api/ReactiveEntity.java
// public interface ReactiveEntity {
// 
//   /**
//    * @return id of the entity
//    */
//   String getId();
// }


import static lombok.AccessLevel.PACKAGE;
import static lombok.AccessLevel.PRIVATE;
import lombok.AllArgsConstructor;
import lombok.NonNull;
import lombok.experimental.FieldDefaults;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.github.jloisel.reactive.conversion.api.ConversionFactory;
import com.github.jloisel.reactive.conversion.api.Deserializer;
import com.github.jloisel.reactive.conversion.api.Serializer;
import com.github.jloisel.reactive.entity.api.ReactiveEntity;
package com.github.jloisel.reactive.conversion.jackson;




@Service
@FieldDefaults(level = PRIVATE, makeFinal = true)
@AllArgsConstructor(access = PACKAGE, onConstructor = @__(@Autowired))
final class JacksonConversionFactory implements ConversionFactory {
// Path: reactive-conversion-api/src/main/java/com/github/jloisel/reactive/conversion/api/ConversionFactory.java
// public interface ConversionFactory {
// 
//   /**
//    * Provides a {@link Serializer} instance.
//    * 
//    * @param clazz type of bean to serialize
//    * @return serializer instance
//    */
//   <T extends ReactiveEntity> Serializer<T> serializer();
// 
//   /**
//    * Provides a {@link Deserializer} instance.
//    * 
//    * @param clazz type of bean to serialize
//    * @return serializer instance
//    */
//   <T extends ReactiveEntity> Deserializer<T> deserializer();
// }
// 
// Path: reactive-conversion-api/src/main/java/com/github/jloisel/reactive/conversion/api/Deserializer.java
// public interface Deserializer<T extends ReactiveEntity> extends
//  Func1<RawJsonDocument, T> {
// 
// }
// 
// Path: reactive-conversion-api/src/main/java/com/github/jloisel/reactive/conversion/api/Serializer.java
// public interface Serializer<T extends ReactiveEntity> extends
//  Func1<T, RawJsonDocument> {
// 
// }
// 
// Path: reactive-entity-api/src/main/java/com/github/jloisel/reactive/entity/api/ReactiveEntity.java
// public interface ReactiveEntity {
// 
//   /**
//    * @return id of the entity
//    */
//   String getId();
// }


// Path: reactive-conversion-jackson/src/main/java/com/github/jloisel/reactive/conversion/jackson/JacksonConversionFactory.java
import static lombok.AccessLevel.PACKAGE;
import static lombok.AccessLevel.PRIVATE;
import lombok.AllArgsConstructor;
import lombok.NonNull;
import lombok.experimental.FieldDefaults;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.github.jloisel.reactive.conversion.api.ConversionFactory;
import com.github.jloisel.reactive.conversion.api.Deserializer;
import com.github.jloisel.reactive.conversion.api.Serializer;
import com.github.jloisel.reactive.entity.api.ReactiveEntity;

package com.github.jloisel.reactive.conversion.jackson;




@Service
@FieldDefaults(level = PRIVATE, makeFinal = true)
@AllArgsConstructor(access = PACKAGE, onConstructor = @__(@Autowired))
final class JacksonConversionFactory implements ConversionFactory {
  @NonNull