aboutsummaryrefslogtreecommitdiff
path: root/src/main/scala/xyz/driver/restquery/rest/parsers/PaginationParser.scala
diff options
context:
space:
mode:
authorvlad <vlad@driver.xyz>2018-01-25 14:12:31 -0800
committervlad <vlad@driver.xyz>2018-01-25 14:12:31 -0800
commita0877d81ca2844d75dc361b5ce7c99afacd6e25f (patch)
tree8fe49f45cbcddbbb9a3d167099abe7aa2625e56b /src/main/scala/xyz/driver/restquery/rest/parsers/PaginationParser.scala
parent46a22e9ab324a0068a85952cdc809800f360f445 (diff)
downloadrest-query-a0877d81ca2844d75dc361b5ce7c99afacd6e25f.tar.gz
rest-query-a0877d81ca2844d75dc361b5ce7c99afacd6e25f.tar.bz2
rest-query-a0877d81ca2844d75dc361b5ce7c99afacd6e25f.zip
Extracting query library
Diffstat (limited to 'src/main/scala/xyz/driver/restquery/rest/parsers/PaginationParser.scala')
-rw-r--r--src/main/scala/xyz/driver/restquery/rest/parsers/PaginationParser.scala23
1 files changed, 23 insertions, 0 deletions
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))
+ }
+ }
+}