AtsGoCodeGenerator.cs (148)
97WriteLine("// aspire.go - Capability-based Aspire SDK");
98WriteLine("// GENERATED CODE - DO NOT EDIT");
99WriteLine();
100WriteLine("package aspire");
101WriteLine();
102WriteLine("import (");
103WriteLine("\t\"fmt\"");
104WriteLine("\t\"os\"");
105WriteLine(")");
106WriteLine();
116WriteLine("// ============================================================================");
117WriteLine("// Enums");
118WriteLine("// ============================================================================");
119WriteLine();
129WriteLine($"// {enumName} represents {enumType.Name}.");
130WriteLine($"type {enumName} string");
131WriteLine();
132WriteLine("const (");
136WriteLine($"\t{memberName} {enumName} = \"{member}\"");
138WriteLine(")");
139WriteLine();
150WriteLine("// ============================================================================");
151WriteLine("// DTOs");
152WriteLine("// ============================================================================");
153WriteLine();
164WriteLine($"// {dtoName} represents {dto.Name}.");
165WriteLine($"type {dtoName} struct {{");
168WriteLine("}");
169WriteLine();
178WriteLine($"\t{propertyName} {propertyType} {jsonTag}");
180WriteLine("}");
181WriteLine();
184WriteLine($"// ToMap converts the DTO to a map for JSON serialization.");
185WriteLine($"func (d *{dtoName}) ToMap() map[string]any {{");
186WriteLine("\treturn map[string]any{");
190WriteLine($"\t\t\"{property.Name}\": SerializeValue(d.{propertyName}),");
192WriteLine("\t}");
193WriteLine("}");
194WriteLine();
207WriteLine("// ============================================================================");
208WriteLine("// Handle Wrappers");
209WriteLine("// ============================================================================");
210WriteLine();
251WriteLine($"// {handleType.StructName} wraps a handle for {handleType.TypeId}.");
252WriteLine($"type {handleType.StructName} struct {{");
253WriteLine($"\t{baseStruct}");
256WriteLine($"\t{fieldName} {fieldType}");
258WriteLine("}");
259WriteLine();
262WriteLine($"// New{handleType.StructName} creates a new {handleType.StructName}.");
263WriteLine($"func New{handleType.StructName}(handle *Handle, client *AspireClient) *{handleType.StructName} {{");
264WriteLine($"\treturn &{handleType.StructName}{{");
265WriteLine($"\t\t{baseStruct}: New{baseStruct}(handle, client),");
266WriteLine("\t}");
267WriteLine("}");
268WriteLine();
324WriteLine($"// {methodName} {char.ToLowerInvariant(capability.Description[0])}{capability.Description[1..]}");
328WriteLine($"func (s *{structName}) {methodName}({paramList}) {returnSignature} {{");
329WriteLine("\treqArgs := map[string]any{");
330WriteLine($"\t\t\"{targetParamName}\": SerializeValue(s.Handle()),");
331WriteLine("\t}");
338WriteLine($"\tif {paramName} != nil {{");
339WriteLine($"\t\treqArgs[\"{parameter.Name}\"] = RegisterCallback({paramName})");
340WriteLine("\t}");
346WriteLine($"\tif {paramName} != nil {{");
347WriteLine($"\t\treqArgs[\"{parameter.Name}\"] = RegisterCancellation({paramName}, s.Client())");
348WriteLine("\t}");
360WriteLine($"\tif {paramName} != nil {{");
361WriteLine($"\t\treqArgs[\"{parameter.Name}\"] = SerializeValue({paramName})");
362WriteLine("\t}");
366WriteLine($"\treqArgs[\"{parameter.Name}\"] = SerializeValue({paramName})");
372WriteLine($"\tresult, err := s.Client().InvokeCapability(\"{capability.CapabilityId}\", reqArgs)");
373WriteLine("\tif err != nil {");
374WriteLine("\t\treturn nil, err");
375WriteLine("\t}");
379WriteLine($"\treturn result.({returnType}), nil");
383WriteLine("\treturn result, nil");
387WriteLine($"\treturn result.(*{returnType}), nil");
392WriteLine($"\t_, err := s.Client().InvokeCapability(\"{capability.CapabilityId}\", reqArgs)");
393WriteLine("\treturn err");
396WriteLine("}");
397WriteLine();
435WriteLine($"// {methodName} {char.ToLowerInvariant(capability.Description[0])}{capability.Description[1..]}");
440WriteLine($"func (s *{structName}) {methodName}() *{wrapperType}{typeArgs} {{");
441WriteLine($"\tif s.{fieldName} == nil {{");
442WriteLine($"\t\ts.{fieldName} = {factoryFunc}{typeArgs}(s.Handle(), s.Client(), \"{capability.CapabilityId}\")");
443WriteLine("\t}");
444WriteLine($"\treturn s.{fieldName}");
445WriteLine("}");
446WriteLine();
453WriteLine("// ============================================================================");
454WriteLine("// Handle wrapper registrations");
455WriteLine("// ============================================================================");
456WriteLine();
457WriteLine("func init() {");
461WriteLine($"\tRegisterHandleWrapper(\"{handleType.TypeId}\", func(h *Handle, c *AspireClient) any {{");
462WriteLine($"\t\treturn New{handleType.StructName}(h, c)");
463WriteLine("\t})");
470WriteLine($"\tRegisterHandleWrapper(\"{typeId}\", func(h *Handle, c *AspireClient) any {{");
471WriteLine($"\t\treturn &{wrapperType}{typeArgs}{{HandleWrapperBase: NewHandleWrapperBase(h, c)}}");
472WriteLine("\t})");
475WriteLine("}");
476WriteLine();
485WriteLine("// ============================================================================");
486WriteLine("// Connection Helpers");
487WriteLine("// ============================================================================");
488WriteLine();
489WriteLine("// Connect establishes a connection to the AppHost server.");
490WriteLine("func Connect() (*AspireClient, error) {");
491WriteLine("\tsocketPath := os.Getenv(\"REMOTE_APP_HOST_SOCKET_PATH\")");
492WriteLine("\tif socketPath == \"\" {");
493WriteLine("\t\treturn nil, fmt.Errorf(\"REMOTE_APP_HOST_SOCKET_PATH environment variable not set. Run this application using `aspire run`\")");
494WriteLine("\t}");
495WriteLine("\tclient := NewAspireClient(socketPath)");
496WriteLine("\tif err := client.Connect(); err != nil {");
497WriteLine("\t\treturn nil, err");
498WriteLine("\t}");
499WriteLine("\tclient.OnDisconnect(func() { os.Exit(1) })");
500WriteLine("\treturn client, nil");
501WriteLine("}");
502WriteLine();
503WriteLine($"// CreateBuilder creates a new distributed application builder.");
504WriteLine($"func CreateBuilder(options *CreateBuilderOptions) (*{builderStructName}, error) {{");
505WriteLine("\tclient, err := Connect()");
506WriteLine("\tif err != nil {");
507WriteLine("\t\treturn nil, err");
508WriteLine("\t}");
509WriteLine("\tresolvedOptions := make(map[string]any)");
510WriteLine("\tif options != nil {");
511WriteLine("\t\tfor k, v := range options.ToMap() {");
512WriteLine("\t\t\tresolvedOptions[k] = v");
513WriteLine("\t\t}");
514WriteLine("\t}");
515WriteLine("\tif _, ok := resolvedOptions[\"Args\"]; !ok {");
516WriteLine("\t\tresolvedOptions[\"Args\"] = os.Args[1:]");
517WriteLine("\t}");
518WriteLine("\tif _, ok := resolvedOptions[\"ProjectDirectory\"]; !ok {");
519WriteLine("\t\tif pwd, err := os.Getwd(); err == nil {");
520WriteLine("\t\t\tresolvedOptions[\"ProjectDirectory\"] = pwd");
521WriteLine("\t\t}");
522WriteLine("\t}");
523WriteLine("\tresult, err := client.InvokeCapability(\"Aspire.Hosting/createBuilderWithOptions\", map[string]any{\"options\": resolvedOptions})");
524WriteLine("\tif err != nil {");
525WriteLine("\t\treturn nil, err");
526WriteLine("\t}");
527WriteLine($"\treturn result.(*{builderStructName}), nil");
528WriteLine("}");
529WriteLine();