summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLi Haoyi <haoyi.sg@gmail.com>2018-07-26 14:06:28 +0800
committerLi Haoyi <haoyi.sg@gmail.com>2018-07-26 14:06:28 +0800
commit483fe1725cbf6c29f349bdcfd1169ca3fb561210 (patch)
treebba84abcde1f28fc43c340da36f1fdecd99fe393
parentaaae392f2534fc0c377b81f1a35a6d5b86f231f2 (diff)
downloadcask-483fe1725cbf6c29f349bdcfd1169ca3fb561210.tar.gz
cask-483fe1725cbf6c29f349bdcfd1169ca3fb561210.tar.bz2
cask-483fe1725cbf6c29f349bdcfd1169ca3fb561210.zip
Alias Decorator, Endpoint and BaseDecorator onto cask.*
-rw-r--r--cask/src/cask/endpoints/FormEndpoint.scala4
-rw-r--r--cask/src/cask/endpoints/JsonEndpoint.scala4
-rw-r--r--cask/src/cask/endpoints/StaticEndpoints.scala4
-rw-r--r--cask/src/cask/endpoints/WebEndpoints.scala5
-rw-r--r--cask/src/cask/main/Decorators.scala53
-rw-r--r--cask/src/cask/main/Routes.scala51
-rw-r--r--cask/src/cask/package.scala3
-rw-r--r--cask/test/src/test/cask/Decorated.scala4
-rw-r--r--cask/test/src/test/cask/FailureTests.scala2
9 files changed, 68 insertions, 62 deletions
diff --git a/cask/src/cask/endpoints/FormEndpoint.scala b/cask/src/cask/endpoints/FormEndpoint.scala
index 2a7fbd2..c58c765 100644
--- a/cask/src/cask/endpoints/FormEndpoint.scala
+++ b/cask/src/cask/endpoints/FormEndpoint.scala
@@ -1,7 +1,7 @@
package cask.endpoints
import cask.internal.{Router, Util}
-import cask.main.Routes
+import cask.main.{Endpoint, Routes}
import cask.model.{FormValue, ParamContext, Response}
import io.undertow.server.handlers.form.FormParserFactory
@@ -34,7 +34,7 @@ object FormReader{
def read(ctx: ParamContext, label: String, input: Seq[FormValue]) = input.map(_.asFile.get)
}
}
-class postForm(val path: String, override val subpath: Boolean = false) extends Routes.Endpoint[Response]{
+class postForm(val path: String, override val subpath: Boolean = false) extends Endpoint[Response]{
val methods = Seq("post")
type Input = Seq[FormValue]
diff --git a/cask/src/cask/endpoints/JsonEndpoint.scala b/cask/src/cask/endpoints/JsonEndpoint.scala
index d9d39c3..425f942 100644
--- a/cask/src/cask/endpoints/JsonEndpoint.scala
+++ b/cask/src/cask/endpoints/JsonEndpoint.scala
@@ -2,7 +2,7 @@ package cask.endpoints
import cask.internal.{Router, Util}
import cask.internal.Router.EntryPoint
-import cask.main.Routes
+import cask.main.{Endpoint, Routes}
import cask.model.{ParamContext, Response}
@@ -24,7 +24,7 @@ object JsReader{
}
}
}
-class postJson(val path: String, override val subpath: Boolean = false) extends Routes.Endpoint[Response]{
+class postJson(val path: String, override val subpath: Boolean = false) extends Endpoint[Response]{
val methods = Seq("post")
type Input = ujson.Js.Value
type InputParser[T] = JsReader[T]
diff --git a/cask/src/cask/endpoints/StaticEndpoints.scala b/cask/src/cask/endpoints/StaticEndpoints.scala
index 31528aa..436fd25 100644
--- a/cask/src/cask/endpoints/StaticEndpoints.scala
+++ b/cask/src/cask/endpoints/StaticEndpoints.scala
@@ -1,10 +1,10 @@
package cask.endpoints
import cask.internal.Router
-import cask.main.Routes
+import cask.main.Endpoint
import cask.model.ParamContext
-class static(val path: String) extends Routes.Endpoint[String] {
+class static(val path: String) extends Endpoint[String] {
val methods = Seq("get")
type Input = Seq[String]
type InputParser[T] = QueryParamReader[T]
diff --git a/cask/src/cask/endpoints/WebEndpoints.scala b/cask/src/cask/endpoints/WebEndpoints.scala
index cd707b8..d0ac46d 100644
--- a/cask/src/cask/endpoints/WebEndpoints.scala
+++ b/cask/src/cask/endpoints/WebEndpoints.scala
@@ -1,14 +1,13 @@
package cask.endpoints
import cask.internal.Router
-import cask.internal.Router.EntryPoint
-import cask.main.Routes
+import cask.main.Endpoint
import cask.model.{BaseResponse, ParamContext}
import collection.JavaConverters._
-trait WebEndpoint extends Routes.Endpoint[BaseResponse]{
+trait WebEndpoint extends Endpoint[BaseResponse]{
type Input = Seq[String]
type InputParser[T] = QueryParamReader[T]
def getRawParams(ctx: ParamContext) = Right(
diff --git a/cask/src/cask/main/Decorators.scala b/cask/src/cask/main/Decorators.scala
new file mode 100644
index 0000000..91cf92f
--- /dev/null
+++ b/cask/src/cask/main/Decorators.scala
@@ -0,0 +1,53 @@
+package cask.main
+
+import cask.internal.Router.ArgReader
+import cask.model.ParamContext
+
+
+trait Endpoint[R] extends BaseDecorator{
+
+ val path: String
+ val methods: Seq[String]
+ def subpath: Boolean = false
+ def wrapMethodOutput(ctx: ParamContext,t: R): cask.internal.Router.Result[Any] = {
+ cask.internal.Router.Result.Success(t)
+ }
+
+ def wrapPathSegment(s: String): Input
+
+}
+
+/**
+ * The core interface of decorator annotations: the decorator provides "raw"
+ * values to the annotated function via `getRawParams`, which then get
+ * processed by `getParamParser` into the correct argument types before
+ * being passed to the function.
+ *
+ * For a trivial "provide value" decorator, `getRawParams` would return the
+ * final param value and `getParamParser` would return a no-op parser. For
+ * a decorator that takes its input as query-params, JSON, or similar,
+ * `getRawParams` would provide raw query/JSON/etc. values and
+ * `getParamParser` would be responsible for processing those into the
+ * correct parameter types.
+ */
+trait BaseDecorator{
+ type Input
+ type InputParser[T] <: ArgReader[Input, T, ParamContext]
+ def getRawParams(ctx: ParamContext): Either[cask.model.Response, Map[String, Input]]
+ def getParamParser[T](implicit p: InputParser[T]) = p
+
+}
+
+trait Decorator extends BaseDecorator {
+ type Input = Any
+ type InputParser[T] = NoOpParser[Input, T]
+}
+
+class NoOpParser[Input, T] extends ArgReader[Input, T, ParamContext] {
+ def arity = 1
+
+ def read(ctx: ParamContext, label: String, input: Input) = input.asInstanceOf[T]
+}
+object NoOpParser{
+ implicit def instance[Input, T] = new NoOpParser[Input, T]
+} \ No newline at end of file
diff --git a/cask/src/cask/main/Routes.scala b/cask/src/cask/main/Routes.scala
index 60992b5..1c49e42 100644
--- a/cask/src/cask/main/Routes.scala
+++ b/cask/src/cask/main/Routes.scala
@@ -1,61 +1,12 @@
package cask.main
-import cask.internal.Router.{ArgReader, EntryPoint}
+import cask.internal.Router.EntryPoint
import cask.model.ParamContext
import scala.reflect.macros.blackbox.Context
import language.experimental.macros
object Routes{
-
- trait Endpoint[R] extends BaseDecorator{
-
- val path: String
- val methods: Seq[String]
- def subpath: Boolean = false
- def wrapMethodOutput(ctx: ParamContext,t: R): cask.internal.Router.Result[Any] = {
- cask.internal.Router.Result.Success(t)
- }
-
- def wrapPathSegment(s: String): Input
-
- }
-
- /**
- * The core interface of decorator annotations: the decorator provides "raw"
- * values to the annotated function via `getRawParams`, which then get
- * processed by `getParamParser` into the correct argument types before
- * being passed to the function.
- *
- * For a trivial "provide value" decorator, `getRawParams` would return the
- * final param value and `getParamParser` would return a no-op parser. For
- * a decorator that takes its input as query-params, JSON, or similar,
- * `getRawParams` would provide raw query/JSON/etc. values and
- * `getParamParser` would be responsible for processing those into the
- * correct parameter types.
- */
- trait BaseDecorator{
- type Input
- type InputParser[T] <: ArgReader[Input, T, ParamContext]
- def getRawParams(ctx: ParamContext): Either[cask.model.Response, Map[String, Input]]
- def getParamParser[T](implicit p: InputParser[T]) = p
-
- }
-
- trait Decorator extends BaseDecorator {
- type Input = Any
- type InputParser[T] = NoOpParser[Input, T]
- }
-
- class NoOpParser[Input, T] extends ArgReader[Input, T, ParamContext] {
- def arity = 1
-
- def read(ctx: ParamContext, label: String, input: Input) = input.asInstanceOf[T]
- }
- object NoOpParser{
- implicit def instance[Input, T] = new NoOpParser[Input, T]
- }
-
case class EndpointMetadata[T](decorators: Seq[BaseDecorator],
endpoint: Endpoint[_],
entryPoint: EntryPoint[T, ParamContext])
diff --git a/cask/src/cask/package.scala b/cask/src/cask/package.scala
index b791eb1..37e61e2 100644
--- a/cask/src/cask/package.scala
+++ b/cask/src/cask/package.scala
@@ -29,5 +29,8 @@ package object cask {
type Routes = main.Routes
val Routes = main.Routes
type Main = main.Main
+ type Decorator = main.Decorator
+ type Endpoint[R] = main.Endpoint[R]
+ type BaseDecorator = main.BaseDecorator
}
diff --git a/cask/test/src/test/cask/Decorated.scala b/cask/test/src/test/cask/Decorated.scala
index 3677203..bd27647 100644
--- a/cask/test/src/test/cask/Decorated.scala
+++ b/cask/test/src/test/cask/Decorated.scala
@@ -6,10 +6,10 @@ object Decorated extends cask.MainRoutes{
class User{
override def toString = "[haoyi]"
}
- class loggedIn extends cask.Routes.Decorator {
+ class loggedIn extends cask.Decorator {
def getRawParams(ctx: ParamContext) = Right(Map("user" -> new User()))
}
- class withExtra extends cask.Routes.Decorator {
+ class withExtra extends cask.Decorator {
def getRawParams(ctx: ParamContext) = Right(Map("extra" -> 31337))
}
diff --git a/cask/test/src/test/cask/FailureTests.scala b/cask/test/src/test/cask/FailureTests.scala
index 03f3777..dd6914a 100644
--- a/cask/test/src/test/cask/FailureTests.scala
+++ b/cask/test/src/test/cask/FailureTests.scala
@@ -4,7 +4,7 @@ import cask.model.ParamContext
import utest._
object FailureTests extends TestSuite {
- class myDecorator extends cask.Routes.Decorator {
+ class myDecorator extends cask.Decorator {
def getRawParams(ctx: ParamContext) = Right(Map("extra" -> 31337))
}
val tests = Tests{