@@ -5,7 +5,7 @@ import Prelude
5import Data.Maybe (Maybe(..))
5import Data.Maybe (Maybe(..))
6import Data.String as String
6import Data.String as String
7import Effect (Effect)
7import Effect (Effect)
8−import Yoga.HTTP.API.Route (GET, POST, PUT, Route, Request, buildOpenAPISpec)
8+import Yoga.HTTP.API.Route (GET, POST, PUT, Route, buildOpenAPISpec)
9import Yoga.HTTP.API.Route.Encoding (JSON, FormData, MultipartFormData, PlainText, XML, CustomContentType)
9import Yoga.HTTP.API.Route.Encoding (JSON, FormData, MultipartFormData, PlainText, XML, CustomContentType)
10import Yoga.JSON (writeJSON)
10import Yoga.JSON (writeJSON)
11import ViTest (ViTest, describe, test)
11import ViTest (ViTest, describe, test)
@@ -21,7 +21,7 @@ testRequestContentTypes :: Effect ViTest
21testRequestContentTypes = describe "Request Content Types" do
21testRequestContentTypes = describe "Request Content Types" do
22 _ <- test "JSON request body generates application/json" do
22 _ <- test "JSON request body generates application/json" do
24− spec = buildOpenAPISpec @{ createUser :: Route POST "users" (Request { body :: JSON User }) (ok :: { body :: User }) }
24+ spec = buildOpenAPISpec @{ createUser :: Route POST "users" { body :: JSON User } (ok :: { body :: User }) }
25 { title: "API"
25 { title: "API"
26 , version: "1.0.0"
26 , version: "1.0.0"
27 , description: Nothing
27 , description: Nothing
@@ -34,7 +34,7 @@ testRequestContentTypes = describe "Request Content Types" do
35 _ <- test "FormData request body generates application/x-www-form-urlencoded" do
35 _ <- test "FormData request body generates application/x-www-form-urlencoded" do
37− spec = buildOpenAPISpec @{ createUser :: Route POST "users" (Request { body :: FormData User }) (ok :: { body :: JSON User }) }
37+ spec = buildOpenAPISpec @{ createUser :: Route POST "users" { body :: FormData User } (ok :: { body :: JSON User }) }
38 { title: "API"
38 { title: "API"
39 , version: "1.0.0"
39 , version: "1.0.0"
40 , description: Nothing
40 , description: Nothing
@@ -47,7 +47,7 @@ testRequestContentTypes = describe "Request Content Types" do
48 _ <- test "MultipartFormData request body generates multipart/form-data" do
48 _ <- test "MultipartFormData request body generates multipart/form-data" do
50− spec = buildOpenAPISpec @{ uploadFile :: Route POST "upload" (Request { body :: MultipartFormData FileUpload }) (ok :: { body :: { success :: Boolean } }) }
50+ spec = buildOpenAPISpec @{ uploadFile :: Route POST "upload" { body :: MultipartFormData FileUpload } (ok :: { body :: { success :: Boolean } }) }
51 { title: "API"
51 { title: "API"
52 , version: "1.0.0"
52 , version: "1.0.0"
53 , description: Nothing
53 , description: Nothing
@@ -59,7 +59,7 @@ testRequestContentTypes = describe "Request Content Types" do
60 _ <- test "PlainText request body generates text/plain" do
60 _ <- test "PlainText request body generates text/plain" do
62− spec = buildOpenAPISpec @{ echo :: Route POST "echo" (Request { body :: PlainText String }) (ok :: { body :: PlainText String }) }
62+ spec = buildOpenAPISpec @{ echo :: Route POST "echo" { body :: PlainText String } (ok :: { body :: PlainText String }) }
63 { title: "API"
63 { title: "API"
64 , version: "1.0.0"
64 , version: "1.0.0"
65 , description: Nothing
65 , description: Nothing
@@ -71,7 +71,7 @@ testRequestContentTypes = describe "Request Content Types" do
72 _ <- test "XML request body generates application/xml" do
72 _ <- test "XML request body generates application/xml" do
74− spec = buildOpenAPISpec @{ updateDoc :: Route PUT "document" (Request { body :: XML XmlDocument }) (ok :: { body :: XML XmlDocument }) }
74+ spec = buildOpenAPISpec @{ updateDoc :: Route PUT "document" { body :: XML XmlDocument } (ok :: { body :: XML XmlDocument }) }
75 { title: "API"
75 { title: "API"
76 , version: "1.0.0"
76 , version: "1.0.0"
77 , description: Nothing
77 , description: Nothing
@@ -83,7 +83,7 @@ testRequestContentTypes = describe "Request Content Types" do
84 test "CustomContentType request body generates custom MIME type" do
84 test "CustomContentType request body generates custom MIME type" do
86− spec = buildOpenAPISpec @{ customEndpoint :: Route POST "custom" (Request { body :: CustomContentType "application/vnd.api+json" User }) (ok :: { body :: User }) }
86+ spec = buildOpenAPISpec @{ customEndpoint :: Route POST "custom" { body :: CustomContentType "application/vnd.api+json" User } (ok :: { body :: User }) }
87 { title: "API"
87 { title: "API"
88 , version: "1.0.0"
88 , version: "1.0.0"
89 , description: Nothing
89 , description: Nothing
@@ -97,7 +97,7 @@ testResponseContentTypes :: Effect ViTest
97testResponseContentTypes = describe "Response Content Types" do
97testResponseContentTypes = describe "Response Content Types" do
98 _ <- test "JSON response body generates application/json" do
98 _ <- test "JSON response body generates application/json" do
100− spec = buildOpenAPISpec @{ getUser :: Route GET "users" (Request {}) (ok :: { body :: JSON User }) }
100+ spec = buildOpenAPISpec @{ getUser :: Route GET "users" {} (ok :: { body :: JSON User }) }
101 { title: "API"
101 { title: "API"
102 , version: "1.0.0"
102 , version: "1.0.0"
103 , description: Nothing
103 , description: Nothing
@@ -109,7 +109,7 @@ testResponseContentTypes = describe "Response Content Types" do
110 _ <- test "PlainText response body generates text/plain" do
110 _ <- test "PlainText response body generates text/plain" do
112− spec = buildOpenAPISpec @{ getText :: Route GET "text" (Request {}) (ok :: { body :: PlainText String }) }
112+ spec = buildOpenAPISpec @{ getText :: Route GET "text" {} (ok :: { body :: PlainText String }) }
113 { title: "API"
113 { title: "API"
114 , version: "1.0.0"
114 , version: "1.0.0"
115 , description: Nothing
115 , description: Nothing
@@ -121,7 +121,7 @@ testResponseContentTypes = describe "Response Content Types" do
122 _ <- test "XML response body generates application/xml" do
122 _ <- test "XML response body generates application/xml" do
124− spec = buildOpenAPISpec @{ getDoc :: Route GET "document" (Request {}) (ok :: { body :: XML XmlDocument }) }
124+ spec = buildOpenAPISpec @{ getDoc :: Route GET "document" {} (ok :: { body :: XML XmlDocument }) }
125 { title: "API"
125 { title: "API"
126 , version: "1.0.0"
126 , version: "1.0.0"
127 , description: Nothing
127 , description: Nothing
@@ -133,7 +133,7 @@ testResponseContentTypes = describe "Response Content Types" do
134 _ <- test "CustomContentType response body generates custom MIME type" do
134 _ <- test "CustomContentType response body generates custom MIME type" do
136− spec = buildOpenAPISpec @{ customGet :: Route GET "custom" (Request {}) (ok :: { body :: CustomContentType "application/vnd.api+json" User }) }
136+ spec = buildOpenAPISpec @{ customGet :: Route GET "custom" {} (ok :: { body :: CustomContentType "application/vnd.api+json" User }) }
137 { title: "API"
137 { title: "API"
138 , version: "1.0.0"
138 , version: "1.0.0"
139 , description: Nothing
139 , description: Nothing
@@ -145,7 +145,7 @@ testResponseContentTypes = describe "Response Content Types" do
146 test "Unwrapped response body defaults to application/json for backward compatibility" do
146 test "Unwrapped response body defaults to application/json for backward compatibility" do
148− spec = buildOpenAPISpec @{ getUser :: Route GET "users" (Request {}) (ok :: { body :: User }) }
148+ spec = buildOpenAPISpec @{ getUser :: Route GET "users" {} (ok :: { body :: User }) }
149 { title: "API"
149 { title: "API"
150 , version: "1.0.0"
150 , version: "1.0.0"
151 , description: Nothing
151 , description: Nothing
@@ -161,10 +161,10 @@ testMixedContentTypes = describe "Mixed Content Types in API" do
162 spec = buildOpenAPISpec
162 spec = buildOpenAPISpec
164− { createUser :: Route POST "users" (Request { body :: JSON User }) (ok :: { body :: JSON User })
164+ { createUser :: Route POST "users" { body :: JSON User } (ok :: { body :: JSON User })
165− , uploadFile :: Route POST "upload" (Request { body :: MultipartFormData FileUpload }) (ok :: { body :: { success :: Boolean } })
165+ , uploadFile :: Route POST "upload" { body :: MultipartFormData FileUpload } (ok :: { body :: { success :: Boolean } })
166− , echo :: Route POST "echo" (Request { body :: PlainText String }) (ok :: { body :: PlainText String })
166+ , echo :: Route POST "echo" { body :: PlainText String } (ok :: { body :: PlainText String })
167− , getDoc :: Route GET "document" (Request {}) (ok :: { body :: XML XmlDocument })
167+ , getDoc :: Route GET "document" {} (ok :: { body :: XML XmlDocument })
169 { title: "Multi-Content API"
169 { title: "Multi-Content API"
170 , version: "1.0.0"
170 , version: "1.0.0"