public override async Task Generate(CodeModel serviceClient)
        {
            var apiVersions = serviceClient.Methods
                              .SelectMany(method => method.XMsMetadata.apiVersions)
                              .Concat(new [] { serviceClient.ApiVersion })
                              .Where(each => each != null)
                              .Distinct().ToArray();

            foreach (var version in apiVersions)
            {
                var results = CodeModelProcessor.GenerateTypes(serviceClient, version);

                foreach (var result in results)
                {
                    var generatedTypes = result.TypeFactory.GetTypes();

                    var typesJson = TypeSerializer.Serialize(generatedTypes);
                    await Write(typesJson, Path.Combine(result.ProviderNamespace, result.ApiVersion, "types.json"), true);
                }
            }
        }