diff --git a/akka-channels-tests/src/test/scala/akka/channels/ChannelSpec.scala b/akka-channels-tests/src/test/scala/akka/channels/ChannelSpec.scala index b92e695364..a06a0647dc 100644 --- a/akka-channels-tests/src/test/scala/akka/channels/ChannelSpec.scala +++ b/akka-channels-tests/src/test/scala/akka/channels/ChannelSpec.scala @@ -471,6 +471,15 @@ class ChannelSpec extends AkkaSpec(ActorSystem("ChannelSpec", AkkaSpec.testConf, lastSender must be === t.actorRef } + "be able to transform Futures" in { + val client = new ChannelRef[(Any, Nothing) :+: TNil](testActor) + val someActor = ChannelExt(system).actorOf(new Tester, "t26b") + implicit val timeout = Timeout(1.second) + implicit val ec = system.dispatcher + A -?-> someActor -*-> (_ map (_.value match { case C ⇒ B })) -?-> someActor -!-> client + expectMsg(D) + } + } "A WrappedMessage" must { diff --git a/akka-channels/src/main/scala/akka/channels/Channels.scala b/akka-channels/src/main/scala/akka/channels/Channels.scala index beae4b9cb5..e86c7118d0 100644 --- a/akka-channels/src/main/scala/akka/channels/Channels.scala +++ b/akka-channels/src/main/scala/akka/channels/Channels.scala @@ -104,7 +104,7 @@ trait Channels[P <: ChannelList, C <: ChannelList] { this: Actor ⇒ else F2(recv.asInstanceOf[(Any, ChannelRef[ChannelList]) ⇒ Unit]) def apply(recv: R): Unit = { - val tt = implicitly[ru.TypeTag[Ch]] + val tt = ru.typeTag[Ch] behavior ++= (for (t ← inputChannels(ru)(tt.tpe)) yield tt.mirror.runtimeClass(t.widen) -> ff(recv)) } } diff --git a/akka-channels/src/main/scala/akka/channels/Ops.scala b/akka-channels/src/main/scala/akka/channels/Ops.scala index 59c4549c8e..41916b78d3 100644 --- a/akka-channels/src/main/scala/akka/channels/Ops.scala +++ b/akka-channels/src/main/scala/akka/channels/Ops.scala @@ -56,6 +56,7 @@ class ActorRefOps(val ref: ActorRef) extends AnyVal { class FutureOps[T](val future: Future[T]) extends AnyVal { def -!->[C <: ChannelList](channel: ChannelRef[C]): Future[T] = macro macros.Tell.futureOpsImpl[C, T] def -?->[C <: ChannelList](channel: ChannelRef[C]): Future[_] = macro macros.Ask.futureImpl[ChannelList, Any, C, T] + def -*->[U](f: Future[T] ⇒ Future[U]): Future[U] = f(future) def lub[LUB](implicit ev: T <:< WrappedMessage[_, LUB]): Future[LUB] = { implicit val ec = ExecutionContexts.sameThreadExecutionContext future map (ev(_).value)