...
This commit is contained in:
		
							
								
								
									
										89
									
								
								pkg/openrpc/models/spec.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										89
									
								
								pkg/openrpc/models/spec.go
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,89 @@ | ||||
| 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 | ||||
| } | ||||
		Reference in New Issue
	
	Block a user