// Path: sample/src/main/java/mortar/lib/sample/activity/MainActivity.java
// public class MainActivity extends MortarActivity {
// 
//   @Override protected void onCreate(Bundle savedInstanceState) {
//     super.onCreate(savedInstanceState);
//     setContentView(R.layout.activity_main);
//   }
// 
//   @Override protected Blueprint getNewActivityScreen() {
//     return new ActivityScreen();
//   }
// 
// }
// 
// Path: lib/src/main/java/mortar/lib/util/GsonParcer.java
// public class GsonParcer<T> implements Parcer<T> {
// 
//   private final Gson gson;
// 
//   public GsonParcer() {
//     this(new Gson());
//   }
// 
//   public GsonParcer(Gson gson) {
//     this.gson = gson;
//   }
// 
//   @Override public Parcelable wrap(T instance) {
//     try {
//       String json = encode(instance);
//       return new Wrapper(json);
//     } catch (IOException e) {
//       throw new RuntimeException(e);
//     }
//   }
// 
//   @Override public T unwrap(Parcelable parcelable) {
//     Wrapper wrapper = (Wrapper) parcelable;
//     try {
//       return decode(wrapper.json);
//     } catch (IOException e) {
//       throw new RuntimeException(e);
//     }
//   }
// 
//   private String encode(T instance) throws IOException {
//     StringWriter stringWriter = new StringWriter();
//     JsonWriter writer = new JsonWriter(stringWriter);
// 
//     try {
//       Class<?> type = instance.getClass();
// 
//       writer.beginObject();
//       writer.name(type.getName());
//       gson.toJson(instance, type, writer);
//       writer.endObject();
// 
//       return stringWriter.toString();
//     } finally {
//       writer.close();
//     }
//   }
// 
//   private T decode(String json) throws IOException {
//     JsonReader reader = new JsonReader(new StringReader(json));
// 
//     try {
//       reader.beginObject();
// 
//       Class<?> type = Class.forName(reader.nextName());
//       return gson.fromJson(reader, type);
//     } catch (ClassNotFoundException e) {
//       throw new RuntimeException(e);
//     } finally {
//       reader.close();
//     }
//   }
// 
//   private static class Wrapper implements Parcelable {
//     final String json;
// 
//     Wrapper(String json) {
//       this.json = json;
//     }
// 
//     @Override public int describeContents() {
//       return 0;
//     }
// 
//     @Override public void writeToParcel(Parcel out, int flags) {
//       out.writeString(json);
//     }
// 
//     @SuppressWarnings("UnusedDeclaration")
//     public static final Parcelable.Creator<Wrapper> CREATOR = new Parcelable.Creator<Wrapper>() {
//       @Override public Wrapper createFromParcel(Parcel in) {
//         String json = in.readString();
//         return new Wrapper(json);
//       }
// 
//       @Override public Wrapper[] newArray(int size) {
//         return new Wrapper[size];
//       }
//     };
//   }
// }


import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import javax.inject.Singleton;
import dagger.Module;
import dagger.Provides;
import flow.Parcer;
import mortar.lib.sample.activity.MainActivity;
import mortar.lib.util.GsonParcer;
package mortar.lib.sample.application;




@Module(
    injects = {
        MainActivity.class
    },
    library = true
)
public class SampleModule {
  
  private SampleApplication mApplication;
  
  public SampleModule(SampleApplication application) {
    mApplication = application;
  }
  
  @Provides @Singleton Gson provideGson() {
    return new GsonBuilder()
        .create();
  }

  @Provides @Singleton Parcer<Object> provideParcer(Gson gson) {
// Path: sample/src/main/java/mortar/lib/sample/activity/MainActivity.java
// public class MainActivity extends MortarActivity {
// 
//   @Override protected void onCreate(Bundle savedInstanceState) {
//     super.onCreate(savedInstanceState);
//     setContentView(R.layout.activity_main);
//   }
// 
//   @Override protected Blueprint getNewActivityScreen() {
//     return new ActivityScreen();
//   }
// 
// }
// 
// Path: lib/src/main/java/mortar/lib/util/GsonParcer.java
// public class GsonParcer<T> implements Parcer<T> {
// 
//   private final Gson gson;
// 
//   public GsonParcer() {
//     this(new Gson());
//   }
// 
//   public GsonParcer(Gson gson) {
//     this.gson = gson;
//   }
// 
//   @Override public Parcelable wrap(T instance) {
//     try {
//       String json = encode(instance);
//       return new Wrapper(json);
//     } catch (IOException e) {
//       throw new RuntimeException(e);
//     }
//   }
// 
//   @Override public T unwrap(Parcelable parcelable) {
//     Wrapper wrapper = (Wrapper) parcelable;
//     try {
//       return decode(wrapper.json);
//     } catch (IOException e) {
//       throw new RuntimeException(e);
//     }
//   }
// 
//   private String encode(T instance) throws IOException {
//     StringWriter stringWriter = new StringWriter();
//     JsonWriter writer = new JsonWriter(stringWriter);
// 
//     try {
//       Class<?> type = instance.getClass();
// 
//       writer.beginObject();
//       writer.name(type.getName());
//       gson.toJson(instance, type, writer);
//       writer.endObject();
// 
//       return stringWriter.toString();
//     } finally {
//       writer.close();
//     }
//   }
// 
//   private T decode(String json) throws IOException {
//     JsonReader reader = new JsonReader(new StringReader(json));
// 
//     try {
//       reader.beginObject();
// 
//       Class<?> type = Class.forName(reader.nextName());
//       return gson.fromJson(reader, type);
//     } catch (ClassNotFoundException e) {
//       throw new RuntimeException(e);
//     } finally {
//       reader.close();
//     }
//   }
// 
//   private static class Wrapper implements Parcelable {
//     final String json;
// 
//     Wrapper(String json) {
//       this.json = json;
//     }
// 
//     @Override public int describeContents() {
//       return 0;
//     }
// 
//     @Override public void writeToParcel(Parcel out, int flags) {
//       out.writeString(json);
//     }
// 
//     @SuppressWarnings("UnusedDeclaration")
//     public static final Parcelable.Creator<Wrapper> CREATOR = new Parcelable.Creator<Wrapper>() {
//       @Override public Wrapper createFromParcel(Parcel in) {
//         String json = in.readString();
//         return new Wrapper(json);
//       }
// 
//       @Override public Wrapper[] newArray(int size) {
//         return new Wrapper[size];
//       }
//     };
//   }
// }


// Path: sample/src/main/java/mortar/lib/sample/application/SampleModule.java
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import javax.inject.Singleton;
import dagger.Module;
import dagger.Provides;
import flow.Parcer;
import mortar.lib.sample.activity.MainActivity;
import mortar.lib.util.GsonParcer;

package mortar.lib.sample.application;




@Module(
    injects = {
        MainActivity.class
    },
    library = true
)
public class SampleModule {
  
  private SampleApplication mApplication;
  
  public SampleModule(SampleApplication application) {
    mApplication = application;
  }
  
  @Provides @Singleton Gson provideGson() {
    return new GsonBuilder()
        .create();
  }

  @Provides @Singleton Parcer<Object> provideParcer(Gson gson) {
    return new GsonParcer<Object>(gson);