// Path: src/main/java/org/algohub/engine/type/IntermediateType.java
// public enum IntermediateType {
//   BOOL("bool"),
//   CHAR("char"),
//   STRING("string"),
//   DOUBLE("double"),
//   INT("int"),
//   LONG("long"),
//   ARRAY("array"),
//   LIST("list"),
//   SET("set"),
//   MAP("map"),
//   LINKED_LIST_NODE("LinkedListNode"),
//   BINARY_TREE_NODE("BinaryTreeNode");
// 
//   /**
//    * Text for display.
//    */
//   private final String text;
// 
//   IntermediateType(final String text) {
//     this.text = text;
//   }
// 
//   /**
//    * Return real Enum from string.
//    */
//   @JsonCreator
//   public static IntermediateType fromString(final String text) {
//     if (text != null) {
//       for (final IntermediateType v : IntermediateType.values()) {
//         if (text.equalsIgnoreCase(v.text)) {
//           return v;
//         }
//       }
//     }
//     throw new IllegalArgumentException("Unrecognized type: " + text);
//   }
// 
//   /**
//    * {@inheritDoc}.
//    */
//   @JsonValue
//   @Override public String toString() {
//     return text;
//   }
// }
// 
// Path: src/main/java/org/algohub/engine/type/LanguageType.java
// public enum LanguageType {
//   JAVA("Java"),
//   PYTHON("Python"),
//   CPLUSPLUS("C++"),
// 
//   CLOJURE("Clojure"),
//   CSHARP("C#"),
//   FSHARP("F#"),
//   GO("Go"),
//   HASKELL("Haskell"),
//   JAVASCRIPT("JavaScript"),
//   LUA("Lua"),
//   OCAML("Ocaml"),
//   RACKET("Racket"),
//   RUBY("Ruby"),
//   RUST("Rust"),
//   SCALA("Scala"),
//   SWIFT("Swift");
// 
//   /**
//    * Text for display.
//    */
//   private final String text;
// 
//   LanguageType(final String text) {
//     this.text = text;
//   }
// 
//   /**
//    * Return real Enum from string.
//    */
//   @JsonCreator
//   public static LanguageType fromString(String text) {
//     if (text != null) {
//       for (final LanguageType v : LanguageType.values()) {
//         if (text.equalsIgnoreCase(v.text)) {
//           return v;
//         }
//       }
//     }
//     throw new IllegalArgumentException("Unrecognized language: " + text);
//   }
// 
//   /**
//    * {@inheritDoc}.
//    */
//   @JsonValue
//   @Override public String toString() {
//     return text;
//   }
// 
//   public String getFileSuffix() {
//     switch (this) {
//       case CPLUSPLUS:
//         return "cpp";
//       case PYTHON:
//         return "py";
//       case CLOJURE:
//         return "clj";
//       case CSHARP:
//         return "cs";
//       case FSHARP:
//         return "fs";
//       case HASKELL:
//         return "hs";
//       case JAVASCRIPT:
//         return "js";
//       case OCAML:
//         return "ml";
//       case RACKET:
//         return "rkt";
//       case RUBY:
//         return "rb";
//       case RUST:
//         return "rs";
//       default:
//         return text.toLowerCase();
//     }
//   }
// }


import com.google.common.collect.ImmutableMap;
import org.algohub.engine.type.IntermediateType;
import org.algohub.engine.type.LanguageType;

          .build();

  /**
   * Map intermediate types to Ruby types.
   */
  public static final ImmutableMap<IntermediateType, String> RUBY_TYPE_MAP =
      ImmutableMap.<IntermediateType, String>builder().put(IntermediateType.BOOL, "Boolean")
          .put(IntermediateType.CHAR, "String")
          .put(IntermediateType.STRING, "String")
          .put(IntermediateType.DOUBLE, "Float")
          .put(IntermediateType.INT, "Fixnum")
          .put(IntermediateType.LONG, "Fixnum")

          //.put(IntermediateType.ARRAY, "[]")
          //.put(IntermediateType.LIST, "[]")
          .put(IntermediateType.SET, "Set")
          .put(IntermediateType.MAP, "Hash")

          .put(IntermediateType.LINKED_LIST_NODE, "LinkedListNode")
          .put(IntermediateType.BINARY_TREE_NODE, "BinaryTreeNode")

          .build();


  /**
   * LanguageType -> Type -> Specific Type.
   */
  public static final ImmutableMap<LanguageType, ImmutableMap<IntermediateType, String>> TYPE_MAP =
      ImmutableMap.<LanguageType, ImmutableMap<IntermediateType, String>>builder()
