// Path: examples/src/main/java/com/github/peckb1/examples/auto/fraggles/Boober.java
// @AutoJackson
// public interface Boober extends Fraggle<DaveGoelz> {
// 
//     @Named("superstitions") long getNumberOfSuperstitions();
// 
// }
// 
// Path: examples/src/main/java/com/github/peckb1/examples/auto/fraggles/Gobo.java
// @AutoJackson
// public interface Gobo<X extends Number> extends Fraggle<JerryNelson> {
// 
//     @Named("postcards") int getFetchedPostcards();
// 
//     X getX();
// 
//     @Named("zed") Map getMap() throws IOException;
// }
// 
// Path: examples/src/main/java/com/github/peckb1/examples/auto/fraggles/Mokey.java
// @AutoJackson
// public interface Mokey extends Fraggle {
// 
//     @Named("radishes") int getRadishesPicked();
// 
// }
// 
// Path: examples/src/main/java/com/github/peckb1/examples/auto/muppeteers/DaveGoelz.java
// @AutoJackson
// public interface DaveGoelz extends Muppeteer { }
// 
// Path: examples/src/main/java/com/github/peckb1/examples/auto/muppeteers/JerryNelson.java
// @AutoJackson
// public interface JerryNelson extends Muppeteer { }
// 
// Path: examples/src/main/java/com/github/peckb1/examples/auto/muppeteers/KathrynMullen.java
// @AutoJackson
// public interface KathrynMullen extends Muppeteer { }
// 
// Path: examples/src/main/java/com/github/peckb1/examples/auto/muppeteers/SteveWhitmire.java
// @AutoJackson
// public interface SteveWhitmire extends Muppeteer { }
// 
// Path: examples/src/main/java/com/github/peckb1/examples/auto/Fraggle.java
// enum FraggleName {
//     GOBO(Gobo.class),
//     MOKEY(Mokey.class),
//     WEMBLEY(Wembley.class),
//     BOOBER(Boober.class),
//     RED(Red.class);
// 
//     private final Class<? extends Fraggle> fraggleClass;
// 
//     FraggleName(Class<? extends Fraggle> fraggleClass) {
//         this.fraggleClass = fraggleClass;
//     }
// 
//     @AutoJacksonTypeClass
//     public Class<? extends Fraggle> getFraggleClass() {
//         return fraggleClass;
//     }
// }
// 
// Path: examples/src/main/java/com/github/peckb1/examples/auto/fraggles/Wembley.java
// @AutoJackson
// public interface Wembley extends Fraggle<SteveWhitmire> {
// 
//     @Named("fires") int getNumberOfFiresPutOut();
// 
// }


