Example #1
0
        public static IEnumerable <GenerateResult> GenerateTypes(CodeModel serviceClient, string apiVersion)
        {
            if (serviceClient == null)
            {
                throw new ArgumentNullException(nameof(serviceClient));
            }

            var providerDefinitions = new Dictionary <string, ProviderDefinition>(StringComparer.OrdinalIgnoreCase);

            foreach (var putMethod in serviceClient.Methods.Where(method => ShouldProcess(serviceClient, method, apiVersion)))
            {
                var(success, failureReason, resourceDescriptors) = ParseMethod(putMethod, apiVersion);
                if (!success)
                {
                    LogWarning($"Skipping path '{putMethod.Url}': {failureReason}");
                    continue;
                }

                var getMethod = serviceClient.Methods.FirstOrDefault(x => x.Url == putMethod.Url && x.HttpMethod == HttpMethod.Get);

                foreach (var descriptor in resourceDescriptors)
                {
                    if (!providerDefinitions.ContainsKey(descriptor.ProviderNamespace))
                    {
                        providerDefinitions[descriptor.ProviderNamespace] = new ProviderDefinition
                        {
                            Namespace  = descriptor.ProviderNamespace,
                            ApiVersion = apiVersion,
                            Model      = serviceClient,
                        };
                    }
                    var providerDefinition = providerDefinitions[descriptor.ProviderNamespace];

                    providerDefinition.ResourceDefinitions.Add(new ResourceDefinition
                    {
                        Descriptor      = descriptor,
                        DeclaringMethod = putMethod,
                        GetMethod       = getMethod,
                    });
                }
            }

            return(providerDefinitions.Select(definition => ProviderTypeGenerator.Generate(serviceClient, definition.Value)));
        }
Example #2
0
        public static GenerateResult Generate(CodeModel codeModel, ProviderDefinition definition)
        {
            var generator = new ProviderTypeGenerator(codeModel, definition);

            return(generator.Process());
        }