@@ -235,11 +235,9 @@ def generateBySpec(
235235 pkg = resourceKey.pkgName(resourcesPkg),
236236 resourcesPkg = resourcesPkg,
237237 schemasPkg = schemasPkg,
238- baseUrl = specs.baseUrl,
239238 resourceName = resourceName,
240239 resource = resource,
241240 httpSource = config.httpSource,
242- jsonCodec = config.jsonCodec,
243241 hasProps = p => specs.hasProps(p),
244242 arrType = config.arrayType,
245243 commonQueryParams = specs.queryParameters
@@ -312,11 +310,9 @@ def resourceCode(
312310 pkg : String ,
313311 resourcesPkg : String ,
314312 schemasPkg : String ,
315- baseUrl : String ,
316313 resourceName : String ,
317314 resource : Resource ,
318315 httpSource : HttpSource ,
319- jsonCodec : JsonCodec ,
320316 arrType : ArrayType ,
321317 hasProps : SchemaPath => Boolean ,
322318 commonQueryParams : Map [String , Parameter ]
@@ -335,7 +331,7 @@ def resourceCode(
335331 " " ,
336332 s " object ${resourceName} { " +
337333 resource.methods
338- .map { (k, v ) =>
334+ .map { (k, method ) =>
339335 def pathSegments (urlPath : String ) =
340336 urlPath
341337 .split(" /" )
@@ -350,11 +346,11 @@ def resourceCode(
350346 ) + " \" )"
351347 )
352348
353- val req = v.mediaUpload match
354- case None => v .request.filter(_.schemaPath.forall(hasProps))
349+ val req = method.mediaUploads match
350+ case None => method .request.filter(_.schemaPath.forall(hasProps))
355351 case Some (_) => None
356352
357- val uploadProtocol = v.mediaUpload match
353+ val uploadProtocol = method.mediaUploads match
358354 case Some (m) =>
359355 Some {
360356 val protocols = m.protocols.keySet.toList.sortBy {
@@ -366,7 +362,7 @@ def resourceCode(
366362 }
367363 case None => None
368364
369- val (requiredParams, optParams) = v .scalaParameters.partition(_._2.required)
365+ val (requiredParams, optParams) = method .scalaParameters.partition(_._2.required)
370366 val params =
371367 requiredParams.map((n, t) => s " ${toComment(t.description)}$n: ${t.scalaType(arrType)}" ) :::
372368 req.toList.map(r => s " request: ${r.scalaType(arrType)}" ) :::
@@ -375,17 +371,17 @@ def resourceCode(
375371 List (
376372 s " endpointUrl: Uri = $rootPkg.baseUrl " ,
377373 " commonQueryParams: QueryParameters = " + ((
378- v.mediaUpload ,
374+ method.mediaUploads ,
379375 commonQueryParams.collectFirst { case (" uploadType" , Parameter (_, _, e : SchemaType .Enum , _, _)) => e }
380376 ) match {
381377 case (Some (m), Some (ut)) => s """ QueryParameters(uploadType = Some(" ${ut.values.head.value}")) """
382378 case _ => " QueryParameters.empty"
383379 })
384380 )
385381
386- val setReqUri = v.mediaUpload match
382+ val setReqUri = method.mediaUploads match
387383 case None =>
388- s " val requestUri = endpointUrl.addPathSegments(List( ${pathSegments(v .urlPath).mkString(" , " )})) "
384+ s " val requestUri = endpointUrl.addPathSegments(List( ${pathSegments(method .urlPath).mkString(" , " )})) "
389385 case Some (m) =>
390386 List (
391387 " val requestUri = uploadProtocol match {" ,
@@ -402,7 +398,7 @@ def resourceCode(
402398 case Some (_) => """ .body(request.toJsonString)"""
403399
404400 val queryParams = " \n val params = " +
405- (v .scalaQueryParams match
401+ (method .scalaQueryParams match
406402 case Nil => " commonQueryParams.value"
407403 case qParams =>
408404 qParams
@@ -420,7 +416,7 @@ def resourceCode(
420416 case HttpSource .Sttp3 =>
421417 s " RequestT[Identity, Either[ResponseException[String, Exception], $t], Any] "
422418
423- val (resType, mapResponse) = v .response match
419+ val (resType, mapResponse) = method .response match
424420 case Some (r) if r.schemaPath.forall(hasProps) =>
425421 val bodyType = r.scalaType(arrType)
426422
@@ -432,7 +428,7 @@ def resourceCode(
432428
433429 s """ |def ${toScalaName(k)}(\n ${params.mkString(" ,\n " )}): $resType = { $queryParams
434430 | $setReqUri
435- | resourceRequest. ${v .httpMethod.toLowerCase()}(requestUri.addParams(params)) $body$mapResponse
431+ | resourceRequest. ${method .httpMethod.toLowerCase()}(requestUri.addParams(params)) $body$mapResponse
436432 |} """ .stripMargin
437433 }
438434 .mkString(" \n " , " \n\n " , " \n " ) +
@@ -584,7 +580,7 @@ case class Method(
584580 parameterOrder : List [String ],
585581 response : Option [SchemaType ],
586582 request : Option [SchemaType ] = None ,
587- mediaUpload : Option [MediaUpload ] = None
583+ private val mediaUpload : Option [MediaUpload ] = None
588584) {
589585 private lazy val flatPathParams : List [(String , Parameter )] = flatPath.toList.flatMap(p =>
590586 p.params.zipWithIndex.map((param, idx) =>
@@ -607,6 +603,20 @@ case class Method(
607603
608604 def urlPath : String = flatPath.map(_.path).getOrElse(path)
609605
606+ def mediaUploads : Option [MediaUpload ] = mediaUpload.map(m =>
607+ m.copy(protocols =
608+ m.protocols.view
609+ .mapValues(p =>
610+ // map the path to flatPath on placeholders with pattern like {+var_name} if the same is found in method path
611+ // need a better solution for this
612+ " \\ {(\\ +.*?)\\ }" .r.findAllIn(p.path).toList match
613+ case v :: Nil if path.contains(v) => p.copy(path = flatPath.map(_.path).getOrElse(p.path))
614+ case _ => p
615+ )
616+ .toMap
617+ )
618+ )
619+
610620 // filter out path params if flatPath params are given
611621 private lazy val pathParams : List [(String , Parameter )] =
612622 parameters.toList.filterNot((_, p) => flatPathParams.nonEmpty && p.location == " path" )
0 commit comments