2016-06-04 5 views
2

Ich versuche, mehrere Endpunkte zusammen zu erstellen, wenn Sie den HTTP-Server starten. mehrere Endpunkte sind wie folgt definiert:Wie mehrere Endpunkte in Finken zu kombinieren

val foo = get("foo") { Ok("bar") } 
    val test = get("test") { Ok("test") } 

Dieser Code arbeitet

foo :+: test 

jedoch diesen Code nicht funktioniert.

List(foo, test).reduceLeft(_ :+: _) 

Der Fehler ist

type mismatch; 
found : io.finch.Endpoint[shapeless.:+:[String,shapeless.:+:[String,shapeless.CNil]]] 
required: io.finch.Endpoint[String] 
val controllers = List(foo, test).reduce(_ :+: _) 
             ^

ich ganz, warum reduce nicht funktionieren hier und was nicht verstehen, ist die beste Praxis

+0

darf ich vorschlagen, dass Sie an meinem Projekt suchen: https://github.com/akozhemiakin/finchrich Es kann Ihnen helfen Endpunkte in einer weniger ausführlichen Art und Weise zu kombinieren. –

Antwort

2

warum reduzieren wird nicht funktionieren hier

Endpunkt in Finch zu kombinieren

Wenn Siehaben, y: Endpoint[String] dann x :+: y gibt ein Endpoint[Coproduct[String, String]] - wichtig ist es nicht vom gleichen Typ wie x oder y

am reduce Unterschrift Werfen Sie einen Blick:

List[A].reduce[A1 >: A](op: (A1, A1) ⇒ A1): A1 

Sie haben eine List[Endpoint[String]] - die op muss Argumente x: Endpoint[String], y: Endpoint[String] nehmen und eine Endpoint[String] zurückgeben - aber :+: wird Endpoint[Coproduct[String, String]]

beste Praxis zurückzukehren Endpoint in Finch zu kombinieren

ich Finch nicht verwendet haben, aber alle Beispiele in der Repo einfach kombinieren die Endpunkte mit :+:

https://github.com/finagle/finch/blob/e3a62bf9a1cb26af40af428dd9be8b2dc3339c44/examples/src/main/scala/io/finch/todo/Main.scala#L83

getTodos :+: postTodo :+: deleteTodo :+: deleteTodos :+: patchTodo 

Sammlungen (wie List) sind super Nützlich, wenn Sie die Elemente zur Laufzeit manipulieren wollen - ist das ein Anwendungsfall, den Sie unterstützen müssen? Ich habe im Allgemeinen festgestellt, dass ich alle meine Wege bei der Kompilierung


1. Einige Freiheiten mit dem Coproduct Typ Signatur genommen wurden wissen - Coproduct[String, String] statt shapeless.:+:[String, shapeless.:+:[String, shapeless.CNil]]

2. Ein ähnliches Argument gilt für reduceLeft

Verwandte Themen