public static string Fields(this CompositeType compositeType) { var indented = new IndentedStringBuilder(" "); var properties = compositeType.Properties; if (compositeType.BaseModelType != null) { indented.Append(compositeType.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 (compositeType is ModelTemplateModel && !String.IsNullOrEmpty((compositeType as ModelTemplateModel).NextLink)) { var nextLinkField = (compositeType as ModelTemplateModel).NextLink; foreach (Property p in properties) { p.Name = GoCodeNamer.PascalCaseWithoutChar(p.Name, '.'); if (p.Name.Equals(nextLinkField, StringComparison.OrdinalIgnoreCase)) { p.Name = nextLinkField; } } if (!properties.Any(p => p.Name.Equals(nextLinkField, StringComparison.OrdinalIgnoreCase))) { var property = new Property(); property.Name = nextLinkField; property.Type = new PrimaryType(KnownPrimaryType.String) { Name = "string" }; properties = new List <Property>(properties); properties.Add(property); } } // Emit each property, except for named Enumerated types, as a pointer to the type foreach (var property in properties) { EnumType enumType = property.Type as EnumType; if (enumType != null && enumType.IsNamed()) { indented.AppendFormat("{0} {1} {2}\n", property.Name, enumType.Name, property.JsonTag()); } else if (property.Type is DictionaryType) { indented.AppendFormat("{0} *{1} {2}\n", property.Name, (property.Type as MapType).FieldName, property.JsonTag()); } else { indented.AppendFormat("{0} *{1} {2}\n", property.Name, property.Type.Name, property.JsonTag()); } } return(indented.ToString()); }
/// <summary> /// Add NextLink attribute for pageable extension for the method. /// </summary> /// <param name="method"></param> /// <returns></returns> public static string NextLink(this Method method) { 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 (method.Extensions.ContainsKey(AzureExtensions.PageableExtension)) { var pageableExtension = method.Extensions[AzureExtensions.PageableExtension] as Newtonsoft.Json.Linq.JContainer; if (pageableExtension != null) { var nextLinkName = (string)pageableExtension["nextLinkName"]; if (!string.IsNullOrEmpty(nextLinkName)) { nextLink = GoCodeNamer.PascalCaseWithoutChar(nextLinkName, '.'); } } } return(nextLink); }