87 lines
2.3 KiB
Go
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))
|
|
}
|
|
}
|
|
}
|