import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature;
import com.fasterxml.jackson.datatype.jdk8.Jdk8Module;
import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
import com.github.peckb1.examples.auto.fraggles.Boober;
import com.github.peckb1.examples.auto.fraggles.Gobo;
import com.github.peckb1.examples.auto.fraggles.Mokey;
import com.github.peckb1.examples.auto.muppeteers.DaveGoelz;
import com.github.peckb1.examples.auto.muppeteers.JerryNelson;
import com.github.peckb1.examples.auto.muppeteers.KathrynMullen;
import com.github.peckb1.examples.auto.muppeteers.SteveWhitmire;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import peckb1.autojackson.AutoJacksonSetup;
import com.github.peckb1.examples.auto.Fraggle.FraggleName;
import com.github.peckb1.examples.auto.fraggles.Wembley;
import java.io.File;
import java.io.IOException;
import java.sql.Date;
import java.time.Instant;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
        assertEquals(38, (int) gorg.getAge());
        assertTrue(gorg.getChild().isPresent());
        gorg.getChild().ifPresent(this::checkJunior);
    }

    private void checkKing(Gorg gorg) {
        assertEquals("King", gorg.getName());
        assertEquals(42, (int) gorg.getAge());
        assertTrue(gorg.getChild().isPresent());
        gorg.getChild().ifPresent(this::checkJunior);
    }

    private void checkJunior(Gorg gorg) {
        assertEquals("Junior", gorg.getName());
        assertEquals(15, (int) gorg.getAge());
        assertFalse(gorg.getChild().isPresent());
    }

    private void checkBoober(Fraggle fraggle) {
        assertEquals(FraggleName.BOOBER, fraggle.getName());
        assertEquals(11, (int) fraggle.getAge());
        assertEquals("clothes washer", fraggle.getJob());
        Muppeteer muppeteer = fraggle.getMuppeteer();
        assertTrue(muppeteer instanceof DaveGoelz);
        assertEquals("Dave Goelz", muppeteer.getName());
        assertEquals(9001, ((Boober) fraggle).getNumberOfSuperstitions());
        assertFalse(fraggle.getRoommate().isPresent());
    }

    private void checkMokey(Fraggle fraggle) {
// Path: examples/src/main/java/com/github/peckb1/examples/auto/fraggles/Boober.java
// @AutoJackson
// public interface Boober extends Fraggle<DaveGoelz> {
// 
//     @Named("superstitions") long getNumberOfSuperstitions();
// 
// }
// 
// Path: examples/src/main/java/com/github/peckb1/examples/auto/fraggles/Gobo.java
// @AutoJackson
// public interface Gobo<X extends Number> extends Fraggle<JerryNelson> {
// 
//     @Named("postcards") int getFetchedPostcards();
// 
//     X getX();
// 
//     @Named("zed") Map getMap() throws IOException;
// }
// 
// Path: examples/src/main/java/com/github/peckb1/examples/auto/fraggles/Mokey.java
// @AutoJackson
// public interface Mokey extends Fraggle {
// 
//     @Named("radishes") int getRadishesPicked();
// 
// }
// 
// Path: examples/src/main/java/com/github/peckb1/examples/auto/muppeteers/DaveGoelz.java
// @AutoJackson
// public interface DaveGoelz extends Muppeteer { }
// 
// Path: examples/src/main/java/com/github/peckb1/examples/auto/muppeteers/JerryNelson.java
// @AutoJackson
// public interface JerryNelson extends Muppeteer { }
// 
// Path: examples/src/main/java/com/github/peckb1/examples/auto/muppeteers/KathrynMullen.java
// @AutoJackson
// public interface KathrynMullen extends Muppeteer { }
// 
// Path: examples/src/main/java/com/github/peckb1/examples/auto/muppeteers/SteveWhitmire.java
// @AutoJackson
// public interface SteveWhitmire extends Muppeteer { }
// 
// Path: examples/src/main/java/com/github/peckb1/examples/auto/Fraggle.java
// enum FraggleName {
//     GOBO(Gobo.class),
//     MOKEY(Mokey.class),
//     WEMBLEY(Wembley.class),
//     BOOBER(Boober.class),
//     RED(Red.class);
// 
//     private final Class<? extends Fraggle> fraggleClass;
// 
//     FraggleName(Class<? extends Fraggle> fraggleClass) {
//         this.fraggleClass = fraggleClass;
//     }
// 
//     @AutoJacksonTypeClass
//     public Class<? extends Fraggle> getFraggleClass() {
//         return fraggleClass;
//     }
// }
// 
// Path: examples/src/main/java/com/github/peckb1/examples/auto/fraggles/Wembley.java
// @AutoJackson
// public interface Wembley extends Fraggle<SteveWhitmire> {
// 
//     @Named("fires") int getNumberOfFiresPutOut();
// 
// }


// Path: examples/src/test/java/com/github/peckb1/examples/auto/TestModel.java
import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature;
import com.fasterxml.jackson.datatype.jdk8.Jdk8Module;
import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
import com.github.peckb1.examples.auto.fraggles.Boober;
import com.github.peckb1.examples.auto.fraggles.Gobo;
import com.github.peckb1.examples.auto.fraggles.Mokey;
import com.github.peckb1.examples.auto.muppeteers.DaveGoelz;
import com.github.peckb1.examples.auto.muppeteers.JerryNelson;
import com.github.peckb1.examples.auto.muppeteers.KathrynMullen;
import com.github.peckb1.examples.auto.muppeteers.SteveWhitmire;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import peckb1.autojackson.AutoJacksonSetup;
import com.github.peckb1.examples.auto.Fraggle.FraggleName;
import com.github.peckb1.examples.auto.fraggles.Wembley;
import java.io.File;
import java.io.IOException;
import java.sql.Date;
import java.time.Instant;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;

        assertEquals(38, (int) gorg.getAge());
        assertTrue(gorg.getChild().isPresent());
        gorg.getChild().ifPresent(this::checkJunior);
    }

    private void checkKing(Gorg gorg) {
        assertEquals("King", gorg.getName());
        assertEquals(42, (int) gorg.getAge());
        assertTrue(gorg.getChild().isPresent());
        gorg.getChild().ifPresent(this::checkJunior);
    }

    private void checkJunior(Gorg gorg) {
        assertEquals("Junior", gorg.getName());
        assertEquals(15, (int) gorg.getAge());
        assertFalse(gorg.getChild().isPresent());
    }

    private void checkBoober(Fraggle fraggle) {
        assertEquals(FraggleName.BOOBER, fraggle.getName());
        assertEquals(11, (int) fraggle.getAge());
        assertEquals("clothes washer", fraggle.getJob());
        Muppeteer muppeteer = fraggle.getMuppeteer();
        assertTrue(muppeteer instanceof DaveGoelz);
        assertEquals("Dave Goelz", muppeteer.getName());
        assertEquals(9001, ((Boober) fraggle).getNumberOfSuperstitions());
        assertFalse(fraggle.getRoommate().isPresent());
    }

    private void checkMokey(Fraggle fraggle) {
        assertEquals(FraggleName.MOKEY, fraggle.getName());