Forge
csharpdeeb25a2
1namespace CascadeIDE.Services;
2
3internal static class IdeCommandsArgs
4{
5 internal readonly record struct Arg(string Name, string JsonType, bool Required, bool IsArray, string? ItemJsonType);
6
7 public static bool TryGetArgs(string commandId, out Arg[] args)
8 {
9 // Keep the main build independent from doc generation.
10 // When docs generation is enabled, tools/CascadeIDE.ProtocolDocGen produces IdeCommandsArgsGenerated
11 // which we locate via reflection.
12 try
13 {
14 var t = Type.GetType("CascadeIDE.Services.IdeCommandsArgsGenerated, CascadeIDE", throwOnError: false);
15 if (t is null)
16 {
17 args = Array.Empty<Arg>();
18 return false;
19 }
20
21 var m = t.GetMethod("TryGetArgs", System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Static);
22 if (m is null)
23 {
24 args = Array.Empty<Arg>();
25 return false;
26 }
27
28 object?[] invokeArgs = [commandId, null!];
29 var okObj = m.Invoke(null, invokeArgs);
30 if (okObj is bool ok && ok && invokeArgs[1] is Arg[] arr)
31 {
32 args = arr;
33 return true;
34 }
35
36 args = invokeArgs[1] as Arg[] ?? Array.Empty<Arg>();
37 return okObj is bool ok2 && ok2;
38 }
39 catch
40 {
41 args = Array.Empty<Arg>();
42 return false;
43 }
44 }
45}
46
47internal enum IdeReturnKind
48{
49 Unspecified = 0,
50 Text = 1,
51 Json = 2,
52 None = 3
53}
54
55internal static class IdeCommandsContract
56{
57 public static bool TryGetReturns(string commandId, out IdeReturnKind kind)
58 {
59 kind = IdeReturnKind.Unspecified;
60 try
61 {
62 var t = Type.GetType("CascadeIDE.Services.IdeCommandsContractGenerated, CascadeIDE", throwOnError: false);
63 if (t is null)
64 return false;
65
66 var m = t.GetMethod("TryGetReturns", System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Static);
67 if (m is null)
68 return false;
69
70 object?[] invokeArgs = [commandId, null];
71 var okObj = m.Invoke(null, invokeArgs);
72 if (okObj is bool ok && ok && invokeArgs[1] is IdeReturnKind rk)
73 {
74 kind = rk;
75 return true;
76 }
77
78 if (invokeArgs[1] is IdeReturnKind rk2)
79 kind = rk2;
80
81 return okObj is bool ok2 && ok2;
82 }
83 catch
84 {
85 kind = IdeReturnKind.Unspecified;
86 return false;
87 }
88 }
89
90 public static bool TryGetExample(string commandId, out string example)
91 {
92 example = "";
93 try
94 {
95 var t = Type.GetType("CascadeIDE.Services.IdeCommandsContractGenerated, CascadeIDE", throwOnError: false);
96 if (t is null)
97 return false;
98
99 var m = t.GetMethod("TryGetExample", System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Static);
100 if (m is null)
101 return false;
102
103 object?[] invokeArgs = [commandId, null];
104 var okObj = m.Invoke(null, invokeArgs);
105 if (okObj is bool ok && ok && invokeArgs[1] is string s)
106 {
107 example = s;
108 return true;
109 }
110
111 example = invokeArgs[1] as string ?? "";
112 return okObj is bool ok2 && ok2;
113 }
114 catch
115 {
116 example = "";
117 return false;
118 }
119 }
120}
121
122
View only · write via MCP/CIDE