/// <summary> /// Add NextLink attribute for pageable extension for the method. /// </summary> /// <returns></returns> public string NextLink() { var nextLink = ""; // Note: // -- The CSharp generator applies a default link name if the extension is present but the link name is not. // Yet, the MSDN for methods whose nextLink is missing are not paged methods. It appears the CSharp code is // outdated vis a vis the specification. // TODO (gosdk): Ensure obtaining the nextLink is correct. if (Extensions.ContainsKey(AzureExtensions.PageableExtension)) { var pageableExtension = Extensions[AzureExtensions.PageableExtension] as Newtonsoft.Json.Linq.JContainer; if (pageableExtension != null) { var nextLinkName = (string)pageableExtension["nextLinkName"]; if (!string.IsNullOrEmpty(nextLinkName)) { nextLink = CodeNamerGo.PascalCaseWithoutChar(nextLinkName, '.'); } } } return(nextLink); }
public string Fields() { var indented = new IndentedStringBuilder(" "); var properties = Properties.Cast <PropertyGo>().ToList(); if (BaseModelType != null) { indented.Append(((CompositeTypeGo)BaseModelType).Fields()); } // If the type is a paged model type, ensure the nextLink field exists // Note: Inject the field into a copy of the property list so as to not pollute the original list if (!string.IsNullOrEmpty(NextLink)) { var nextLinkField = NextLink; foreach (Property p in properties) { p.Name = CodeNamerGo.PascalCaseWithoutChar(p.Name, '.'); if (p.Name.EqualsIgnoreCase(nextLinkField)) { p.Name = nextLinkField; } } var baseHasNextLink = false; if (BaseModelType != null) { baseHasNextLink = BaseModelType.Properties.Any(p => p.Name.EqualsIgnoreCase(nextLinkField)); } if (!baseHasNextLink && !properties.Any(p => p.Name.EqualsIgnoreCase(nextLinkField))) { var property = new PropertyGo(); property.Name = nextLinkField; property.ModelType = new PrimaryTypeGo(KnownPrimaryType.String); properties.Add(property); } } // Emit each property, except for named Enumerated types, as a pointer to the type foreach (var property in properties) { var enumType = property.ModelType as EnumTypeGo; if (enumType != null && enumType.IsNamed) { indented.AppendFormat("{0} {1} {2}\n", property.Name, enumType.Name, property.JsonTag()); } else if (property.ModelType is DictionaryType) { indented.AppendFormat("{0} *{1} {2}\n", property.Name, (property.ModelType as DictionaryTypeGo).Name, property.JsonTag()); } else if (property.ModelType.PrimaryType(KnownPrimaryType.Object)) { // TODO: I don't think this is the best way to handle object types indented.AppendFormat("{0} *{1} {2}\n", property.Name, property.ModelType.Name, property.JsonTag()); } else if (property.ShouldBeFlattened()) { // embed as an anonymous struct. note that the ordering of this clause is // important, i.e. we don't want to flatten primary types like dictionaries. indented.AppendFormat("*{0} {1}\n", property.ModelType.Name, property.JsonTag()); property.Extensions[SwaggerExtensions.FlattenOriginalTypeName] = Name; } else { indented.AppendFormat("{0} *{1} {2}\n", property.Name, property.ModelType.Name, property.JsonTag()); } } return(indented.ToString()); }