heroagent/pkg/openrpc/models/spec.go
2025-05-24 09:52:43 +04:00

90 lines
2.8 KiB
Go

package models
// OpenRPCSpec represents an OpenRPC specification document
type OpenRPCSpec struct {
OpenRPC string `json:"openrpc"`
Info InfoObject `json:"info"`
Servers []Server `json:"servers"`
Methods []Method `json:"methods"`
}
// InfoObject contains metadata about the API
type InfoObject struct {
Version string `json:"version"`
Title string `json:"title"`
Description string `json:"description,omitempty"`
License *LicenseObject `json:"license,omitempty"`
}
// LicenseObject contains license information for the API
type LicenseObject struct {
Name string `json:"name"`
}
// Server represents a server that provides the API
type Server struct {
Name string `json:"name"`
URL string `json:"url"`
}
// Method represents a method in the API
type Method struct {
Name string `json:"name"`
Description string `json:"description,omitempty"`
Params []Parameter `json:"params"`
Result ResultObject `json:"result"`
Examples []Example `json:"examples,omitempty"`
Errors []ErrorObject `json:"errors,omitempty"`
}
// Parameter represents a parameter for a method
type Parameter struct {
Name string `json:"name"`
Description string `json:"description,omitempty"`
Required bool `json:"required"`
Schema SchemaObject `json:"schema"`
}
// ResultObject represents the result of a method
type ResultObject struct {
Name string `json:"name"`
Description string `json:"description,omitempty"`
Schema SchemaObject `json:"schema"`
}
// SchemaObject represents a JSON Schema object
type SchemaObject struct {
Type string `json:"type,omitempty"`
Properties map[string]SchemaObject `json:"properties,omitempty"`
Items *SchemaObject `json:"items,omitempty"`
AdditionalProperties *SchemaObject `json:"additionalProperties,omitempty"`
Description string `json:"description,omitempty"`
Enum []string `json:"enum,omitempty"`
}
// Example represents an example for a method
type Example struct {
Name string `json:"name"`
Params []map[string]interface{} `json:"params"`
Result ExampleResultObject `json:"result"`
}
// ExampleResultObject represents the result of an example
type ExampleResultObject struct {
Name string `json:"name"`
Value interface{} `json:"value"`
}
// ErrorObject represents an error that can be returned by a method
type ErrorObject struct {
Code int `json:"code"`
Message string `json:"message"`
Data string `json:"data,omitempty"`
}
// Validate validates the OpenRPC specification
func (spec *OpenRPCSpec) Validate() error {
// TODO: Implement validation logic
return nil
}