@@ -29,14 +29,15 @@ public CRDResourceConfig(IServiceProvider serviceProvider)
2929 public void Generate ( V1CustomResourceDefinition crd )
3030 {
3131 _generatedName = crd . Spec ? . Names ? . Kind . Humanize ( LetterCasing . Title ) . Pluralize ( ) ?? base . Name ;
32+ var spec = crd . Spec ?? throw new InvalidOperationException ( "CRD spec is missing." ) ;
3233
3334 // Add Name Column
3435 _columns . Add ( NameColumn ( SortDirection . Ascending ) ) ;
3536
36- var version = crd . Spec . Versions . First ( x => x . Storage ) ;
37+ var version = spec . Versions . First ( x => x . Storage ) ;
3738
3839 //Check if its a namespaced crd
39- if ( crd . Spec . Scope == "Namespaced" )
40+ if ( spec . Scope == "Namespaced" )
4041 {
4142 // Add Namespace Column
4243 _columns . Add ( NamespaceColumn ( ) ) ;
@@ -63,94 +64,55 @@ public void Generate(V1CustomResourceDefinition crd)
6364 {
6465 var exp = JsonPathLINQ . JsonPath . GetExpression < T , string > ( item . JsonPath , true ) ;
6566
66- var colDef = new ResourceListColumn < T , string > ( )
67- {
68- Name = item . Name ,
69- Field = exp . Compile ( ) ,
70- //Width = "*"
71- } ;
67+ var colDef = CreateColumn ( item . Name , exp ) ;
7268
7369 _columns . Add ( colDef ) ;
7470 }
7571 else if ( item . Type == "number" )
7672 {
77- var exp = JsonPathLINQ . JsonPath . GetExpression < T , double > ( item . JsonPath , true ) ;
73+ var exp = JsonPathLINQ . JsonPath . GetExpression < T , double ? > ( item . JsonPath , true ) ;
7874
79- var colDef = new ResourceListColumn < T , double > ( )
80- {
81- Name = item . Name ,
82- Display = TransformToFuncOfString ( exp . Body , exp . Parameters ) . Compile ( ) ,
83- Field = exp . Compile ( ) ,
84- //Width = "*"
85- } ;
75+ var colDef = CreateColumn ( item . Name , exp , TransformToFuncOfString ( exp . Body , exp . Parameters ) . Compile ( ) ) ;
8676
8777 _columns . Add ( colDef ) ;
8878 }
8979 else if ( item . Type == "integer" && item . Format == "int64" )
9080 {
91- var exp = JsonPathLINQ . JsonPath . GetExpression < T , long > ( item . JsonPath , true ) ;
81+ var exp = JsonPathLINQ . JsonPath . GetExpression < T , long ? > ( item . JsonPath , true ) ;
9282
93- var colDef = new ResourceListColumn < T , long > ( )
94- {
95- Name = item . Name ,
96- Display = TransformToFuncOfString ( exp . Body , exp . Parameters ) . Compile ( ) ,
97- Field = exp . Compile ( ) ,
98- //Width = "*"
99- } ;
83+ var colDef = CreateColumn ( item . Name , exp , TransformToFuncOfString ( exp . Body , exp . Parameters ) . Compile ( ) ) ;
10084
10185 _columns . Add ( colDef ) ;
10286 }
10387 else if ( item . Type == "integer" )
10488 {
105- var exp = JsonPathLINQ . JsonPath . GetExpression < T , int > ( item . JsonPath , true ) ;
89+ var exp = JsonPathLINQ . JsonPath . GetExpression < T , int ? > ( item . JsonPath , true ) ;
10690
107- var colDef = new ResourceListColumn < T , int > ( )
108- {
109- Name = item . Name ,
110- Display = TransformToFuncOfString ( exp . Body , exp . Parameters ) . Compile ( ) ,
111- Field = exp . Compile ( ) ,
112- //Width = "*"
113- } ;
91+ var colDef = CreateColumn ( item . Name , exp , TransformToFuncOfString ( exp . Body , exp . Parameters ) . Compile ( ) ) ;
11492
11593 _columns . Add ( colDef ) ;
11694 }
11795 else if ( item . Type == "date" )
11896 {
119- var exp = JsonPathLINQ . JsonPath . GetExpression < T , DateTime > ( item . JsonPath , true ) ;
97+ var exp = JsonPathLINQ . JsonPath . GetExpression < T , DateTime ? > ( item . JsonPath , true ) ;
12098
121- var colDef = new ResourceListColumn < T , DateTime > ( )
122- {
123- Name = item . Name ,
124- Field = exp . Compile ( ) ,
125- //Width = "*"
126- } ;
99+ var colDef = CreateColumn ( item . Name , exp ) ;
127100
128101 _columns . Add ( colDef ) ;
129102 }
130103 else if ( item . Type == "boolean" )
131104 {
132- var exp = JsonPathLINQ . JsonPath . GetExpression < T , bool > ( item . JsonPath , true ) ;
105+ var exp = JsonPathLINQ . JsonPath . GetExpression < T , bool ? > ( item . JsonPath , true ) ;
133106
134- var colDef = new ResourceListColumn < T , bool > ( )
135- {
136- Name = item . Name ,
137- Display = TransformToFuncOfString ( exp . Body , exp . Parameters ) . Compile ( ) ,
138- Field = exp . Compile ( ) ,
139- //Width = "*"
140- } ;
107+ var colDef = CreateColumn ( item . Name , exp , TransformToFuncOfString ( exp . Body , exp . Parameters ) . Compile ( ) ) ;
141108
142109 _columns . Add ( colDef ) ;
143110 }
144111 else if ( item . Type == "enum" )
145112 {
146113 var exp = JsonPathLINQ . JsonPath . GetExpression < T , Enum > ( item . JsonPath , true ) ;
147114
148- var colDef = new ResourceListColumn < T , string > ( )
149- {
150- Name = item . Name ,
151- Field = TransformToFuncOfString ( exp . Body , exp . Parameters ) . Compile ( ) ,
152- //Width = "*"
153- } ;
115+ var colDef = CreateColumn < string > ( item . Name , TransformToFuncOfString ( exp . Body , exp . Parameters ) . Compile ( ) ) ;
154116
155117 _columns . Add ( colDef ) ;
156118 }
@@ -253,7 +215,7 @@ private static Expression<Func<T, string>> TransformToFuncOfString(Expression ex
253215 {
254216 // Create a method to get the enum member name from the JsonStringEnumMemberNameAttribute
255217 var getEnumMemberNameMethod = typeof ( CRDResourceConfig < > ) . GetMethod ( nameof ( GetEnumMemberName ) , BindingFlags . NonPublic | BindingFlags . Static )
256- . MakeGenericMethod ( expression . Type ) ;
218+ ? . MakeGenericMethod ( expression . Type ) ?? throw new InvalidOperationException ( "Unable to resolve enum member formatter." ) ;
257219
258220 // Call the method to get the enum member name
259221 var bodyAsString = Expression . Call ( getEnumMemberNameMethod , expression ) ;
@@ -284,6 +246,26 @@ private static Expression<Func<T, string>> TransformToFuncOfString(Expression ex
284246 }
285247 }
286248
249+ private static ResourceListColumn < T , TValue > CreateColumn < TValue > ( string name , Expression < Func < T , TValue > > expression , Func < T , string > ? display = null )
250+ {
251+ return new ResourceListColumn < T , TValue > ( )
252+ {
253+ Name = name ,
254+ Display = display ,
255+ Field = expression . Compile ( ) ,
256+ } ;
257+ }
258+
259+ private static ResourceListColumn < T , TValue > CreateColumn < TValue > ( string name , Func < T , TValue > field , Func < T , string > ? display = null )
260+ {
261+ return new ResourceListColumn < T , TValue > ( )
262+ {
263+ Name = name ,
264+ Display = display ,
265+ Field = field ,
266+ } ;
267+ }
268+
287269 private static string GetEnumMemberName < TEnum > ( TEnum enumValue ) where TEnum : Enum
288270 {
289271 var memberInfo = typeof ( TEnum ) . GetMember ( enumValue . ToString ( ) ) . FirstOrDefault ( ) ;
0 commit comments