// Path: src/main/java/org/algohub/engine/type/IntermediateType.java
// public enum IntermediateType {
//   BOOL("bool"),
//   CHAR("char"),
//   STRING("string"),
//   DOUBLE("double"),
//   INT("int"),
//   LONG("long"),
//   ARRAY("array"),
//   LIST("list"),
//   SET("set"),
//   MAP("map"),
//   LINKED_LIST_NODE("LinkedListNode"),
//   BINARY_TREE_NODE("BinaryTreeNode");
// 
//   /**
//    * Text for display.
//    */
//   private final String text;
// 
//   IntermediateType(final String text) {
//     this.text = text;
//   }
// 
//   /**
//    * Return real Enum from string.
//    */
//   @JsonCreator
//   public static IntermediateType fromString(final String text) {
//     if (text != null) {
//       for (final IntermediateType v : IntermediateType.values()) {
//         if (text.equalsIgnoreCase(v.text)) {
//           return v;
//         }
//       }
//     }
//     throw new IllegalArgumentException("Unrecognized type: " + text);
//   }
// 
//   /**
//    * {@inheritDoc}.
//    */
//   @JsonValue
//   @Override public String toString() {
//     return text;
//   }
// }
// 
// Path: src/main/java/org/algohub/engine/type/LanguageType.java
// public enum LanguageType {
//   JAVA("Java"),
//   PYTHON("Python"),
//   CPLUSPLUS("C++"),
// 
//   CLOJURE("Clojure"),
//   CSHARP("C#"),
//   FSHARP("F#"),
//   GO("Go"),
//   HASKELL("Haskell"),
//   JAVASCRIPT("JavaScript"),
//   LUA("Lua"),
//   OCAML("Ocaml"),
//   RACKET("Racket"),
//   RUBY("Ruby"),
//   RUST("Rust"),
//   SCALA("Scala"),
//   SWIFT("Swift");
// 
//   /**
//    * Text for display.
//    */
//   private final String text;
// 
//   LanguageType(final String text) {
//     this.text = text;
//   }
// 
//   /**
//    * Return real Enum from string.
//    */
//   @JsonCreator
//   public static LanguageType fromString(String text) {
//     if (text != null) {
//       for (final LanguageType v : LanguageType.values()) {
//         if (text.equalsIgnoreCase(v.text)) {
//           return v;
//         }
//       }
//     }
//     throw new IllegalArgumentException("Unrecognized language: " + text);
//   }
// 
//   /**
//    * {@inheritDoc}.
//    */
//   @JsonValue
//   @Override public String toString() {
//     return text;
//   }
// 
//   public String getFileSuffix() {
//     switch (this) {
//       case CPLUSPLUS:
//         return "cpp";
//       case PYTHON:
//         return "py";
//       case CLOJURE:
//         return "clj";
//       case CSHARP:
//         return "cs";
//       case FSHARP:
//         return "fs";
//       case HASKELL:
//         return "hs";
//       case JAVASCRIPT:
//         return "js";
//       case OCAML:
//         return "ml";
//       case RACKET:
//         return "rkt";
//       case RUBY:
//         return "rb";
//       case RUST:
//         return "rs";
//       default:
//         return text.toLowerCase();
//     }
//   }
// }


// Path: src/main/java/org/algohub/engine/codegenerator/TypeMap.java
import com.google.common.collect.ImmutableMap;
import org.algohub.engine.type.IntermediateType;
import org.algohub.engine.type.LanguageType;


          .build();

  /**
   * Map intermediate types to Ruby types.
   */
  public static final ImmutableMap<IntermediateType, String> RUBY_TYPE_MAP =
      ImmutableMap.<IntermediateType, String>builder().put(IntermediateType.BOOL, "Boolean")
          .put(IntermediateType.CHAR, "String")
          .put(IntermediateType.STRING, "String")
          .put(IntermediateType.DOUBLE, "Float")
          .put(IntermediateType.INT, "Fixnum")
          .put(IntermediateType.LONG, "Fixnum")

          //.put(IntermediateType.ARRAY, "[]")
          //.put(IntermediateType.LIST, "[]")
          .put(IntermediateType.SET, "Set")
          .put(IntermediateType.MAP, "Hash")

          .put(IntermediateType.LINKED_LIST_NODE, "LinkedListNode")
          .put(IntermediateType.BINARY_TREE_NODE, "BinaryTreeNode")

          .build();


  /**
   * LanguageType -> Type -> Specific Type.
   */
  public static final ImmutableMap<LanguageType, ImmutableMap<IntermediateType, String>> TYPE_MAP =
      ImmutableMap.<LanguageType, ImmutableMap<IntermediateType, String>>builder()
          .put(LanguageType.JAVA, JAVA_TYPE_MAP)