All Downloads are FREE. Search and download functionalities are using the official Maven repository.

sangria.validation.rules.UniqueVariableNames.scala Maven / Gradle / Ivy

There is a newer version: 2.0.1
Show newest version
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