diff --git a/modules/swagger-codegen/src/main/resources/csharp/modelEnum.mustache b/modules/swagger-codegen/src/main/resources/csharp/modelEnum.mustache
new file mode 100644
index 000000000000..ff38385c7852
--- /dev/null
+++ b/modules/swagger-codegen/src/main/resources/csharp/modelEnum.mustache
@@ -0,0 +1,15 @@
+ ///
+ /// {{^description}}Gets or Sets {{{name}}}{{/description}}{{#description}}{{{description}}}{{/description}}
+ /// {{#description}}
+ /// {{{description}}}{{/description}}
+ [JsonConverter(typeof(StringEnumConverter))]
+ public enum {{#datatypeWithEnum}}{{.}}{{/datatypeWithEnum}}{{^datatypeWithEnum}}{{classname}}{{/datatypeWithEnum}}
+ {
+ {{#allowableValues}}{{#enumVars}}
+ ///
+ /// Enum {{name}} for {{{value}}}
+ ///
+ [EnumMember(Value = {{#isInteger}}"{{/isInteger}}{{#isDouble}}"{{/isDouble}}{{{value}}}{{#isInteger}}"{{/isInteger}}{{#isDouble}}"{{/isDouble}})]
+ {{name}}{{#isInteger}} = {{{value}}}{{/isInteger}}{{^-last}},
+ {{/-last}}{{/enumVars}}{{/allowableValues}}
+ }
diff --git a/modules/swagger-codegen/src/main/resources/csharp/modelGeneric.mustache b/modules/swagger-codegen/src/main/resources/csharp/modelGeneric.mustache
new file mode 100644
index 000000000000..8affc932a46b
--- /dev/null
+++ b/modules/swagger-codegen/src/main/resources/csharp/modelGeneric.mustache
@@ -0,0 +1,131 @@
+ ///
+ /// {{#description}}{{.}}{{/description}}{{^description}}{{classname}}{{/description}}
+ ///
+ [DataContract]
+ public partial class {{classname}} : {{#parent}}{{{parent}}}, {{/parent}} IEquatable<{{classname}}>
+ { {{#vars}}{{#isEnum}}
+{{>modelInnerEnum}}{{/isEnum}}{{#items.isEnum}}{{#items}}
+{{>modelInnerEnum}}{{/items}}{{/items.isEnum}}{{/vars}}
+ {{#vars}}{{#isEnum}}
+ ///
+ /// {{^description}}Gets or Sets {{{name}}}{{/description}}{{#description}}{{{description}}}{{/description}}
+ /// {{#description}}
+ /// {{{description}}}{{/description}}
+ [DataMember(Name="{{baseName}}", EmitDefaultValue={{emitDefaultValue}})]
+ public {{{datatypeWithEnum}}}{{#isEnum}}?{{/isEnum}} {{name}} { get; set; }
+ {{/isEnum}}{{/vars}}
+ ///
+ /// Initializes a new instance of the class.
+ /// Initializes a new instance of the class.
+ ///
+{{#vars}}{{^isReadOnly}} /// {{#description}}{{description}}{{/description}}{{^description}}{{name}}{{/description}}{{#required}} (required){{/required}}{{#defaultValue}} (default to {{defaultValue}}){{/defaultValue}}.
+{{/isReadOnly}}{{/vars}}
+ public {{classname}}({{#vars}}{{^isReadOnly}}{{{datatypeWithEnum}}}{{#isEnum}}?{{/isEnum}} {{name}} = null{{#hasMore}}, {{/hasMore}}{{/isReadOnly}}{{/vars}})
+ {
+ {{#vars}}{{^isReadOnly}}{{#required}}// to ensure "{{name}}" is required (not null)
+ if ({{name}} == null)
+ {
+ throw new InvalidDataException("{{name}} is a required property for {{classname}} and cannot be null");
+ }
+ else
+ {
+ this.{{name}} = {{name}};
+ }
+ {{/required}}{{/isReadOnly}}{{/vars}}{{#vars}}{{^isReadOnly}}{{^required}}{{#defaultValue}}// use default value if no "{{name}}" provided
+ if ({{name}} == null)
+ {
+ this.{{name}} = {{{defaultValue}}};
+ }
+ else
+ {
+ this.{{name}} = {{name}};
+ }
+ {{/defaultValue}}{{^defaultValue}}this.{{name}} = {{name}};
+ {{/defaultValue}}{{/required}}{{/isReadOnly}}{{/vars}}
+ }
+
+ {{#vars}}{{^isEnum}}
+ ///
+ /// {{^description}}Gets or Sets {{{name}}}{{/description}}{{#description}}{{description}}{{/description}}
+ /// {{#description}}
+ /// {{description}}{{/description}}
+ [DataMember(Name="{{baseName}}", EmitDefaultValue={{emitDefaultValue}})]
+ public {{{datatype}}} {{name}} { get; {{#isReadOnly}}private {{/isReadOnly}}set; }
+ {{/isEnum}}{{/vars}}
+ ///
+ /// Returns the string presentation of the object
+ ///
+ /// String presentation of the object
+ public override string ToString()
+ {
+ var sb = new StringBuilder();
+ sb.Append("class {{classname}} {\n");
+ {{#vars}}sb.Append(" {{name}}: ").Append({{name}}).Append("\n");
+ {{/vars}}
+ sb.Append("}\n");
+ return sb.ToString();
+ }
+
+ ///
+ /// Returns the JSON string presentation of the object
+ ///
+ /// JSON string presentation of the object
+ public {{#parent}} new {{/parent}}string ToJson()
+ {
+ return JsonConvert.SerializeObject(this, Formatting.Indented);
+ }
+
+ ///
+ /// Returns true if objects are equal
+ ///
+ /// Object to be compared
+ /// Boolean
+ public override bool Equals(object obj)
+ {
+ // credit: http://stackoverflow.com/a/10454552/677735
+ return this.Equals(obj as {{classname}});
+ }
+
+ ///
+ /// Returns true if {{classname}} instances are equal
+ ///
+ /// Instance of {{classname}} to be compared
+ /// Boolean
+ public bool Equals({{classname}} other)
+ {
+ // credit: http://stackoverflow.com/a/10454552/677735
+ if (other == null)
+ return false;
+
+ return {{#vars}}{{#isNotContainer}}
+ (
+ this.{{name}} == other.{{name}} ||
+ this.{{name}} != null &&
+ this.{{name}}.Equals(other.{{name}})
+ ){{#hasMore}} && {{/hasMore}}{{/isNotContainer}}{{^isNotContainer}}
+ (
+ this.{{name}} == other.{{name}} ||
+ this.{{name}} != null &&
+ this.{{name}}.SequenceEqual(other.{{name}})
+ ){{#hasMore}} && {{/hasMore}}{{/isNotContainer}}{{/vars}}{{^vars}}false{{/vars}};
+ }
+
+ ///
+ /// Gets the hash code
+ ///
+ /// Hash code
+ public override int GetHashCode()
+ {
+ // credit: http://stackoverflow.com/a/263416/677735
+ unchecked // Overflow is fine, just wrap
+ {
+ int hash = 41;
+ // Suitable nullity checks etc, of course :)
+ {{#vars}}
+ if (this.{{name}} != null)
+ hash = hash * 59 + this.{{name}}.GetHashCode();
+ {{/vars}}
+ return hash;
+ }
+ }
+ }
diff --git a/modules/swagger-codegen/src/main/resources/csharp/modelInnerEnum.mustache b/modules/swagger-codegen/src/main/resources/csharp/modelInnerEnum.mustache
new file mode 100644
index 000000000000..4715fd071a48
--- /dev/null
+++ b/modules/swagger-codegen/src/main/resources/csharp/modelInnerEnum.mustache
@@ -0,0 +1,15 @@
+ ///
+ /// {{^description}}Gets or Sets {{{name}}}{{/description}}{{#description}}{{{description}}}{{/description}}
+ /// {{#description}}
+ /// {{{description}}}{{/description}}
+ [JsonConverter(typeof(StringEnumConverter))]
+ public enum {{#datatypeWithEnum}}{{.}}{{/datatypeWithEnum}}{{^datatypeWithEnum}}{{classname}}{{/datatypeWithEnum}}
+ {
+ {{#allowableValues}}{{#enumVars}}
+ ///
+ /// Enum {{name}} for {{{value}}}
+ ///
+ [EnumMember(Value = {{#isInteger}}"{{/isInteger}}{{#isDouble}}"{{/isDouble}}{{{value}}}{{#isInteger}}"{{/isInteger}}{{#isDouble}}"{{/isDouble}})]
+ {{name}}{{#isInteger}} = {{{value}}}{{/isInteger}}{{^-last}},
+ {{/-last}}{{/enumVars}}{{/allowableValues}}
+ }
diff --git a/modules/swagger-codegen/src/main/resources/php/model_enum.mustache b/modules/swagger-codegen/src/main/resources/php/model_enum.mustache
new file mode 100644
index 000000000000..4598f9fdff94
--- /dev/null
+++ b/modules/swagger-codegen/src/main/resources/php/model_enum.mustache
@@ -0,0 +1,17 @@
+class {{classname}} {
+ {{#allowableValues}}{{#enumVars}}const {{{name}}} = {{{value}}};
+ {{/enumVars}}{{/allowableValues}}
+
+ {{#vars}}{{#isEnum}}
+ /**
+ * Gets allowable values of the enum
+ * @return string[]
+ */
+ public function {{getter}}AllowableValues() {
+ return [
+ {{#allowableValues}}{{#enumVars}}self::{{datatypeWithEnum}}_{{{name}}},{{^-last}}
+ {{/-last}}{{/enumVars}}{{/allowableValues}}
+ ];
+ }
+ {{/isEnum}}{{/vars}}
+}
diff --git a/modules/swagger-codegen/src/main/resources/php/model_generic.mustache b/modules/swagger-codegen/src/main/resources/php/model_generic.mustache
new file mode 100644
index 000000000000..006cd09c62a5
--- /dev/null
+++ b/modules/swagger-codegen/src/main/resources/php/model_generic.mustache
@@ -0,0 +1,169 @@
+class {{classname}} {{#parent}}extends {{{parent}}} {{/parent}}implements ArrayAccess
+{
+ /**
+ * Array of property to type mappings. Used for (de)serialization
+ * @var string[]
+ */
+ static $swaggerTypes = array(
+ {{#vars}}'{{name}}' => '{{{datatype}}}'{{#hasMore}},
+ {{/hasMore}}{{/vars}}
+ );
+
+ static function swaggerTypes() {
+ return self::$swaggerTypes{{#parent}} + parent::swaggerTypes(){{/parent}};
+ }
+
+ /**
+ * Array of attributes where the key is the local name, and the value is the original name
+ * @var string[]
+ */
+ static $attributeMap = array(
+ {{#vars}}'{{name}}' => '{{baseName}}'{{#hasMore}},
+ {{/hasMore}}{{/vars}}
+ );
+
+ static function attributeMap() {
+ return {{#parent}}parent::attributeMap() + {{/parent}}self::$attributeMap;
+ }
+
+ /**
+ * Array of attributes to setter functions (for deserialization of responses)
+ * @var string[]
+ */
+ static $setters = array(
+ {{#vars}}'{{name}}' => '{{setter}}'{{#hasMore}},
+ {{/hasMore}}{{/vars}}
+ );
+
+ static function setters() {
+ return {{#parent}}parent::setters() + {{/parent}}self::$setters;
+ }
+
+ /**
+ * Array of attributes to getter functions (for serialization of requests)
+ * @var string[]
+ */
+ static $getters = array(
+ {{#vars}}'{{name}}' => '{{getter}}'{{#hasMore}},
+ {{/hasMore}}{{/vars}}
+ );
+
+ static function getters() {
+ return {{#parent}}parent::getters() + {{/parent}}self::$getters;
+ }
+
+ {{#vars}}{{#isEnum}}{{#allowableValues}}{{#enumVars}}const {{datatypeWithEnum}}_{{{name}}} = {{{value}}};
+ {{/enumVars}}{{/allowableValues}}{{/isEnum}}{{/vars}}
+
+ {{#vars}}{{#isEnum}}
+ /**
+ * Gets allowable values of the enum
+ * @return string[]
+ */
+ public function {{getter}}AllowableValues() {
+ return [
+ {{#allowableValues}}{{#enumVars}}self::{{datatypeWithEnum}}_{{{name}}},{{^-last}}
+ {{/-last}}{{/enumVars}}{{/allowableValues}}
+ ];
+ }
+ {{/isEnum}}{{/vars}}
+
+ {{#vars}}
+ /**
+ * ${{name}} {{#description}}{{{description}}}{{/description}}
+ * @var {{datatype}}
+ */
+ protected ${{name}}{{#defaultValue}} = {{{defaultValue}}}{{/defaultValue}};
+ {{/vars}}
+
+ /**
+ * Constructor
+ * @param mixed[] $data Associated array of property value initalizing the model
+ */
+ public function __construct(array $data = null)
+ {
+ {{#parent}}parent::__construct($data);{{/parent}}
+ if ($data != null) {
+ {{#vars}}$this->{{name}} = $data["{{name}}"];{{#hasMore}}
+ {{/hasMore}}{{/vars}}
+ }
+ }
+ {{#vars}}
+ /**
+ * Gets {{name}}.
+ * @return {{datatype}}
+ */
+ public function {{getter}}()
+ {
+ return $this->{{name}};
+ }
+
+ /**
+ * Sets {{name}}.
+ * @param {{datatype}} ${{name}} {{#description}}{{{description}}}{{/description}}
+ * @return $this
+ */
+ public function {{setter}}(${{name}})
+ {
+ {{#isEnum}}$allowed_values = array({{#allowableValues}}{{#values}}"{{{this}}}"{{^-last}}, {{/-last}}{{/values}}{{/allowableValues}});
+ if (!in_array(${{{name}}}, $allowed_values)) {
+ throw new \InvalidArgumentException("Invalid value for '{{name}}', must be one of {{#allowableValues}}{{#values}}'{{{this}}}'{{^-last}}, {{/-last}}{{/values}}{{/allowableValues}}");
+ }{{/isEnum}}
+ $this->{{name}} = ${{name}};
+ return $this;
+ }
+ {{/vars}}
+ /**
+ * Returns true if offset exists. False otherwise.
+ * @param integer $offset Offset
+ * @return boolean
+ */
+ public function offsetExists($offset)
+ {
+ return isset($this->$offset);
+ }
+
+ /**
+ * Gets offset.
+ * @param integer $offset Offset
+ * @return mixed
+ */
+ public function offsetGet($offset)
+ {
+ return $this->$offset;
+ }
+
+ /**
+ * Sets value based on offset.
+ * @param integer $offset Offset
+ * @param mixed $value Value to be set
+ * @return void
+ */
+ public function offsetSet($offset, $value)
+ {
+ $this->$offset = $value;
+ }
+
+ /**
+ * Unsets offset.
+ * @param integer $offset Offset
+ * @return void
+ */
+ public function offsetUnset($offset)
+ {
+ unset($this->$offset);
+ }
+
+ /**
+ * Gets the string presentation of the object.
+ * @return string
+ */
+ public function __toString()
+ {
+ if (defined('JSON_PRETTY_PRINT')) {
+ return json_encode(\{{invokerPackage}}\ObjectSerializer::sanitizeForSerialization($this), JSON_PRETTY_PRINT);
+ } else {
+ return json_encode(\{{invokerPackage}}\ObjectSerializer::sanitizeForSerialization($this));
+ }
+ }
+}