From a906d46227a828bc3502cadff95d579d030b0ef7 Mon Sep 17 00:00:00 2001 From: Dave Shanley Date: Fri, 29 Jul 2022 06:52:07 -0400 Subject: [PATCH] Completed adding v3 models (I think) Going to start logic for building things out. attempting generic builder pattern first. --- datamodel/low/3.0/callback.go | 12 +++++++++++ datamodel/low/3.0/components.go | 18 +++++++++++++---- datamodel/low/3.0/discriminator.go | 12 +++++++++++ datamodel/low/3.0/document.go | 15 ++++++++++---- datamodel/low/3.0/external_doc.go | 13 ++++++++++++ datamodel/low/3.0/link.go | 17 ++++++++++++++++ datamodel/low/3.0/oauth_flows.go | 24 ++++++++++++++++++++++ datamodel/low/3.0/operation.go | 23 +++++++++++++++++++++ datamodel/low/3.0/path.go | 30 ++++++++++++++++++++++++++++ datamodel/low/3.0/request_body.go | 14 +++++++++++++ datamodel/low/3.0/response.go | 7 +++++++ datamodel/low/3.0/schema.go | 9 +++++++++ datamodel/low/3.0/security_scheme.go | 24 ++++++++++++++++++++++ datamodel/low/3.0/tag.go | 14 +++++++++++++ datamodel/low/3.0/xml.go | 16 +++++++++++++++ datamodel/low/reference.go | 12 +++++------ 16 files changed, 246 insertions(+), 14 deletions(-) create mode 100644 datamodel/low/3.0/callback.go create mode 100644 datamodel/low/3.0/discriminator.go create mode 100644 datamodel/low/3.0/external_doc.go create mode 100644 datamodel/low/3.0/link.go create mode 100644 datamodel/low/3.0/oauth_flows.go create mode 100644 datamodel/low/3.0/operation.go create mode 100644 datamodel/low/3.0/path.go create mode 100644 datamodel/low/3.0/request_body.go create mode 100644 datamodel/low/3.0/security_scheme.go create mode 100644 datamodel/low/3.0/tag.go create mode 100644 datamodel/low/3.0/xml.go diff --git a/datamodel/low/3.0/callback.go b/datamodel/low/3.0/callback.go new file mode 100644 index 0000000..726acfc --- /dev/null +++ b/datamodel/low/3.0/callback.go @@ -0,0 +1,12 @@ +package v3 + +import ( + "github.com/pb33f/libopenapi/datamodel/low" + "gopkg.in/yaml.v3" +) + +type Callback struct { + Node *yaml.Node + Expression map[string]Path + Extensions map[string]low.ObjectReference +} diff --git a/datamodel/low/3.0/components.go b/datamodel/low/3.0/components.go index df8ccad..0c6cacc 100644 --- a/datamodel/low/3.0/components.go +++ b/datamodel/low/3.0/components.go @@ -1,9 +1,19 @@ package v3 -import "gopkg.in/yaml.v3" +import ( + "gopkg.in/yaml.v3" + "net/http" +) type Components struct { - Node *yaml.Node - Schemas map[string]Schema - Responses map[string]Response + Node *yaml.Node + Schemas map[string]Schema + Responses map[string]Response + Parameters map[string]Parameter + Examples map[string]Example + RequestBodies map[string]RequestBody + Headers map[string]http.Header + SecuritySchemes map[string]SecurityScheme + Links map[string]Link + Callbacks map[string]Callback } diff --git a/datamodel/low/3.0/discriminator.go b/datamodel/low/3.0/discriminator.go new file mode 100644 index 0000000..e8750a1 --- /dev/null +++ b/datamodel/low/3.0/discriminator.go @@ -0,0 +1,12 @@ +package v3 + +import ( + "github.com/pb33f/libopenapi/datamodel/low" + "gopkg.in/yaml.v3" +) + +type Discriminator struct { + Node *yaml.Node + PropertyName low.NodeReference[string] + Mapping map[string]string +} diff --git a/datamodel/low/3.0/document.go b/datamodel/low/3.0/document.go index dc2397a..46f7cf4 100644 --- a/datamodel/low/3.0/document.go +++ b/datamodel/low/3.0/document.go @@ -1,8 +1,15 @@ package v3 +import "github.com/pb33f/libopenapi/datamodel/low" + type Document struct { - Version string - Info Info - Servers []Server - Components Components + Version string + Info Info + Servers []Server + Paths Paths + Components Components + Security []SecurityRequirement + Tags []Tag + ExternalDocs ExternalDoc + Extensions map[string]low.ObjectReference } diff --git a/datamodel/low/3.0/external_doc.go b/datamodel/low/3.0/external_doc.go new file mode 100644 index 0000000..687ca20 --- /dev/null +++ b/datamodel/low/3.0/external_doc.go @@ -0,0 +1,13 @@ +package v3 + +import ( + "github.com/pb33f/libopenapi/datamodel/low" + "gopkg.in/yaml.v3" +) + +type ExternalDoc struct { + Node *yaml.Node + Description low.NodeReference[string] + URL low.NodeReference[string] + Extensions map[string]low.ObjectReference +} diff --git a/datamodel/low/3.0/link.go b/datamodel/low/3.0/link.go new file mode 100644 index 0000000..7f5d51b --- /dev/null +++ b/datamodel/low/3.0/link.go @@ -0,0 +1,17 @@ +package v3 + +import ( + "github.com/pb33f/libopenapi/datamodel/low" + "gopkg.in/yaml.v3" +) + +type Link struct { + Node *yaml.Node + OperationRef low.NodeReference[string] + OperationId low.NodeReference[string] + Parameters map[string]low.NodeReference[string] + RequestBody low.NodeReference[string] + Description low.NodeReference[string] + Server Server + Extensions map[string]low.ObjectReference +} diff --git a/datamodel/low/3.0/oauth_flows.go b/datamodel/low/3.0/oauth_flows.go new file mode 100644 index 0000000..4ac8b88 --- /dev/null +++ b/datamodel/low/3.0/oauth_flows.go @@ -0,0 +1,24 @@ +package v3 + +import ( + "github.com/pb33f/libopenapi/datamodel/low" + "gopkg.in/yaml.v3" +) + +type OAuthFlows struct { + Node *yaml.Node + Implicit OAuthFlow + Password OAuthFlow + ClientCredentials OAuthFlow + AuthorizationCode OAuthFlow + Extensions map[string]low.ObjectReference +} + +type OAuthFlow struct { + Node *yaml.Node + AuthorizationUrl low.NodeReference[string] + TokenURL low.NodeReference[string] + RefreshURL low.NodeReference[string] + Scopes map[string]string + Extensions map[string]low.ObjectReference +} diff --git a/datamodel/low/3.0/operation.go b/datamodel/low/3.0/operation.go new file mode 100644 index 0000000..27962bf --- /dev/null +++ b/datamodel/low/3.0/operation.go @@ -0,0 +1,23 @@ +package v3 + +import ( + "github.com/pb33f/libopenapi/datamodel/low" + "gopkg.in/yaml.v3" +) + +type Operation struct { + Node *yaml.Node + Tags []low.NodeReference[string] + Summary low.NodeReference[string] + Description low.NodeReference[string] + ExternalDocs ExternalDoc + OperationId low.NodeReference[string] + Parameters []Parameter + RequestBody RequestBody + Responses Responses + Callbacks map[string]Callback + Deprecated low.NodeReference[bool] + Security []SecurityRequirement + Servers []Server + Extensions map[string]low.ObjectReference +} diff --git a/datamodel/low/3.0/path.go b/datamodel/low/3.0/path.go new file mode 100644 index 0000000..7b72edf --- /dev/null +++ b/datamodel/low/3.0/path.go @@ -0,0 +1,30 @@ +package v3 + +import ( + "github.com/pb33f/libopenapi/datamodel/low" + "gopkg.in/yaml.v3" +) + +type Paths struct { + Node *yaml.Node + Paths map[string]Path + Extensions map[string]low.ObjectReference +} + +type Path struct { + Node *yaml.Node + Value low.NodeReference[string] + Summary low.NodeReference[string] + Description low.NodeReference[string] + Get Operation + Put Operation + Post Operation + Delete Operation + Options Operation + Head Operation + Patch Operation + Trace Operation + Servers []Server + Parameters []Parameter + Extensions map[string]low.ObjectReference +} diff --git a/datamodel/low/3.0/request_body.go b/datamodel/low/3.0/request_body.go new file mode 100644 index 0000000..6d9d7e0 --- /dev/null +++ b/datamodel/low/3.0/request_body.go @@ -0,0 +1,14 @@ +package v3 + +import ( + "github.com/pb33f/libopenapi/datamodel/low" + "gopkg.in/yaml.v3" +) + +type RequestBody struct { + Node *yaml.Node + Description low.NodeReference[string] + Content map[string]MediaType + Required low.NodeReference[bool] + Extensions map[string]low.ObjectReference +} diff --git a/datamodel/low/3.0/response.go b/datamodel/low/3.0/response.go index 1d98085..b3930d1 100644 --- a/datamodel/low/3.0/response.go +++ b/datamodel/low/3.0/response.go @@ -5,9 +5,16 @@ import ( "gopkg.in/yaml.v3" ) +type Responses struct { + Node *yaml.Node + Codes map[string]Response + Default Response +} + type Response struct { Node *yaml.Node Description low.NodeReference[string] Headers map[string]Parameter Content map[string]MediaType + Extensions map[string]low.ObjectReference } diff --git a/datamodel/low/3.0/schema.go b/datamodel/low/3.0/schema.go index e16d8d3..3424dea 100644 --- a/datamodel/low/3.0/schema.go +++ b/datamodel/low/3.0/schema.go @@ -33,4 +33,13 @@ type Schema struct { AdditionalProperties low.ObjectReference Description low.NodeReference[string] Default low.ObjectReference + Nullable low.NodeReference[bool] + Discriminator Discriminator + ReadOnly low.NodeReference[bool] + WriteOnly low.NodeReference[bool] + XML XML + ExternalDocs ExternalDoc + Example low.ObjectReference + Deprecated low.NodeReference[bool] + Extensions map[string]low.ObjectReference } diff --git a/datamodel/low/3.0/security_scheme.go b/datamodel/low/3.0/security_scheme.go new file mode 100644 index 0000000..7cfac32 --- /dev/null +++ b/datamodel/low/3.0/security_scheme.go @@ -0,0 +1,24 @@ +package v3 + +import ( + "github.com/pb33f/libopenapi/datamodel/low" + "gopkg.in/yaml.v3" +) + +type SecurityScheme struct { + Node *yaml.Node + Type low.NodeReference[string] + Description low.NodeReference[string] + Name low.NodeReference[string] + In low.NodeReference[string] + Scheme low.NodeReference[string] + BearerFormat low.NodeReference[string] + Flows OAuthFlows + OpenIdConnectURL low.NodeReference[string] + Extensions map[string]low.ObjectReference +} + +type SecurityRequirement struct { + Node *yaml.Node + Value []low.NodeReference[string] +} diff --git a/datamodel/low/3.0/tag.go b/datamodel/low/3.0/tag.go new file mode 100644 index 0000000..31d4fa4 --- /dev/null +++ b/datamodel/low/3.0/tag.go @@ -0,0 +1,14 @@ +package v3 + +import ( + "github.com/pb33f/libopenapi/datamodel/low" + "gopkg.in/yaml.v3" +) + +type Tag struct { + Node *yaml.Node + Name low.NodeReference[string] + Description low.NodeReference[string] + ExternalDocs ExternalDoc + Extensions map[string]low.ObjectReference +} diff --git a/datamodel/low/3.0/xml.go b/datamodel/low/3.0/xml.go new file mode 100644 index 0000000..8acb071 --- /dev/null +++ b/datamodel/low/3.0/xml.go @@ -0,0 +1,16 @@ +package v3 + +import ( + "github.com/pb33f/libopenapi/datamodel/low" + "gopkg.in/yaml.v3" +) + +type XML struct { + Node *yaml.Node + Name low.NodeReference[string] + Namespace low.NodeReference[string] + Prefix low.NodeReference[string] + Attribute low.NodeReference[string] + Wrapped low.NodeReference[bool] + Extensions map[string]low.ObjectReference +} diff --git a/datamodel/low/reference.go b/datamodel/low/reference.go index 08225a5..f7539d5 100644 --- a/datamodel/low/reference.go +++ b/datamodel/low/reference.go @@ -6,12 +6,12 @@ type HasNode interface { GetNode() *yaml.Node } -type NodeReference[T comparable] interface { - GetValue() T - GetNode() *yaml.Node +type NodeReference[T comparable] struct { + Value T + Node *yaml.Node } -type ObjectReference interface { - GetValue() interface{} - GetNode() *yaml.Node +type ObjectReference struct { + Value interface{} + Node *yaml.Node }