diff --git a/akka-http-core/src/main/java/akka/http/javadsl/model/ContentTypeRange.java b/akka-http-core/src/main/java/akka/http/javadsl/model/ContentTypeRange.java new file mode 100644 index 0000000000..ba86afa484 --- /dev/null +++ b/akka-http-core/src/main/java/akka/http/javadsl/model/ContentTypeRange.java @@ -0,0 +1,25 @@ +/* + * Copyright (C) 2009-2015 Typesafe Inc. + */ + +package akka.http.javadsl.model; + +/** + * A data structure that combines an acceptable media range and an acceptable charset range into + * one structure to be used with unmarshalling. + */ +public abstract class ContentTypeRange { + public abstract MediaRange mediaRange(); + + public abstract HttpCharsetRange charsetRange(); + + /** + * Returns true if this range includes the given content type. + */ + public abstract boolean matches(ContentType contentType); + + /** + * Returns a ContentType instance which fits this range. + */ + public abstract ContentType specimen(); +} diff --git a/akka-http-core/src/main/scala/akka/http/impl/util/JavaMapping.scala b/akka-http-core/src/main/scala/akka/http/impl/util/JavaMapping.scala index 325de26860..cf28c4e357 100644 --- a/akka-http-core/src/main/scala/akka/http/impl/util/JavaMapping.scala +++ b/akka-http-core/src/main/scala/akka/http/impl/util/JavaMapping.scala @@ -156,6 +156,7 @@ private[http] object JavaMapping { implicit object DateTime extends Inherited[jm.DateTime, akka.http.scaladsl.model.DateTime] implicit object ContentType extends Inherited[jm.ContentType, sm.ContentType] + implicit object ContentTypeRange extends Inherited[jm.ContentTypeRange, sm.ContentTypeRange] implicit object Host extends Inherited[jm.Host, sm.Uri.Host] implicit object HttpCharset extends Inherited[jm.HttpCharset, sm.HttpCharset] implicit object HttpCharsetRange extends Inherited[jm.HttpCharsetRange, sm.HttpCharsetRange] diff --git a/akka-http-core/src/main/scala/akka/http/scaladsl/model/ContentType.scala b/akka-http-core/src/main/scala/akka/http/scaladsl/model/ContentType.scala index d5840514ae..25fc0b6b80 100644 --- a/akka-http-core/src/main/scala/akka/http/scaladsl/model/ContentType.scala +++ b/akka-http-core/src/main/scala/akka/http/scaladsl/model/ContentType.scala @@ -10,8 +10,8 @@ import akka.japi.{ Option ⇒ JOption } import akka.http.javadsl.{ model ⇒ jm } import akka.http.impl.util.JavaMapping.Implicits._ -final case class ContentTypeRange(mediaRange: MediaRange, charsetRange: HttpCharsetRange) extends ValueRenderable { - def matches(contentType: ContentType) = +final case class ContentTypeRange(mediaRange: MediaRange, charsetRange: HttpCharsetRange) extends jm.ContentTypeRange with ValueRenderable { + def matches(contentType: jm.ContentType) = mediaRange.matches(contentType.mediaType) && charsetRange.matches(contentType.charset) def render[R <: Rendering](r: R): r.type = charsetRange match {