/** * Generated by API Builder - https://www.apibuilder.io * Service version: 0.0.1-dev * User agent: apibuilder app.apibuilder.io/teambytes/hipchat-sns-bridge/0.0.1-dev/http4s_0_15 */ package com.teambytes.hipchat.sns.bridge.v0.server import org.http4s.dsl._ import com.teambytes.hipchat.sns.bridge.v0.models.json._ private[server] object Matchers { 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): Boolean = req.headers.get(ApiVersionMajor) match { case Some(v) if v.value == "0" => true case _ => false } } object InstallableUrlStringMatcher extends QueryParamDecoderMatcher[String]("installable_url") object RedirectToHipchatInstallBooleanDefFalseMatcher extends QueryParamDecoderMatcher[Boolean]("redirect_to_hipchat_install") { override def unapply(params: Map[String, Seq[String]]) = super.unapply(params).orElse(Some(false)) } object RedirectUrlStringMatcher extends QueryParamDecoderMatcher[String]("redirect_url") } trait HipchatCapabilitiesDescriptorRoutes { import Matchers._ implicit def circeJsonDecoder[A](implicit decoder: _root_.io.circe.Decoder[A]) = org.http4s.circe.jsonOf[A] implicit def circeJsonEncoder[A](implicit encoder: _root_.io.circe.Encoder[A]) = org.http4s.circe.jsonEncoderOf[A] sealed trait GetResponse object GetResponse { case class HTTP200(value: com.teambytes.hipchat.sns.bridge.v0.models.HipchatCapabilitiesDescriptor, headers: Seq[org.http4s.Header] = Nil) extends GetResponse case class UndocumentedResponse(response: scalaz.concurrent.Task[org.http4s.Response]) extends GetResponse } def get( _req: org.http4s.Request, redirectToHipchatInstall: Boolean ): scalaz.concurrent.Task[GetResponse] def apiVersionMatch(req: org.http4s.Message): Boolean = ApiVersion(req) def service() = org.http4s.HttpService { case _req @ GET -> Root / "hipchat" / "capabilities" :? RedirectToHipchatInstallBooleanDefFalseMatcher(redirectToHipchatInstall) if apiVersionMatch(_req) => get(_req, redirectToHipchatInstall).flatMap { case GetResponse.HTTP200(value, headers) => Ok(value).putHeaders(headers: _*) case GetResponse.UndocumentedResponse(response) => response } case _req @ GET -> Root / "hipchat" / "capabilities" :? RedirectToHipchatInstallBooleanDefFalseMatcher(redirectToHipchatInstall) if !_req.headers.get(ApiVersion.ApiVersionMajor).isDefined => BadRequest(s"Missing required request header: ${ApiVersion.ApiVersionMajor}.") } } trait HipchatInstallDataRoutes { import Matchers._ implicit def circeJsonDecoder[A](implicit decoder: _root_.io.circe.Decoder[A]) = org.http4s.circe.jsonOf[A] implicit def circeJsonEncoder[A](implicit encoder: _root_.io.circe.Encoder[A]) = org.http4s.circe.jsonEncoderOf[A] sealed trait GetResponse object GetResponse { case class HTTP200(value: com.teambytes.hipchat.sns.bridge.v0.models.HipchatCapabilitiesDescriptor, headers: Seq[org.http4s.Header] = Nil) extends GetResponse case class UndocumentedResponse(response: scalaz.concurrent.Task[org.http4s.Response]) extends GetResponse } def get( _req: org.http4s.Request, installableUrl: String, redirectUrl: String ): scalaz.concurrent.Task[GetResponse] sealed trait PostResponse object PostResponse { case class HTTP200(headers: Seq[org.http4s.Header] = Nil) extends PostResponse case class UndocumentedResponse(response: scalaz.concurrent.Task[org.http4s.Response]) extends PostResponse } def post( _req: org.http4s.Request, body: => org.http4s.DecodeResult[com.teambytes.hipchat.sns.bridge.v0.models.HipchatInstallData] ): scalaz.concurrent.Task[PostResponse] sealed trait DeleteByOauthIdResponse object DeleteByOauthIdResponse { case class HTTP200(headers: Seq[org.http4s.Header] = Nil) extends DeleteByOauthIdResponse case class UndocumentedResponse(response: scalaz.concurrent.Task[org.http4s.Response]) extends DeleteByOauthIdResponse } def deleteByOauthId( _req: org.http4s.Request, oauthId: String ): scalaz.concurrent.Task[DeleteByOauthIdResponse] def apiVersionMatch(req: org.http4s.Message): Boolean = ApiVersion(req) def service() = org.http4s.HttpService { case _req @ GET -> Root / "hipchat" / "installable" :? InstallableUrlStringMatcher(installableUrl) +& RedirectUrlStringMatcher(redirectUrl) if apiVersionMatch(_req) => get(_req, installableUrl, redirectUrl).flatMap { case GetResponse.HTTP200(value, headers) => Ok(value).putHeaders(headers: _*) case GetResponse.UndocumentedResponse(response) => response } case _req @ GET -> Root / "hipchat" / "installable" :? InstallableUrlStringMatcher(installableUrl) +& RedirectUrlStringMatcher(redirectUrl) if !_req.headers.get(ApiVersion.ApiVersionMajor).isDefined => BadRequest(s"Missing required request header: ${ApiVersion.ApiVersionMajor}.") case _req @ POST -> Root / "hipchat" / "installable" if apiVersionMatch(_req) => post(_req, _req.attemptAs[com.teambytes.hipchat.sns.bridge.v0.models.HipchatInstallData]).flatMap { case PostResponse.HTTP200(headers) => Ok().putHeaders(headers: _*) case PostResponse.UndocumentedResponse(response) => response } case _req @ POST -> Root / "hipchat" / "installable" if !_req.headers.get(ApiVersion.ApiVersionMajor).isDefined => BadRequest(s"Missing required request header: ${ApiVersion.ApiVersionMajor}.") case _req @ DELETE -> Root / "hipchat" / "installable" / oauthId if apiVersionMatch(_req) => deleteByOauthId(_req, oauthId).flatMap { case DeleteByOauthIdResponse.HTTP200(headers) => Ok().putHeaders(headers: _*) case DeleteByOauthIdResponse.UndocumentedResponse(response) => response } case _req @ DELETE -> Root / "hipchat" / "installable" / oauthId if !_req.headers.get(ApiVersion.ApiVersionMajor).isDefined => BadRequest(s"Missing required request header: ${ApiVersion.ApiVersionMajor}.") } } trait ServiceInfoRoutes { import Matchers._ implicit def circeJsonDecoder[A](implicit decoder: _root_.io.circe.Decoder[A]) = org.http4s.circe.jsonOf[A] implicit def circeJsonEncoder[A](implicit encoder: _root_.io.circe.Encoder[A]) = org.http4s.circe.jsonEncoderOf[A] sealed trait GetResponse object GetResponse { case class HTTP200(value: com.teambytes.hipchat.sns.bridge.v0.models.ServiceInfo, headers: Seq[org.http4s.Header] = Nil) extends GetResponse case class UndocumentedResponse(response: scalaz.concurrent.Task[org.http4s.Response]) extends GetResponse } def get( _req: org.http4s.Request ): scalaz.concurrent.Task[GetResponse] def apiVersionMatch(req: org.http4s.Message): Boolean = ApiVersion(req) def service() = org.http4s.HttpService { case _req @ GET -> Root / "info" if apiVersionMatch(_req) => get(_req).flatMap { case GetResponse.HTTP200(value, headers) => Ok(value).putHeaders(headers: _*) case GetResponse.UndocumentedResponse(response) => response } case _req @ GET -> Root / "info" if !_req.headers.get(ApiVersion.ApiVersionMajor).isDefined => BadRequest(s"Missing required request header: ${ApiVersion.ApiVersionMajor}.") } } trait SnsNotificationRoutes { import Matchers._ implicit def circeJsonDecoder[A](implicit decoder: _root_.io.circe.Decoder[A]) = org.http4s.circe.jsonOf[A] implicit def circeJsonEncoder[A](implicit encoder: _root_.io.circe.Encoder[A]) = org.http4s.circe.jsonEncoderOf[A] sealed trait PostResponse object PostResponse { case class HTTP200(value: String, headers: Seq[org.http4s.Header] = Nil) extends PostResponse case class UndocumentedResponse(response: scalaz.concurrent.Task[org.http4s.Response]) extends PostResponse } def post( _req: org.http4s.Request, roomId: String, body: => org.http4s.DecodeResult[com.teambytes.hipchat.sns.bridge.v0.models.SnsNotification] ): scalaz.concurrent.Task[PostResponse] def apiVersionMatch(req: org.http4s.Message): Boolean = ApiVersion(req) def service() = org.http4s.HttpService { case _req @ POST -> Root / "hipchat" / "room" / roomId / "notification" if apiVersionMatch(_req) => post(_req, roomId, _req.attemptAs[com.teambytes.hipchat.sns.bridge.v0.models.SnsNotification]).flatMap { case PostResponse.HTTP200(value, headers) => Ok(value).putHeaders(headers: _*) case PostResponse.UndocumentedResponse(response) => response } case _req @ POST -> Root / "hipchat" / "room" / roomId / "notification" if !_req.headers.get(ApiVersion.ApiVersionMajor).isDefined => BadRequest(s"Missing required request header: ${ApiVersion.ApiVersionMajor}.") } }