File tree 2 files changed +20
-0
lines changed
airframe-http-codegen/src
main/scala/wvlet/airframe/http/openapi
test/scala/wvlet/airframe/http/openapi 2 files changed +20
-0
lines changed Original file line number Diff line number Diff line change @@ -21,6 +21,7 @@ import wvlet.airframe.json.JSON.JSONValue
21
21
import wvlet .airframe .json .Json
22
22
import wvlet .airframe .metrics .{Count , DataSize , ElapsedTime }
23
23
import wvlet .airframe .msgpack .spi .{MsgPack , Value }
24
+ import wvlet .airframe .rx .Rx
24
25
import wvlet .airframe .surface .*
25
26
import wvlet .airframe .surface .reflect .*
26
27
import wvlet .airframe .ulid .ULID
@@ -489,6 +490,8 @@ class OpenAPIGenerator(config: OpenAPIGeneratorConfig) extends LogSupport {
489
490
Schema (`type` = " string" )
490
491
case o : OptionSurface =>
491
492
getOpenAPISchemaOfSurface(o.elementSurface, seen + s)
493
+ case s : Surface if classOf [Rx [_]].isAssignableFrom(s.rawType) =>
494
+ getOpenAPISchemaOfSurface(s.typeArgs(0 ), seen + s)
492
495
case s : Surface if Router .isFuture(s) =>
493
496
getOpenAPISchemaOfSurface(Router .unwrapFuture(s), seen + s)
494
497
case s : Surface if Router .isFinagleReader(s) =>
Original file line number Diff line number Diff line change 14
14
package wvlet .airframe .http .openapi
15
15
import wvlet .airframe .http .openapi .OpenAPI .Schema
16
16
import wvlet .airframe .http .{RPC , Router , description }
17
+ import wvlet .airframe .rx .Rx
17
18
import wvlet .airframe .ulid .ULID
18
19
import wvlet .airspec .AirSpec
19
20
@@ -193,4 +194,20 @@ object SimpleOpenAPITest extends AirSpec {
193
194
val schema = openapi.components.get.schemas.head.head._2.asInstanceOf [Schema ]
194
195
schema.required shouldBe empty
195
196
}
197
+
198
+ case class HelloRet (p : String = " hello" )
199
+ @ RPC
200
+ trait RxTestApi {
201
+ def hello (): Rx [HelloRet ]
202
+ }
203
+
204
+ test(" Rx return type" ) {
205
+ val r = Router .of[RxTestApi ]
206
+ val yaml = openApiGenerator(r).toYAML
207
+ debug(yaml)
208
+ yaml.contains(" type: object" ) shouldBe true
209
+ yaml.contains(" properties:" ) shouldBe true
210
+ yaml.contains(" #/components/schemas/HelloRet" ) shouldBe true
211
+ }
212
+
196
213
}
You can’t perform that action at this time.
0 commit comments