static void RenderClass(StringBuilder text, GenContext context, GenSelectionSet selectionSet)
        {
            text.Append("  public class " + TypeName(selectionSet));

            if (selectionSet.RefFragments.Any())
            {
                text.Append(" : ");
                text.AppendJoin(", ", selectionSet.RefFragments.Select(f => TypeReferenceName(context, f, true)));
            }

            text.AppendLine();
            text.AppendLine("  {");

            foreach (var fragment in selectionSet.RefFragments)
            {
                foreach (var property in fragment.Fields)
                {
                    text.AppendLine("    public " + TypeReferenceName(context, property.Type) + " " + UpperCaseFirst(property.Name) + " " + PropertyBody(context));
                }
            }

            foreach (var property in selectionSet.Fields)
            {
                text.AppendLine("    public " + TypeReferenceName(context, property.Type) + " " + UpperCaseFirst(property.Name) + " " + PropertyBody(context));
            }

            text.AppendLine("  }");
        }
        static string TypeName(GenSelectionSet selectionSet)
        {
            var name = selectionSet.Name;

            name = UpperCaseFirst(name);
            return(name);
        }
        static void Run(GenContext context, SelectionSet set, GenSelectionSet selectionSet)
        {
            foreach (var selection in set.Selections)
            {
                switch (selection)
                {
                case Field field:
                {
                    var fieldType = ((ObjectGraphType)selectionSet.GraphType).GetField(field.Name);

                    var propertyType = selectionSet.Namespace.CreateReference(fieldType.ResolvedType, field);
                    selectionSet.AddField(field.Alias ?? field.Name, propertyType);

                    Run(context, field.SelectionSet, propertyType.GetSelectionSet());

                    break;
                }

                case FragmentSpread fragment:
                {
                    var fragmentType = context.Fragments.SelectionSets.Find(t => t.Name == fragment.Name);
                    selectionSet.AddFragment(fragmentType);
                    break;
                }

                case InlineFragment inline:
                {
                    throw new NotImplementedException();
                }

                default:
                    throw new InvalidOperationException("Uh whats that?");
                }
            }
        }
        static void RenderInterface(StringBuilder text, GenContext context, GenSelectionSet selectionSet)
        {
            text.AppendLine("  public interface " + TypeName(selectionSet));
            text.AppendLine("  {");

            foreach (var property in selectionSet.Fields)
            {
                text.AppendLine("    " + TypeReferenceName(context, property.Type) + " " + UpperCaseFirst(property.Name) + " " + PropertyBody(context));
            }

            text.AppendLine("  }");
        }
        public GenSelectionSet CreateSelectionSet(IGraphType graphType, INode node)
        {
            if (graphType == null)
            {
                return(null);
            }
            var selectionSet = new GenSelectionSet {
                Namespace = this, Name = graphType.Name, GraphType = graphType, Node = node
            };

            if (!selectionSet.MapsToBuildInType)
            {
                SelectionSets.Add(selectionSet);
            }
            return(selectionSet);
        }
        static Type GetClrType(GenSelectionSet selectionSet)
        {
            switch (selectionSet.GraphType)
            {
            case IntGraphType _:
                return(typeof(long));

            case FloatGraphType _:
                return(typeof(double));

            case DecimalGraphType _:
                return(typeof(decimal));

            case StringGraphType _:
                return(typeof(string));

            case BooleanGraphType _:
                return(typeof(bool));

            case DateGraphType _:
                return(typeof(DateTime));

            case DateTimeOffsetGraphType _:
                return(typeof(DateTimeOffset));

            case TimeSpanSecondsGraphType _:
                return(typeof(TimeSpan));

            case IdGraphType _:
                return(typeof(string));

            case ShortGraphType _:
                return(typeof(short));

            case UShortGraphType _:
                return(typeof(ushort));

            case ULongGraphType _:
                return(typeof(ulong));

            case UIntGraphType _:
                return(typeof(uint));
            }
            return(null);
        }
        static void Run(GenSelectionSet set)
        {
            switch (set.GraphType)
            {
            case IComplexGraphType complexType:
            {
                foreach (var fieldType in complexType.Fields)
                {
                    var fieldReference = set.Namespace.CreateReference(fieldType.ResolvedType, null);
                    set.AddField(fieldType.Name, fieldReference);
                    Run(fieldReference.GetSelectionSet());
                }
                break;
            }

            default:
                return;
            }
        }
Example #8
0
 public void AddFragment(GenSelectionSet fragment)
 => RefFragments.Add(fragment);