aboutsummaryrefslogtreecommitdiff
path: root/src/main/scala/com/drivergrp/core/Service.scala
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/scala/com/drivergrp/core/Service.scala')
-rw-r--r--src/main/scala/com/drivergrp/core/Service.scala34
1 files changed, 34 insertions, 0 deletions
diff --git a/src/main/scala/com/drivergrp/core/Service.scala b/src/main/scala/com/drivergrp/core/Service.scala
new file mode 100644
index 0000000..4404c9c
--- /dev/null
+++ b/src/main/scala/com/drivergrp/core/Service.scala
@@ -0,0 +1,34 @@
+package com.drivergrp.core
+
+import akka.http.scaladsl.server.{Route, RouteConcatenation}
+
+
+trait Service {
+ import scala.reflect.runtime.universe._
+
+ val name: String
+ def route: Route
+ def serviceTypes: Seq[Type]
+
+ def activate(): Unit = {}
+ def deactivate(): Unit = {}
+}
+
+/**
+ * Service implementation which may be used to composed a few
+ *
+ * @param name more general name of the composite service,
+ * must be provided as there is no good way to automatically
+ * generalize the name from the composed services' names
+ * @param services services to compose into a single one
+ */
+class CompositeService(val name: String, services: Seq[Service])
+ extends Service with RouteConcatenation {
+
+ def route: Route = services.map(_.route).reduce(_ ~ _)
+
+ def serviceTypes = services.flatMap(_.serviceTypes)
+
+ override def activate() = services.foreach(_.activate())
+ override def deactivate() = services.reverse.foreach(_.deactivate())
+} \ No newline at end of file