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

org.scalatra.Control.scala Maven / Gradle / Ivy

package org.scalatra

import java.lang.{ Integer => JInteger }

import scala.util.control.NoStackTrace

/**
 * A collection of methods that affect the control flow of routes.
 */
trait Control {

  /**
   * Immediately halts processing of a request.  Can be called from either a
   * before filter or a route.
   *
   * @param status the status to set on the response, or null to leave
   *        the status unchanged.
   * @param body a result to render through the render pipeline as the body
   * @param headers headers to add to the response
   */
  def halt[T](
    status: JInteger = null,
    body: T = (),
    headers: Map[String, String] = Map.empty): Nothing = {
    val statusOpt = if (status == null) None else Some(status.intValue)
    throw new HaltException(statusOpt, headers, body)
  }

  def halt(result: ActionResult): Nothing = {
    halt(result.status, result.body, result.headers)
  }

  /**
   * Immediately exits from the current route.
   */
  def pass(): Nothing = throw new PassException
}

case class HaltException(
  status: Option[Int],
  headers: Map[String, String],
  body: Any)
  extends Throwable with NoStackTrace

class PassException
  extends Throwable
  with NoStackTrace




© 2015 - 2024 Weber Informatics LLC | Privacy Policy