@@ -279,6 +279,55 @@ public static string[] GetArgumentTags(string command)
279279 . Where ( a => a . Success )
280280 . Select ( a => a . Groups [ 1 ] . Value ) ] ;
281281
282+ /// <summary>
283+ /// Get parameter names for a resource and method (excludes path keys).
284+ /// </summary>
285+ public static string [ ] GetMethodParameters ( ClassApi classApiRoot , string resource , MethodType methodType )
286+ {
287+ var classApi = ClassApi . GetFromResource ( classApiRoot , resource ) ;
288+ if ( classApi == null ) { return [ ] ; }
289+ var humanized = methodType switch
290+ {
291+ MethodType . Get => "get" ,
292+ MethodType . Set => "put" ,
293+ MethodType . Create => "post" ,
294+ MethodType . Delete => "delete" ,
295+ _ => methodType . ToString ( ) . ToLower ( )
296+ } ;
297+ var method = classApi . Methods . FirstOrDefault ( m =>
298+ string . Equals ( m . MethodType , humanized , StringComparison . OrdinalIgnoreCase ) ) ;
299+ if ( method == null ) { return [ ] ; }
300+ return [ .. method . Parameters
301+ . Where ( p => ! classApi . Keys . Contains ( p . Name ) )
302+ . Select ( p => p . Name ) ] ;
303+ }
304+
305+ /// <summary>
306+ /// Get enum values for a specific parameter of a resource/method. Returns empty if not an enum.
307+ /// </summary>
308+ public static string [ ] GetMethodParameterEnumValues ( ClassApi classApiRoot , string resource , MethodType methodType , string paramName )
309+ {
310+ var classApi = ClassApi . GetFromResource ( classApiRoot , resource ) ;
311+ if ( classApi == null ) { return [ ] ; }
312+ var humanized = methodType switch
313+ {
314+ MethodType . Get => "get" ,
315+ MethodType . Set => "put" ,
316+ MethodType . Create => "post" ,
317+ MethodType . Delete => "delete" ,
318+ _ => methodType . ToString ( ) . ToLower ( )
319+ } ;
320+ var method = classApi . Methods . FirstOrDefault ( m =>
321+ string . Equals ( m . MethodType , humanized , StringComparison . OrdinalIgnoreCase ) ) ;
322+ if ( method == null ) { return [ ] ; }
323+ var param = method . Parameters . FirstOrDefault ( p =>
324+ string . Equals ( p . Name , paramName , StringComparison . OrdinalIgnoreCase ) ) ;
325+ if ( param == null ) { return [ ] ; }
326+ if ( param . EnumValues . Length > 0 ) { return param . EnumValues ; }
327+ if ( string . Equals ( param . Type , "boolean" , StringComparison . OrdinalIgnoreCase ) ) { return [ "0" , "1" ] ; }
328+ return [ ] ;
329+ }
330+
282331 /// <summary>
283332 /// Create parameter resource split ':'
284333 /// </summary>
@@ -475,7 +524,10 @@ private static object GetValue(object value, string key, List<ParameterApi> retu
475524 }
476525 else
477526 {
478- return returnParameters . FirstOrDefault ( a => a . Name == key ) . RendererValue ( value ) ;
527+ var param = returnParameters . FirstOrDefault ( a => a . Name == key ) ;
528+ return param != null
529+ ? param . RendererValue ( value )
530+ : ( value is ExpandoObject || value is IList ) ? JsonConvert . SerializeObject ( value ) : value ;
479531 }
480532 }
481533
@@ -525,13 +577,15 @@ private static void CreateTable(IEnumerable<ParameterApi> parameters, StringBuil
525577 /// <param name="returnsType"></param>
526578 /// <param name="command"></param>
527579 /// <param name="verbose"></param>
580+ /// <param name="optionStyle"></param>
528581 /// <returns></returns>
529582 public static string Usage ( ClassApi classApiRoot ,
530583 string resource ,
531584 TableGenerator . Output output ,
532585 bool returnsType = false ,
533586 string command = null ,
534- bool verbose = false )
587+ bool verbose = false ,
588+ bool optionStyle = false )
535589 {
536590 var ret = new StringBuilder ( ) ;
537591 var classApi = ClassApi . GetFromResource ( classApiRoot , resource ) ;
@@ -555,7 +609,8 @@ public static string Usage(ClassApi classApiRoot,
555609 //only parameters no keys
556610 var parameters = method . Parameters . Where ( a => ! classApi . Keys . Contains ( a . Name ) ) ;
557611
558- var opts = string . Join ( string . Empty , parameters . Where ( a => ! a . Optional ) . Select ( a => $ " { a . Name } :<{ a . Type } >") ) ;
612+ var opts = string . Join ( string . Empty , parameters . Where ( a => ! a . Optional )
613+ . Select ( a => optionStyle ? $ " --{ a . Name } <{ a . Type } >" : $ " { a . Name } :<{ a . Type } >") ) ;
559614 if ( ! string . IsNullOrWhiteSpace ( opts ) ) { ret . Append ( opts ) ; }
560615
561616 //optional parameter
0 commit comments