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

sjsonnet.ExternalVariable.scala Maven / Gradle / Ivy

The newest version!
package sjsonnet

/**
 * An external variable kind indicates the type of external variable.
 */
sealed trait ExternalVariableKind[T]

object ExternalVariableKind {

  /**
   * Get an instance of ExternalVariableKind for a code snippet.
   */
  def code: ExternalVariableKind[String] = Code

  /**
   * Get an instance of ExternalVariableKind for an expr.
   */
  def expr: ExternalVariableKind[sjsonnet.Expr] = Expr

  /**
   * Get an instance of ExternalVariableKind for a variable.
   */
  def variable: ExternalVariableKind[String] = Variable

  /**
   * Indicates that the external variable is a code snippet.
   */
  case object Variable extends ExternalVariableKind[String] {
    override def toString: String = "variable"
  }

  /**
   * Indicates that the external variable is a string literal.
   */
  case object Code extends ExternalVariableKind[String] {
    override def toString: String = "code"
  }

  /**
   * Indicates that the external variable is a parsed jsonnet expression.
   */
  case object Expr extends ExternalVariableKind[sjsonnet.Expr] {
    override def toString: String = "expr"
  }
}

final case class ExternalVariable[T](kind: ExternalVariableKind[T], value: T) {
  override def toString: String = s"ExternalVariable($kind, $value)"
}

object ExternalVariable {

  /**
   * the external variable is a code snippet
   */
  def code(value: String): ExternalVariable[String] =
    ExternalVariable(ExternalVariableKind.code, value)

  /**
   * the external variable is a parsed jsonnet expression
   */
  def expr(value: sjsonnet.Expr): ExternalVariable[sjsonnet.Expr] =
    ExternalVariable(ExternalVariableKind.expr, value)

  /**
   * the external variable is a variable, string literal
   */
  def variable(value: String): ExternalVariable[String] =
    ExternalVariable(ExternalVariableKind.variable, value)
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy