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

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

package sangria.validation.rules

import org.parboiled2.Position

import scala.collection.mutable.{Map ⇒ MutableMap}

import sangria.ast
import sangria.ast.AstVisitorCommand._
import sangria.validation._

/**
 * Unique input field names
 *
 * A GraphQL input object value is only valid if all supplied fields are
 * uniquely named.
 */
class UniqueInputFieldNames extends ValidationRule {
  override def visitor(ctx: ValidationContext) = new AstValidatingVisitor {
    val knownNames = MutableMap[String, Option[Position]]()

    override val onEnter: ValidationVisit = {
      case ast.ObjectValue(fields, _, _) ⇒
        knownNames.clear()
        Right(Continue)

      case ast.ObjectField(name, _, _, pos) ⇒
        if (knownNames contains name)
          Left(Vector(DuplicateInputFieldViolation(name, ctx.sourceMapper, knownNames(name).toList ++ pos.toList)))
        else {
          knownNames += name → pos
          Right(Continue)
        }
    }
  }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy