AtsGoCodeGenerator.cs (148)
96WriteLine("// aspire.go - Capability-based Aspire SDK");
97WriteLine("// GENERATED CODE - DO NOT EDIT");
98WriteLine();
99WriteLine("package aspire");
100WriteLine();
101WriteLine("import (");
102WriteLine("\t\"fmt\"");
103WriteLine("\t\"os\"");
104WriteLine(")");
105WriteLine();
115WriteLine("// ============================================================================");
116WriteLine("// Enums");
117WriteLine("// ============================================================================");
118WriteLine();
128WriteLine($"// {enumName} represents {enumType.Name}.");
129WriteLine($"type {enumName} string");
130WriteLine();
131WriteLine("const (");
135WriteLine($"\t{memberName} {enumName} = \"{member}\"");
137WriteLine(")");
138WriteLine();
149WriteLine("// ============================================================================");
150WriteLine("// DTOs");
151WriteLine("// ============================================================================");
152WriteLine();
163WriteLine($"// {dtoName} represents {dto.Name}.");
164WriteLine($"type {dtoName} struct {{");
167WriteLine("}");
168WriteLine();
177WriteLine($"\t{propertyName} {propertyType} {jsonTag}");
179WriteLine("}");
180WriteLine();
183WriteLine($"// ToMap converts the DTO to a map for JSON serialization.");
184WriteLine($"func (d *{dtoName}) ToMap() map[string]any {{");
185WriteLine("\treturn map[string]any{");
189WriteLine($"\t\t\"{property.Name}\": SerializeValue(d.{propertyName}),");
191WriteLine("\t}");
192WriteLine("}");
193WriteLine();
206WriteLine("// ============================================================================");
207WriteLine("// Handle Wrappers");
208WriteLine("// ============================================================================");
209WriteLine();
250WriteLine($"// {handleType.StructName} wraps a handle for {handleType.TypeId}.");
251WriteLine($"type {handleType.StructName} struct {{");
252WriteLine($"\t{baseStruct}");
255WriteLine($"\t{fieldName} {fieldType}");
257WriteLine("}");
258WriteLine();
261WriteLine($"// New{handleType.StructName} creates a new {handleType.StructName}.");
262WriteLine($"func New{handleType.StructName}(handle *Handle, client *AspireClient) *{handleType.StructName} {{");
263WriteLine($"\treturn &{handleType.StructName}{{");
264WriteLine($"\t\t{baseStruct}: New{baseStruct}(handle, client),");
265WriteLine("\t}");
266WriteLine("}");
267WriteLine();
323WriteLine($"// {methodName} {char.ToLowerInvariant(capability.Description[0])}{capability.Description[1..]}");
327WriteLine($"func (s *{structName}) {methodName}({paramList}) {returnSignature} {{");
328WriteLine("\treqArgs := map[string]any{");
329WriteLine($"\t\t\"{targetParamName}\": SerializeValue(s.Handle()),");
330WriteLine("\t}");
337WriteLine($"\tif {paramName} != nil {{");
338WriteLine($"\t\treqArgs[\"{parameter.Name}\"] = RegisterCallback({paramName})");
339WriteLine("\t}");
345WriteLine($"\tif {paramName} != nil {{");
346WriteLine($"\t\treqArgs[\"{parameter.Name}\"] = RegisterCancellation({paramName}, s.Client())");
347WriteLine("\t}");
356WriteLine($"\tif {paramName} != nil {{");
357WriteLine($"\t\treqArgs[\"{parameter.Name}\"] = SerializeValue({paramName})");
358WriteLine("\t}");
362WriteLine($"\treqArgs[\"{parameter.Name}\"] = SerializeValue({paramName})");
368WriteLine($"\tresult, err := s.Client().InvokeCapability(\"{capability.CapabilityId}\", reqArgs)");
369WriteLine("\tif err != nil {");
370WriteLine("\t\treturn nil, err");
371WriteLine("\t}");
375WriteLine($"\treturn result.({returnType}), nil");
379WriteLine("\treturn result, nil");
383WriteLine($"\treturn result.(*{returnType}), nil");
388WriteLine($"\t_, err := s.Client().InvokeCapability(\"{capability.CapabilityId}\", reqArgs)");
389WriteLine("\treturn err");
392WriteLine("}");
393WriteLine();
431WriteLine($"// {methodName} {char.ToLowerInvariant(capability.Description[0])}{capability.Description[1..]}");
436WriteLine($"func (s *{structName}) {methodName}() *{wrapperType}{typeArgs} {{");
437WriteLine($"\tif s.{fieldName} == nil {{");
438WriteLine($"\t\ts.{fieldName} = {factoryFunc}{typeArgs}(s.Handle(), s.Client(), \"{capability.CapabilityId}\")");
439WriteLine("\t}");
440WriteLine($"\treturn s.{fieldName}");
441WriteLine("}");
442WriteLine();
449WriteLine("// ============================================================================");
450WriteLine("// Handle wrapper registrations");
451WriteLine("// ============================================================================");
452WriteLine();
453WriteLine("func init() {");
457WriteLine($"\tRegisterHandleWrapper(\"{handleType.TypeId}\", func(h *Handle, c *AspireClient) any {{");
458WriteLine($"\t\treturn New{handleType.StructName}(h, c)");
459WriteLine("\t})");
466WriteLine($"\tRegisterHandleWrapper(\"{typeId}\", func(h *Handle, c *AspireClient) any {{");
467WriteLine($"\t\treturn &{wrapperType}{typeArgs}{{HandleWrapperBase: NewHandleWrapperBase(h, c)}}");
468WriteLine("\t})");
471WriteLine("}");
472WriteLine();
481WriteLine("// ============================================================================");
482WriteLine("// Connection Helpers");
483WriteLine("// ============================================================================");
484WriteLine();
485WriteLine("// Connect establishes a connection to the AppHost server.");
486WriteLine("func Connect() (*AspireClient, error) {");
487WriteLine("\tsocketPath := os.Getenv(\"REMOTE_APP_HOST_SOCKET_PATH\")");
488WriteLine("\tif socketPath == \"\" {");
489WriteLine("\t\treturn nil, fmt.Errorf(\"REMOTE_APP_HOST_SOCKET_PATH environment variable not set. Run this application using `aspire run`\")");
490WriteLine("\t}");
491WriteLine("\tclient := NewAspireClient(socketPath)");
492WriteLine("\tif err := client.Connect(); err != nil {");
493WriteLine("\t\treturn nil, err");
494WriteLine("\t}");
495WriteLine("\tclient.OnDisconnect(func() { os.Exit(1) })");
496WriteLine("\treturn client, nil");
497WriteLine("}");
498WriteLine();
499WriteLine($"// CreateBuilder creates a new distributed application builder.");
500WriteLine($"func CreateBuilder(options *CreateBuilderOptions) (*{builderStructName}, error) {{");
501WriteLine("\tclient, err := Connect()");
502WriteLine("\tif err != nil {");
503WriteLine("\t\treturn nil, err");
504WriteLine("\t}");
505WriteLine("\tresolvedOptions := make(map[string]any)");
506WriteLine("\tif options != nil {");
507WriteLine("\t\tfor k, v := range options.ToMap() {");
508WriteLine("\t\t\tresolvedOptions[k] = v");
509WriteLine("\t\t}");
510WriteLine("\t}");
511WriteLine("\tif _, ok := resolvedOptions[\"Args\"]; !ok {");
512WriteLine("\t\tresolvedOptions[\"Args\"] = os.Args[1:]");
513WriteLine("\t}");
514WriteLine("\tif _, ok := resolvedOptions[\"ProjectDirectory\"]; !ok {");
515WriteLine("\t\tif pwd, err := os.Getwd(); err == nil {");
516WriteLine("\t\t\tresolvedOptions[\"ProjectDirectory\"] = pwd");
517WriteLine("\t\t}");
518WriteLine("\t}");
519WriteLine("\tresult, err := client.InvokeCapability(\"Aspire.Hosting/createBuilderWithOptions\", map[string]any{\"options\": resolvedOptions})");
520WriteLine("\tif err != nil {");
521WriteLine("\t\treturn nil, err");
522WriteLine("\t}");
523WriteLine($"\treturn result.(*{builderStructName}), nil");
524WriteLine("}");
525WriteLine();