Skip to content

Instantly share code, notes, and snippets.

@ayushmishra2005
Created September 24, 2017 23:03
Show Gist options
  • Save ayushmishra2005/f9d85da71e6d654ec7d495269f0bcb99 to your computer and use it in GitHub Desktop.
Save ayushmishra2005/f9d85da71e6d654ec7d495269f0bcb99 to your computer and use it in GitHub Desktop.
In Akka HTTP, You can create custom headers by extending ModeledCustomHeader or CustomHeader.
package com.tutorial.sample
import akka.http.scaladsl.model.headers.{CustomHeader, ModeledCustomHeader, ModeledCustomHeaderCompanion, RawHeader}
import org.scalatest._
import scala.util.Try
class CustomHeaderSpec extends FlatSpec with Matchers with BeforeAndAfterAll {
final class ApiTokenModeledHeader(token: String) extends ModeledCustomHeader[ApiTokenModeledHeader] {
override def renderInRequests = false
override def renderInResponses = false
override val companion = ApiTokenModeledHeader
override def value: String = token
}
object ApiTokenModeledHeader extends ModeledCustomHeaderCompanion[ApiTokenModeledHeader] {
override val name = "apiKey"
override def parse(value: String) = Try(new ApiTokenModeledHeader(value))
}
case class ApiTokenHeader(token: String) extends CustomHeader {
override def renderInRequests = false
override def renderInResponses = false
override def value: String = token
override val name = "apicustomKey"
}
"A custom header" should "be validated" in {
val ApiTokenModeledHeader(t1) = ApiTokenModeledHeader("token")
t1 should ===("token")
val RawHeader(k2, v2) = ApiTokenModeledHeader("token")
k2 should ===("apiKey")
v2 should ===("token")
// will match, header keys are case insensitive
val ApiTokenModeledHeader(v3) = RawHeader("APIKEY", "token")
v3 should ===("token")
intercept[MatchError] {
// won't match, different header name
val ApiTokenModeledHeader(v6) = RawHeader("different", "token")
}
val ApiTokenHeader(v4) = ApiTokenHeader("token")
v4 should ===("token")
// Will not compile
/*val ApiTokenHeader(v5) = RawHeader("APICUSTOMKEY", "token")
v5 should ===("token")*/
}
}
@phderome
Copy link

Lines 33-35 don't compile for me.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment