heroagent/cmd/orpctest/main.go
2025-05-24 09:52:43 +04:00

87 lines
2.3 KiB
Go

package main
import (
"flag"
"fmt"
"log"
"os"
"git.ourworld.tf/herocode/heroagent/pkg/openrpc"
)
func main() {
// Parse command line flags
var (
specDir = flag.String("dir", "pkg/openrpc/services", "Directory containing OpenRPC specifications")
specName = flag.String("spec", "", "Name of the specification to display (optional)")
methodName = flag.String("method", "", "Name of the method to display (optional)")
)
flag.Parse()
// Create a new OpenRPC Manager
manager := openrpc.NewORPCManager()
// Ensure the specification directory exists
if _, err := os.Stat(*specDir); os.IsNotExist(err) {
log.Fatalf("Specification directory does not exist: %s", *specDir)
}
// Load all specifications from the directory
log.Printf("Loading specifications from %s...", *specDir)
if err := manager.LoadSpecs(*specDir); err != nil {
log.Fatalf("Failed to load specifications: %v", err)
}
// List all loaded specifications
specs := manager.ListSpecs()
if len(specs) == 0 {
log.Fatalf("No specifications found in %s", *specDir)
}
fmt.Println("Loaded specifications:")
for _, spec := range specs {
fmt.Printf("- %s\n", spec)
}
// If a specification name is provided, display its methods
if *specName != "" {
spec := manager.GetSpec(*specName)
if spec == nil {
log.Fatalf("Specification not found: %s", *specName)
}
fmt.Printf("\nMethods in %s specification:\n", *specName)
methods := manager.ListMethods(*specName)
for _, method := range methods {
fmt.Printf("- %s\n", method)
}
// If a method name is provided, display its details
if *methodName != "" {
method := manager.GetMethod(*specName, *methodName)
if method == nil {
log.Fatalf("Method not found: %s", *methodName)
}
fmt.Printf("\nDetails for method '%s':\n", *methodName)
fmt.Printf("Description: %s\n", method.Description)
fmt.Printf("Parameters: %d\n", len(method.Params))
if len(method.Params) > 0 {
fmt.Println("Parameter list:")
for _, param := range method.Params {
required := ""
if param.Required {
required = " (required)"
}
fmt.Printf(" - %s%s: %s\n", param.Name, required, param.Description)
}
}
fmt.Printf("Result: %s\n", method.Result.Name)
fmt.Printf("Examples: %d\n", len(method.Examples))
fmt.Printf("Errors: %d\n", len(method.Errors))
}
}
}