
sangria.validation.rules.UniqueVariableNames.scala Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of sangria_2.11 Show documentation
Show all versions of sangria_2.11 Show documentation
Scala GraphQL implementation
package sangria.validation.rules
import org.parboiled2.Position
import scala.language.postfixOps
import sangria.ast
import sangria.ast.AstVisitorCommand._
import sangria.validation._
import scala.collection.mutable.{Map ⇒ MutableMap}
/**
* Unique variable names
*
* A GraphQL operation is only valid if all its variables are uniquely named.
*/
class UniqueVariableNames extends ValidationRule {
override def visitor(ctx: ValidationContext) = new AstValidatingVisitor {
val knownVariableNames = MutableMap[String, List[Position]]()
override val onEnter: ValidationVisit = {
case _: ast.OperationDefinition ⇒
knownVariableNames.clear()
Right(Continue)
case ast.VariableDefinition(name, _, _, pos) ⇒
knownVariableNames get name match {
case Some(otherPos) ⇒
Left(Vector(DuplicateVariableViolation(name, ctx.sourceMapper, otherPos ++ pos.toList)))
case None ⇒
knownVariableNames += name → pos.toList
Right(Continue)
}
}
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy