// Path: RosettaCore/src/main/java/com/hubspot/rosetta/Rosetta.java
// public enum Rosetta {
//   INSTANCE;
// 
//   private static final List<Module> MODULES = new CopyOnWriteArrayList<Module>(defaultModules());
//   private static final AtomicReference<ObjectMapper> MAPPER = new AtomicReference<ObjectMapper>(cloneAndCustomize(new ObjectMapper()));
// 
//   public static ObjectMapper getMapper() {
//     return INSTANCE.get();
//   }
// 
//   /**
//    * @deprecated To customize the ObjectMapper, use {@link com.hubspot.rosetta.jdbi.RosettaObjectMapperOverride}.
//    */
//   @Deprecated
//   public static void addModule(Module module) {
//     INSTANCE.add(module);
//   }
// 
//   /**
//    * @deprecated To customize the ObjectMapper, use {@link com.hubspot.rosetta.jdbi.RosettaObjectMapperOverride}.
//    */
//   @Deprecated
//   public static void setMapper(ObjectMapper mapper) {
//     INSTANCE.set(mapper);
//   }
// 
//   public static ObjectMapper cloneAndCustomize(ObjectMapper mapper) {
//     mapper = mapper.copy();
// 
//     // ObjectMapper#registerModules doesn't exist in 2.1.x
//     for (Module module : MODULES) {
//       mapper.registerModule(module);
//     }
// 
//     return mapper;
//   }
// 
//   private ObjectMapper get() {
//     return MAPPER.get();
//   }
// 
//   private void set(ObjectMapper mapper) {
//     MAPPER.set(cloneAndCustomize(mapper));
//   }
// 
//   private void add(Module module) {
//     MODULES.add(module);
//     MAPPER.get().registerModule(module);
//   }
// 
//   private static List<Module> defaultModules() {
//     List<Module> defaultModules = new ArrayList<Module>();
//     defaultModules.add(new RosettaModule());
// 
//     for (Module module : ServiceLoader.load(AutoDiscoveredModule.class)) {
//       defaultModules.add(module);
//     }
// 
//     for (Module module : ServiceLoader.load(Module.class)) {
//       defaultModules.add(module);
//     }
// 
//     return defaultModules;
//   }
// }
// 
// Path: RosettaImmutables/src/test/java/com/hubspot/rosetta/immutables/beans/CustomEnum.java
// public enum CustomEnum {
//   ONE(1),
//   TWO(2),
//   ;
// 
//   private static final Map<Integer, CustomEnum> LOOKUP =
//       Maps.uniqueIndex(
//           Arrays.asList(CustomEnum.values()),
//           CustomEnum::getValue);
// 
//   private final int value;
// 
//   CustomEnum(int value) {
//     this.value = value;
//   }
// 
//   @RosettaValue
//   public int getValue() {
//     return value;
//   }
// 
//   @RosettaCreator
//   public static CustomEnum from(int value) {
//     return Optional.ofNullable(LOOKUP.get(value))
//         .orElseThrow(() -> new IllegalArgumentException("No enum for value: " + value));
//   }
// }
// 
// Path: RosettaImmutables/src/test/java/com/hubspot/rosetta/immutables/beans/SimpleEnum.java
// public enum SimpleEnum {
//   ONE,
//   TWO
// }
// 
// Path: RosettaImmutables/src/test/java/com/hubspot/rosetta/immutables/beans/WireSafeBean.java
// public class WireSafeBean {
//     private WireSafeEnum<SimpleEnum> simple;
//     private WireSafeEnum<CustomEnum> custom;
// 
//     public WireSafeEnum<SimpleEnum> getSimple() {
//       return simple;
//     }
// 
//   public WireSafeEnum<CustomEnum> getCustom() {
//     return custom;
//   }
// 
//   public void setSimple(WireSafeEnum<SimpleEnum> simple) {
//     this.simple = simple;
//   }
// 
//   public void setCustom(WireSafeEnum<CustomEnum> custom) {
//     this.custom = custom;
//   }
// 
//   @Override
//   public String toString() {
//     return MoreObjects
//         .toStringHelper(WireSafeBean.class)
//         .add("simple", simple)
//         .add("custom", custom).toString();
//   }
// 
//   @Override
//   public boolean equals(Object o) {
//     if (this == o) {
//       return true;
//     }
// 
//     if (o == null || getClass() != o.getClass()) {
//       return false;
//     }
// 
//     WireSafeBean bean = (WireSafeBean) o;
//     return Objects.equal(simple, bean.simple) &&
//         Objects.equal(custom, bean.custom);
//   }
// 
//   @Override
//   public int hashCode() {
//     return Objects.hashCode(simple, custom);
//   }
// }


import static org.assertj.core.api.Assertions.assertThat;
import org.junit.Test;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.hubspot.immutables.utils.WireSafeEnum;
import com.hubspot.rosetta.Rosetta;
import com.hubspot.rosetta.immutables.beans.CustomEnum;
import com.hubspot.rosetta.immutables.beans.SimpleEnum;
import com.hubspot.rosetta.immutables.beans.WireSafeBean;
package com.hubspot.rosetta.immutables;




public class WireSafeEnumTest {
  private static final ObjectMapper MAPPER = Rosetta
      .getMapper()
      .copy()
      .registerModule(new RosettaImmutablesModule());

  @Test
  public void itCanSerializeBeanWithWireSafeField() {
// Path: RosettaCore/src/main/java/com/hubspot/rosetta/Rosetta.java
// public enum Rosetta {
//   INSTANCE;
// 
//   private static final List<Module> MODULES = new CopyOnWriteArrayList<Module>(defaultModules());
//   private static final AtomicReference<ObjectMapper> MAPPER = new AtomicReference<ObjectMapper>(cloneAndCustomize(new ObjectMapper()));
// 
//   public static ObjectMapper getMapper() {
//     return INSTANCE.get();
//   }
// 
//   /**
//    * @deprecated To customize the ObjectMapper, use {@link com.hubspot.rosetta.jdbi.RosettaObjectMapperOverride}.
//    */
//   @Deprecated
//   public static void addModule(Module module) {
//     INSTANCE.add(module);
//   }
// 
//   /**
//    * @deprecated To customize the ObjectMapper, use {@link com.hubspot.rosetta.jdbi.RosettaObjectMapperOverride}.
//    */
//   @Deprecated
//   public static void setMapper(ObjectMapper mapper) {
//     INSTANCE.set(mapper);
//   }
// 
//   public static ObjectMapper cloneAndCustomize(ObjectMapper mapper) {
//     mapper = mapper.copy();
// 
//     // ObjectMapper#registerModules doesn't exist in 2.1.x
//     for (Module module : MODULES) {
//       mapper.registerModule(module);
//     }
// 
//     return mapper;
//   }
// 
//   private ObjectMapper get() {
//     return MAPPER.get();
//   }
// 
//   private void set(ObjectMapper mapper) {
//     MAPPER.set(cloneAndCustomize(mapper));
//   }
// 
//   private void add(Module module) {
//     MODULES.add(module);
//     MAPPER.get().registerModule(module);
//   }
// 
//   private static List<Module> defaultModules() {
//     List<Module> defaultModules = new ArrayList<Module>();
//     defaultModules.add(new RosettaModule());
// 
//     for (Module module : ServiceLoader.load(AutoDiscoveredModule.class)) {
//       defaultModules.add(module);
//     }
// 
//     for (Module module : ServiceLoader.load(Module.class)) {
//       defaultModules.add(module);
//     }
// 
//     return defaultModules;
//   }
// }
// 
// Path: RosettaImmutables/src/test/java/com/hubspot/rosetta/immutables/beans/CustomEnum.java
// public enum CustomEnum {
//   ONE(1),
//   TWO(2),
//   ;
// 
//   private static final Map<Integer, CustomEnum> LOOKUP =
//       Maps.uniqueIndex(
//           Arrays.asList(CustomEnum.values()),
//           CustomEnum::getValue);
// 
//   private final int value;
// 
//   CustomEnum(int value) {
//     this.value = value;
//   }
// 
//   @RosettaValue
//   public int getValue() {
//     return value;
//   }
// 
//   @RosettaCreator
//   public static CustomEnum from(int value) {
//     return Optional.ofNullable(LOOKUP.get(value))
//         .orElseThrow(() -> new IllegalArgumentException("No enum for value: " + value));
//   }
// }
// 
// Path: RosettaImmutables/src/test/java/com/hubspot/rosetta/immutables/beans/SimpleEnum.java
// public enum SimpleEnum {
//   ONE,
//   TWO
// }
// 
// Path: RosettaImmutables/src/test/java/com/hubspot/rosetta/immutables/beans/WireSafeBean.java
// public class WireSafeBean {
//     private WireSafeEnum<SimpleEnum> simple;
//     private WireSafeEnum<CustomEnum> custom;
// 
//     public WireSafeEnum<SimpleEnum> getSimple() {
//       return simple;
//     }
// 
//   public WireSafeEnum<CustomEnum> getCustom() {
//     return custom;
//   }
// 
//   public void setSimple(WireSafeEnum<SimpleEnum> simple) {
//     this.simple = simple;
//   }
// 
//   public void setCustom(WireSafeEnum<CustomEnum> custom) {
//     this.custom = custom;
//   }
// 
//   @Override
//   public String toString() {
//     return MoreObjects
//         .toStringHelper(WireSafeBean.class)
//         .add("simple", simple)
//         .add("custom", custom).toString();
//   }
// 
//   @Override
//   public boolean equals(Object o) {
//     if (this == o) {
//       return true;
//     }
// 
//     if (o == null || getClass() != o.getClass()) {
//       return false;
//     }
// 
//     WireSafeBean bean = (WireSafeBean) o;
//     return Objects.equal(simple, bean.simple) &&
//         Objects.equal(custom, bean.custom);
//   }
// 
//   @Override
//   public int hashCode() {
//     return Objects.hashCode(simple, custom);
//   }
// }


// Path: RosettaImmutables/src/test/java/com/hubspot/rosetta/immutables/WireSafeEnumTest.java
import static org.assertj.core.api.Assertions.assertThat;
import org.junit.Test;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.hubspot.immutables.utils.WireSafeEnum;
import com.hubspot.rosetta.Rosetta;
import com.hubspot.rosetta.immutables.beans.CustomEnum;
import com.hubspot.rosetta.immutables.beans.SimpleEnum;
import com.hubspot.rosetta.immutables.beans.WireSafeBean;

package com.hubspot.rosetta.immutables;




public class WireSafeEnumTest {
  private static final ObjectMapper MAPPER = Rosetta
      .getMapper()
      .copy()
      .registerModule(new RosettaImmutablesModule());

  @Test
  public void itCanSerializeBeanWithWireSafeField() {
    WireSafeBean bean = new WireSafeBean();