@@ -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}
0 commit comments