@@ -25,13 +25,14 @@ class UnaryAddBuilder<T> {
2525data class RateLimitOptions (val enabled : Boolean , val count : Int , val duration : Duration )
2626
2727@FetchDSL
28- open class CallBuilder (private val url : String ) {
28+ open class CallBuilder <T >(private val url : String ) {
29+
2930 private var cookieJar: String? = null
30- var data: RequestDataSupplier ? = null
31- var body: HttpBody ? = null
31+ var data: RequestDataSupplier < T > ? = null
32+ var body: HttpBody < T > ? = null
3233 var type: HttpMethod = HttpMethod .GET
3334 var headers: Map <String , List <Any >>? = null
34- var onError: OnError ? = RetryOnTransitiveError ()
35+ var onError: OnError ? = RetryOnTransitiveError < T > ()
3536
3637 private var preHooksList = mutableListOf<BeforeHook >()
3738 private var postHooksList = mutableListOf<AfterHook >()
@@ -44,8 +45,8 @@ open class CallBuilder(private val url: String) {
4445 postHooksList.addAll(UnaryAddBuilder <AfterHook >().apply (block).build())
4546 }
4647
47- fun body (block : BodyBuilder .() -> Unit ) {
48- body = BodyBuilder ().apply (block).build()
48+ fun body (block : BodyBuilder < T > .() -> Unit ) {
49+ body = BodyBuilder < T > ().apply (block).build()
4950 }
5051
5152 private fun mapHeaders (m : Map <String , List <Any >>? ): Map <String , List <Value >>? {
@@ -62,7 +63,7 @@ open class CallBuilder(private val url: String) {
6263 }
6364 }
6465
65- fun build (): Call {
66+ fun build (): Call < T > {
6667 val localHeaders = headers
6768 if (localHeaders == null || ! localHeaders.contains(" User-Agent" )) {
6869 val set = mutableMapOf<String , List <Any >>()
@@ -72,36 +73,38 @@ open class CallBuilder(private val url: String) {
7273 set[" User-Agent" ] = listOf (" FetchDSL (Apache-HttpAsyncClient + Kotlin, version not set)" )
7374 headers = set
7475 }
75- return Call (url, mapHeaders(headers), cookieJar, type, data, body,
76- onError, preHooksList, postHooksList)
76+ return Call (
77+ url, mapHeaders(headers), cookieJar, type, data, body,
78+ onError, preHooksList, postHooksList
79+ )
7780 }
7881}
7982
8083@FetchDSL
81- class BodyBuilder {
84+ class BodyBuilder < T > {
8285 var value: String? = null
8386 var formParams: Map <String , List <String >>? = null
8487 var jsonObject: Any? = null
85- var lazyJsonObject: ((RequestData ) -> Any )? = null
88+ var lazyJsonObject: ((RequestData < T > ) -> Any )? = null
8689
87- fun build (): HttpBody = HttpBody (value, formParams, jsonObject, lazyJsonObject)
90+ fun build (): HttpBody < T > = HttpBody (value, formParams, jsonObject, lazyJsonObject)
8891}
8992
9093@FetchDSL
9194class MultiCallBuilder {
92- private var calls = mutableListOf<Call >()
95+ private var calls = mutableListOf<Call < * > >()
9396
94- fun call (url : String , block : CallBuilder .() -> Unit = {}) {
95- calls.add(CallBuilder (url).apply (block).build())
97+ fun call (url : String , block : CallBuilder < * > .() -> Unit = {}) {
98+ calls.add(CallBuilder < Any > (url).apply (block).build())
9699 }
97100
98101 fun calls () = calls
99102}
100103
101104@FetchDSL
102105class SessionBuilder {
103- private var calls = mutableListOf<Call >()
104- private val chained = mutableListOf<List <Call >>()
106+ private var calls = mutableListOf<Call < * > >()
107+ private val chained = mutableListOf<List <Call < * > >>()
105108
106109 var concurrency = 20
107110 var delay: Long? = null
@@ -113,18 +116,14 @@ class SessionBuilder {
113116 rateOptions = RateLimitOptions (true , count, duration)
114117 }
115118
116- fun call (url : String , block : CallBuilder .() -> Unit = {}) {
117- calls.add(CallBuilder (url).apply (block).build())
119+ @JvmName(" nonStringCall" )
120+ fun <T > call (url : String , block : CallBuilder <T >.() -> Unit = {}) {
121+ calls.add(CallBuilder <T >(url).apply (block).build())
118122 }
119123
120- // TODO: Re-enable when chaining is stable
121- // fun chained(block: MultiCallBuilder.(prev: Previous?) -> Unit = {}) {
122- // if (chained.isNotEmpty()) {
123- // val line = chained.last().line
124- //
125- // }
126- // chained.add(MultiCallBuilder().apply(block).calls())
127- // }
124+ fun call (url : String , block : CallBuilder <List <String >>.() -> Unit = {}) {
125+ calls.add(CallBuilder <List <String >>(url).apply (block).build())
126+ }
128127
129128 fun build (): Session = Session (calls, concurrency, delay, rateOptions)
130129}
0 commit comments