From a0877d81ca2844d75dc361b5ce7c99afacd6e25f Mon Sep 17 00:00:00 2001 From: vlad Date: Thu, 25 Jan 2018 14:12:31 -0800 Subject: Extracting query library --- .../restquery/rest/parsers/PaginationParser.scala | 23 ++++++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 src/main/scala/xyz/driver/restquery/rest/parsers/PaginationParser.scala (limited to 'src/main/scala/xyz/driver/restquery/rest/parsers/PaginationParser.scala') diff --git a/src/main/scala/xyz/driver/restquery/rest/parsers/PaginationParser.scala b/src/main/scala/xyz/driver/restquery/rest/parsers/PaginationParser.scala new file mode 100644 index 0000000..2b4547b --- /dev/null +++ b/src/main/scala/xyz/driver/restquery/rest/parsers/PaginationParser.scala @@ -0,0 +1,23 @@ +package xyz.driver.restquery.http.parsers + +import xyz.driver.restquery.domain.Pagination + +import scala.util._ + +object PaginationParser { + + def parse(query: Seq[(String, String)]): Try[Pagination] = { + val IntString = """(\d+)""".r + def validate(field: String, default: Int) = query.collectFirst { case (`field`, size) => size } match { + case Some(IntString(x)) if x.toInt > 0 => x.toInt + case Some(IntString(x)) => throw new ParseQueryArgException((field, s"must greater than zero (found $x)")) + case Some(str) => throw new ParseQueryArgException((field, s"must be an integer (found $str)")) + case None => default + } + + Try { + Pagination(validate("pageSize", Pagination.Default.pageSize), + validate("pageNumber", Pagination.Default.pageNumber)) + } + } +} -- cgit v1.2.3