/** * Generated by API Builder - https://www.apibuilder.io * Service version: 0.0.2 * User agent: apibuilder app.apibuilder.io/bml/bml-gen-test-application/0.0.2/http4s_0_20 */ package org.bml.bml.gen.test.application.v0.server import org.http4s.circe.decodeUri import org.http4s.circe.encodeUri import org.http4s.dsl.{io => _, _} import org.http4s.implicits._ import cats.effect._ import cats.implicits._ import org.bml.annotation.v0.models.json._ import org.bml.bml.gen.test.application.v0.models.json._ import org.bml.validation.v0.models.json._ private[server] trait Matchers[F[_]] extends Http4sDsl[F] { implicit lazy val queryParamDecodeBigDecimal: org.http4s.QueryParamDecoder[BigDecimal] = org.http4s.QueryParamDecoder.fromUnsafeCast[BigDecimal](p => BigDecimal(p.value))("BigDecimal") implicit lazy val queryParamDecodeInstant: org.http4s.QueryParamDecoder[_root_.java.time.Instant] = org.http4s.QueryParamDecoder.fromUnsafeCast[_root_.java.time.Instant](p => _root_.java.time.OffsetDateTime.parse(p.value).toInstant)("_root_.java.time.Instant") implicit lazy val queryParamDecodeLocalDate: org.http4s.QueryParamDecoder[_root_.java.time.LocalDate] = org.http4s.QueryParamDecoder.fromUnsafeCast[_root_.java.time.LocalDate](p => _root_.java.time.LocalDate.parse(p.value))("_root_.java.time.LocalDate") implicit lazy val queryParamDecodeUUID: org.http4s.QueryParamDecoder[_root_.java.util.UUID] = org.http4s.QueryParamDecoder.fromUnsafeCast[_root_.java.util.UUID](p => _root_.java.util.UUID.fromString(p.value))("_root_.java.util.UUID") object ApiVersion { val ApiVersionMajor = { "X-Apidoc-Version-Major".ci } def apply(req: org.http4s.Message[F]): Boolean = req.headers.get(ApiVersionMajor) match { case Some(v) if v.value == "0" => true case _ => false } } object UUIDVal { def unapply(s: String): Option[_root_.java.util.UUID] = scala.util.Try(_root_.java.util.UUID.fromString(s)).toOption } object CountIntDef100Matcher extends QueryParamDecoderMatcher[Int]("count") { override def unapply(params: Map[String, Seq[String]]) = super.unapply(params).orElse(Some(100)) } object NameOptStringMatcher extends OptionalQueryParamDecoderMatcher[String]("name") object PageIntDef0Matcher extends QueryParamDecoderMatcher[Int]("page") { override def unapply(params: Map[String, Seq[String]]) = super.unapply(params).orElse(Some(0)) } object TestDefaultBooleanDefFalseMatcher extends QueryParamDecoderMatcher[Boolean]("testDefault") { override def unapply(params: Map[String, Seq[String]]) = super.unapply(params).orElse(Some(false)) } object TestOptBooleanMatcher extends OptionalQueryParamDecoderMatcher[Boolean]("test") } trait AccountRoutes[F[_]] extends Matchers[F] { implicit def circeJsonDecoder[A](implicit decoder: _root_.io.circe.Decoder[A], sync: Sync[F]) = org.http4s.circe.jsonOf[F, A] implicit def circeJsonEncoder[A](implicit encoder: _root_.io.circe.Encoder[A], sync: Sync[F]) = org.http4s.circe.jsonEncoderOf[F, A] sealed trait PostResponse object PostResponse { case class HTTP201(value: org.bml.bml.gen.test.application.v0.models.Account, headers: Seq[org.http4s.Header] = Nil) extends PostResponse case class HTTP400(value: org.bml.validation.v0.models.FieldValidationResponse, headers: Seq[org.http4s.Header] = Nil) extends PostResponse case class HTTP401(authenticate: org.http4s.headers.`WWW-Authenticate`, headers: Seq[org.http4s.Header] = Nil) extends PostResponse case class HTTP409(headers: Seq[org.http4s.Header] = Nil) extends PostResponse case class UndocumentedResponse(response: F[org.http4s.Response[F]]) extends PostResponse } def post( _req: org.http4s.Request[F], test: _root_.scala.Option[Boolean], testDefault: Boolean, body: => org.http4s.DecodeResult[F, org.bml.bml.gen.test.application.v0.models.AccountForm] ): F[PostResponse] sealed trait GetByIdResponse object GetByIdResponse { case class HTTP200(value: org.bml.bml.gen.test.application.v0.models.Account, headers: Seq[org.http4s.Header] = Nil) extends GetByIdResponse case class HTTP400(value: org.bml.validation.v0.models.FieldValidationResponse, headers: Seq[org.http4s.Header] = Nil) extends GetByIdResponse case class HTTP401(authenticate: org.http4s.headers.`WWW-Authenticate`, headers: Seq[org.http4s.Header] = Nil) extends GetByIdResponse case class HTTP404(headers: Seq[org.http4s.Header] = Nil) extends GetByIdResponse case class UndocumentedResponse(response: F[org.http4s.Response[F]]) extends GetByIdResponse } def getById( _req: org.http4s.Request[F], id: _root_.java.util.UUID ): F[GetByIdResponse] sealed trait GetFooByIdResponse object GetFooByIdResponse { case class HTTP200(value: Seq[org.bml.bml.gen.test.application.v0.models.Account], headers: Seq[org.http4s.Header] = Nil) extends GetFooByIdResponse case class HTTP400(value: org.bml.validation.v0.models.FieldValidationResponse, headers: Seq[org.http4s.Header] = Nil) extends GetFooByIdResponse case class HTTP401(authenticate: org.http4s.headers.`WWW-Authenticate`, headers: Seq[org.http4s.Header] = Nil) extends GetFooByIdResponse case class HTTP404(headers: Seq[org.http4s.Header] = Nil) extends GetFooByIdResponse case class UndocumentedResponse(response: F[org.http4s.Response[F]]) extends GetFooByIdResponse } def getFooById( _req: org.http4s.Request[F], id: _root_.java.util.UUID, name: _root_.scala.Option[String], page: Int, count: Int ): F[GetFooByIdResponse] sealed trait GetResponse object GetResponse { case class HTTP200(value: Seq[org.bml.bml.gen.test.application.v0.models.Account], headers: Seq[org.http4s.Header] = Nil) extends GetResponse case class HTTP400(value: org.bml.validation.v0.models.FieldValidationResponse, headers: Seq[org.http4s.Header] = Nil) extends GetResponse case class HTTP401(authenticate: org.http4s.headers.`WWW-Authenticate`, headers: Seq[org.http4s.Header] = Nil) extends GetResponse case class HTTP404(headers: Seq[org.http4s.Header] = Nil) extends GetResponse case class UndocumentedResponse(response: F[org.http4s.Response[F]]) extends GetResponse } def get( _req: org.http4s.Request[F], name: _root_.scala.Option[String], page: Int, count: Int ): F[GetResponse] sealed trait DeleteByIdResponse object DeleteByIdResponse { case class HTTP200(value: org.bml.bml.gen.test.application.v0.models.Account, headers: Seq[org.http4s.Header] = Nil) extends DeleteByIdResponse case class HTTP400(value: org.bml.validation.v0.models.FieldValidationResponse, headers: Seq[org.http4s.Header] = Nil) extends DeleteByIdResponse case class HTTP401(authenticate: org.http4s.headers.`WWW-Authenticate`, headers: Seq[org.http4s.Header] = Nil) extends DeleteByIdResponse case class HTTP404(headers: Seq[org.http4s.Header] = Nil) extends DeleteByIdResponse case class UndocumentedResponse(response: F[org.http4s.Response[F]]) extends DeleteByIdResponse } def deleteById( _req: org.http4s.Request[F], id: _root_.java.util.UUID ): F[DeleteByIdResponse] def apiVersionMatch(req: org.http4s.Message[F]): Boolean = ApiVersion(req) def service()(implicit sync: Sync[F]) = org.http4s.HttpRoutes.of[F] { case _req @ POST -> Root / "accounts" :? TestOptBooleanMatcher(test) +& TestDefaultBooleanDefFalseMatcher(testDefault) if apiVersionMatch(_req) => post(_req, test, testDefault, _req.attemptAs[org.bml.bml.gen.test.application.v0.models.AccountForm]).flatMap { case PostResponse.HTTP201(value, headers) => Created(value, headers: _*) case PostResponse.HTTP400(value, headers) => BadRequest(value, headers: _*) case PostResponse.HTTP401(authenticate, headers) => Unauthorized(authenticate, headers: _*) case PostResponse.HTTP409(headers) => Conflict(headers: _*) case PostResponse.UndocumentedResponse(response) => response } case _req @ POST -> Root / "accounts" :? TestOptBooleanMatcher(test) +& TestDefaultBooleanDefFalseMatcher(testDefault) if !_req.headers.get(ApiVersion.ApiVersionMajor).isDefined => BadRequest(s"Missing required request header: ${ApiVersion.ApiVersionMajor}.") case _req @ GET -> Root / "accounts" / UUIDVal(id) if apiVersionMatch(_req) => getById(_req, id).flatMap { case GetByIdResponse.HTTP200(value, headers) => Ok(value, headers: _*) case GetByIdResponse.HTTP400(value, headers) => BadRequest(value, headers: _*) case GetByIdResponse.HTTP401(authenticate, headers) => Unauthorized(authenticate, headers: _*) case GetByIdResponse.HTTP404(headers) => NotFound(headers: _*) case GetByIdResponse.UndocumentedResponse(response) => response } case _req @ GET -> Root / "accounts" / UUIDVal(id) if !_req.headers.get(ApiVersion.ApiVersionMajor).isDefined => BadRequest(s"Missing required request header: ${ApiVersion.ApiVersionMajor}.") case _req @ GET -> Root / "accounts" / UUIDVal(id) / "foo" :? NameOptStringMatcher(name) +& PageIntDef0Matcher(page) +& CountIntDef100Matcher(count) if apiVersionMatch(_req) => getFooById(_req, id, name, page, count).flatMap { case GetFooByIdResponse.HTTP200(value, headers) => Ok(value, headers: _*) case GetFooByIdResponse.HTTP400(value, headers) => BadRequest(value, headers: _*) case GetFooByIdResponse.HTTP401(authenticate, headers) => Unauthorized(authenticate, headers: _*) case GetFooByIdResponse.HTTP404(headers) => NotFound(headers: _*) case GetFooByIdResponse.UndocumentedResponse(response) => response } case _req @ GET -> Root / "accounts" / UUIDVal(id) / "foo" :? NameOptStringMatcher(name) +& PageIntDef0Matcher(page) +& CountIntDef100Matcher(count) if !_req.headers.get(ApiVersion.ApiVersionMajor).isDefined => BadRequest(s"Missing required request header: ${ApiVersion.ApiVersionMajor}.") case _req @ GET -> Root / "accounts" :? NameOptStringMatcher(name) +& PageIntDef0Matcher(page) +& CountIntDef100Matcher(count) if apiVersionMatch(_req) => get(_req, name, page, count).flatMap { case GetResponse.HTTP200(value, headers) => Ok(value, headers: _*) case GetResponse.HTTP400(value, headers) => BadRequest(value, headers: _*) case GetResponse.HTTP401(authenticate, headers) => Unauthorized(authenticate, headers: _*) case GetResponse.HTTP404(headers) => NotFound(headers: _*) case GetResponse.UndocumentedResponse(response) => response } case _req @ GET -> Root / "accounts" :? NameOptStringMatcher(name) +& PageIntDef0Matcher(page) +& CountIntDef100Matcher(count) if !_req.headers.get(ApiVersion.ApiVersionMajor).isDefined => BadRequest(s"Missing required request header: ${ApiVersion.ApiVersionMajor}.") case _req @ DELETE -> Root / "accounts" / UUIDVal(id) if apiVersionMatch(_req) => deleteById(_req, id).flatMap { case DeleteByIdResponse.HTTP200(value, headers) => Ok(value, headers: _*) case DeleteByIdResponse.HTTP400(value, headers) => BadRequest(value, headers: _*) case DeleteByIdResponse.HTTP401(authenticate, headers) => Unauthorized(authenticate, headers: _*) case DeleteByIdResponse.HTTP404(headers) => NotFound(headers: _*) case DeleteByIdResponse.UndocumentedResponse(response) => response } case _req @ DELETE -> Root / "accounts" / UUIDVal(id) if !_req.headers.get(ApiVersion.ApiVersionMajor).isDefined => BadRequest(s"Missing required request header: ${ApiVersion.ApiVersionMajor}.") } }