Skip to content

Commit 503000f

Browse files
committed
added CoreType
1 parent 6d637f2 commit 503000f

File tree

4 files changed

+137
-5
lines changed

4 files changed

+137
-5
lines changed

src/Linq2GraphQL.Generator/GraphQLSchema/RootSchema.cs

Lines changed: 121 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ public string GetInterfacesString(string baseClass = null)
6262
interfaces += "Linq2GraphQL.Client.Common.ICursorPaging";
6363
}
6464

65-
65+
6666

6767
if (!string.IsNullOrWhiteSpace(interfaces))
6868
{
@@ -145,6 +145,18 @@ public TypeInfo FieldInfo
145145
}
146146
}
147147

148+
private CoreType coreType;
149+
public CoreType CoreType
150+
{
151+
get
152+
{
153+
coreType ??= Type.GetCoreType();
154+
return coreType;
155+
}
156+
}
157+
158+
159+
148160
private TypeInfo GetFieldTypeInfo()
149161
{
150162

@@ -168,25 +180,29 @@ private TypeInfo GetFieldTypeInfo()
168180
}
169181

170182

183+
var coreType = Type.GetCoreType();
184+
171185
var isList = allTypes.Any(e => e.Kind == TypeKind.List);
172186
var isNoneNull = allTypes.Any(e => e.Kind == TypeKind.NonNull);
173-
187+
174188
var graphTypeDefinition = isNoneNull ? baseFieldType.Name + "!" : baseFieldType.Name;
175189
if (isList)
176190
{
177191
graphTypeDefinition = $"[{graphTypeDefinition}]";
192+
var gr = coreType.GetGraphQLTypeDefinition();
193+
var cs = coreType.GetCSharpTypeDefinition();
178194
}
179195

180196
return new TypeInfo
181197
{
182-
198+
183199
Kind = baseFieldType.Kind,
184200
IsList = isList,
185201
IsNoneNull = isNoneNull,
186202
CSharpType = csharpType,
187203
CSharpTypeName = csharpTypeName,
188204
GraphTypeDefinition = graphTypeDefinition,
189-
IsEnum = baseFieldType.Kind == TypeKind.Enum
205+
IsEnum = baseFieldType.Kind == TypeKind.Enum
190206
};
191207
}
192208

@@ -347,4 +363,105 @@ public BaseType GetBaseBaseType()
347363
return OfType.GetBaseBaseType();
348364
}
349365

366+
367+
public CoreType GetCoreType()
368+
{
369+
var result = new CoreType();
370+
371+
372+
bool currentNoneNull = false;
373+
374+
foreach (var type in GetAllTypes())
375+
{
376+
377+
switch (type.Kind)
378+
{
379+
case TypeKind.NonNull:
380+
currentNoneNull = true;
381+
break;
382+
case TypeKind.List:
383+
result.Lists.Add(new CoreTypeList { NoneNull = currentNoneNull });
384+
currentNoneNull = false;
385+
break;
386+
default:
387+
388+
result.NoneNull = currentNoneNull;
389+
result.BaseType = type;
390+
currentNoneNull = false;
391+
break;
392+
393+
}
394+
}
395+
396+
result.Lists.Reverse();
397+
398+
if (Helpers.TypeMapping.TryGetValue(result.BaseType.Name, out var typeMapping))
399+
{
400+
result.CSharpTypeName = typeMapping.Name;
401+
result.CSharpType = typeMapping.type;
402+
}
403+
else
404+
{
405+
result.CSharpTypeName = result.BaseType.Name.ToPascalCase();
406+
}
407+
408+
result.OuterNoneNull = result.Lists.FirstOrDefault()?.NoneNull ?? result.NoneNull;
409+
410+
return result;
411+
412+
}
413+
414+
415+
}
416+
417+
418+
public class CoreTypeList
419+
{
420+
public bool NoneNull { get; set; }
421+
}
422+
423+
public class CoreType
424+
{
425+
public BaseType BaseType { get; set; }
426+
public bool NoneNull { get; set; }
427+
public bool OuterNoneNull { get; set; }
428+
public string CSharpTypeName { get; set; }
429+
public Type CSharpType { get; set; }
430+
public List<CoreTypeList> Lists { get; set; } = [];
431+
432+
433+
434+
435+
public string GetGraphQLTypeDefinition()
436+
{
437+
var result = BaseType.Name;
438+
439+
if (NoneNull) { result += "!"; }
440+
441+
foreach (var list in Lists)
442+
{
443+
result = $"[{result}]";
444+
if (list.NoneNull) { result += "!"; }
445+
}
446+
447+
return result;
448+
449+
}
450+
451+
public string GetCSharpTypeDefinition()
452+
{
453+
var result = CSharpTypeName;
454+
455+
if (!NoneNull) { result += "?"; }
456+
457+
foreach (var list in Lists)
458+
{
459+
result = $"List<{result}>";
460+
if (!list.NoneNull) { result += "?"; }
461+
}
462+
463+
return result;
464+
465+
}
466+
350467
}

src/Linq2GraphQL.Generator/Properties/launchSettings.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
"profiles": {
33
"Linq2GraphQL.Generator": {
44
"commandName": "Project",
5-
"commandLineArgs": "https://localhost:7184/graphql/ -c=\"SampleClient\" -n=\"Linq2GraphQL.TestClient\" -o=\"C:\\Code\\Github\\Linq2GraphQL.Client\\test\\Linq2GraphQL.TestClient\\Generated\" -s=true"
5+
"commandLineArgs": "https://localhost:50741/graphql/ -c=\"SampleNullableClient\" -n=\"Linq2GraphQL.TestClientNullable\" -o=\"C:\\Code\\Github\\Linq2GraphQL.Client\\test\\Linq2GraphQL.TestClientNullable\\Generated\" -s=true -nu=true"
66
}
77
}
88
}

test/Linq2GraphQL.TestClientNullable/Generated/Client/QueryMethods.cs

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,4 +49,13 @@ public GraphQuery<List<Customer>> CustomerListNullable()
4949
return new GraphQuery<List<Customer>>(client, "customerListNullable", OperationType.Query, arguments);
5050
}
5151

52+
public GraphQuery<List<Customer>> CustomerListInList()
53+
{
54+
var arguments = new List<ArgumentValue>
55+
{
56+
};
57+
58+
return new GraphQuery<List<Customer>>(client, "customerListInList", OperationType.Query, arguments);
59+
}
60+
5261
}

test/Linq2GraphQL.TestServerNullable/Query.cs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,5 +26,11 @@ public List<Customer> GetCustomerList()
2626
{
2727
return null;
2828
}
29+
30+
public List<List<Customer>> GetCustomerListInList()
31+
{
32+
return [SampleData.GetCustomers()];
33+
}
34+
2935
}
3036
}

0 commit comments

Comments
 (0)