public ICodeDescriptor Generate(IModelGeneratorContext context, EnumType enumType)
        {
            var values = new List <EnumValueDescriptor>();

            foreach (EnumValue value in enumType.Values)
            {
                IDirective directive = value.Directives.FirstOrDefault(t =>
                                                                       t.Name.Equals(GeneratorDirectives.Name) &&
                                                                       t.GetArgument <string>(GeneratorDirectives.ValueArgument) != null);

                string name = directive is null
                    ? GetPropertyName(value.Name.ToLowerInvariant())
                    : directive.GetArgument <string>(GeneratorDirectives.ValueArgument);

                values.Add(new EnumValueDescriptor(name, value.Name));
            }

            NameString typeName = context.GetOrCreateName(
                enumType.SyntaxNode,
                GetClassName(enumType.Name));

            var descriptor = new EnumDescriptor(
                typeName,
                context.Namespace,
                values);

            context.Register(descriptor);

            return(descriptor);
        }