// Path: tron/src/java/funcatron/helpers/Tuple2.java
// public class Tuple2<A, B> {
// 
//     private final A a;
//     private final B b;
// 
//     public Tuple2(A a, B b) {
//         this.a = a;
//         this.b = b;
//     }
// 
//     public A _1() {return a;}
//     public B _2() {return b;}
//     public A a() {return a;}
//     public B b() {return b;}
// 
//     /**
//      * Convert the Tuple into a List
//      * @return a List containing the elements of the Tuple
//      */
//     public List toList() {
//         return (List) Clojure.var("clojure/core", "list").invoke(a, b);
//     }
// }
// 
// Path: tron/src/java/funcatron/helpers/Tuple3.java
// public class Tuple3<A, B, C> extends Tuple2<A,B> {
// 
//     private final C c;
// 
//     public Tuple3(A a, B b,C c) {
//         super(a,b);
//         this.c = c;
//     }
// 
//     public C _3() {return c;}
//     public C c() {return c;}
// 
//     /**
//      * Convert the Tuple into a List
//      * @return a List containing the elements of the Tuple
//      */
//     @Override
//     public List toList() {
//         return (List) Clojure.var("clojure/core", "list").invoke(_1(), _2(), c);
//     }
// }


import funcatron.helpers.Tuple2;
import funcatron.helpers.Tuple3;
import java.io.IOException;
import java.util.List;
import java.util.Map;
import java.util.UUID;
import java.util.function.Function;
package funcatron.abstractions;



/**
 * How the Tron talks to the Container substrate (Mesos, Kubernetes, Docker Swarm)
 * to start, stop, and monitor
 */
public interface ContainerSubstrate {

    class ServiceType {
        public final String dockerImage;
        public final double cpu;
        public final double memory;
// Path: tron/src/java/funcatron/helpers/Tuple2.java
// public class Tuple2<A, B> {
// 
//     private final A a;
//     private final B b;
// 
//     public Tuple2(A a, B b) {
//         this.a = a;
//         this.b = b;
//     }
// 
//     public A _1() {return a;}
//     public B _2() {return b;}
//     public A a() {return a;}
//     public B b() {return b;}
// 
//     /**
//      * Convert the Tuple into a List
//      * @return a List containing the elements of the Tuple
//      */
//     public List toList() {
//         return (List) Clojure.var("clojure/core", "list").invoke(a, b);
//     }
// }
// 
// Path: tron/src/java/funcatron/helpers/Tuple3.java
// public class Tuple3<A, B, C> extends Tuple2<A,B> {
// 
//     private final C c;
// 
//     public Tuple3(A a, B b,C c) {
//         super(a,b);
//         this.c = c;
//     }
// 
//     public C _3() {return c;}
//     public C c() {return c;}
// 
//     /**
//      * Convert the Tuple into a List
//      * @return a List containing the elements of the Tuple
//      */
//     @Override
//     public List toList() {
//         return (List) Clojure.var("clojure/core", "list").invoke(_1(), _2(), c);
//     }
// }


// Path: tron/src/java/funcatron/abstractions/ContainerSubstrate.java
import funcatron.helpers.Tuple2;
import funcatron.helpers.Tuple3;
import java.io.IOException;
import java.util.List;
import java.util.Map;
import java.util.UUID;
import java.util.function.Function;

package funcatron.abstractions;



/**
 * How the Tron talks to the Container substrate (Mesos, Kubernetes, Docker Swarm)
 * to start, stop, and monitor
 */
public interface ContainerSubstrate {

    class ServiceType {
        public final String dockerImage;
        public final double cpu;
        public final double memory;
        public final List<Tuple2<String, String>> env;