This is an automated email from the ASF dual-hosted git repository.
zwoop pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/trafficserver.git
The following commit(s) were added to refs/heads/master by this push:
new e91c07d13b Error::Status can now take optional reason (#12098)
e91c07d13b is described below
commit e91c07d13be7ae3c9d16ad36f7ff5019a3a497cd
Author: Leif Hedstrom <[email protected]>
AuthorDate: Mon Mar 17 16:34:44 2025 -0600
Error::Status can now take optional reason (#12098)
---
doc/developer-guide/cripts/cripts-misc.en.rst | 10 ++++++++--
include/cripts/Context.hpp | 2 +-
include/cripts/Error.hpp | 6 +++---
src/cripts/Error.cc | 7 ++++++-
4 files changed, 18 insertions(+), 7 deletions(-)
diff --git a/doc/developer-guide/cripts/cripts-misc.en.rst
b/doc/developer-guide/cripts/cripts-misc.en.rst
index a3e64f73c0..698be215a5 100644
--- a/doc/developer-guide/cripts/cripts-misc.en.rst
+++ b/doc/developer-guide/cripts/cripts-misc.en.rst
@@ -36,8 +36,8 @@ Errors
======
Often it's useful to be able to abort a client transaction prematurely, and
-return an error to the client. Cripts provid
-making this easy.
+return an error to the client. Cripts provides a simple way to do this, using
+the ``cripts::Error`` object.
.. note::
Explicitly forcing an HTTP error overrides any other response status that
may have been set.
@@ -68,6 +68,12 @@ Example:
}
}
+The `Status` and `Reason` can optionally be set in one single call to the
status setter:
+
+.. code-block:: cpp
+
+ cripts::Error::Status::Set(403, "Go Away");
+
.. _cripts-misc-transaction:
ATS transactions are generally hidden within Cripts, but for power users, the
diff --git a/include/cripts/Context.hpp b/include/cripts/Context.hpp
index 6e1520e283..e3592aefe2 100644
--- a/include/cripts/Context.hpp
+++ b/include/cripts/Context.hpp
@@ -102,7 +102,7 @@ private:
// This may be weird, but oh well for now.
#define Get() _get(context)
-#define Set(_value) _set(context, _value)
+#define Set(_value, ...) _set(context, _value __VA_OPT__(, ) __VA_ARGS__)
#define Update() _update(context)
#define RunRemap() _runRemap(context)
#define Activate() _activate(context->p_instance)
diff --git a/include/cripts/Error.hpp b/include/cripts/Error.hpp
index d1aefea9a4..da674abe60 100644
--- a/include/cripts/Error.hpp
+++ b/include/cripts/Error.hpp
@@ -71,12 +71,12 @@ public:
Status(const self_type &) = delete;
void operator=(const self_type &) = delete;
- static void _set(cripts::Context *context, TSHttpStatus status);
+ static void _set(cripts::Context *context, TSHttpStatus status, const
cripts::string_view msg = {});
static void
- _set(cripts::Context *context, int status)
+ _set(cripts::Context *context, int status, const cripts::string_view msg =
{})
{
- _set(context, static_cast<TSHttpStatus>(status));
+ _set(context, static_cast<TSHttpStatus>(status), msg);
}
static TSHttpStatus _get(cripts::Context *context);
diff --git a/src/cripts/Error.cc b/src/cripts/Error.cc
index b1076d6f82..606c05cbbd 100644
--- a/src/cripts/Error.cc
+++ b/src/cripts/Error.cc
@@ -44,12 +44,17 @@ Error::Reason::_set(cripts::Context *context, const
cripts::string_view msg)
context->state.error._reason._setter(msg);
}
+// For convenience, an optional Reason message can also be specified with the
status
void
-Error::Status::_set(cripts::Context *context, TSHttpStatus status)
+Error::Status::_set(cripts::Context *context, TSHttpStatus status, const
cripts::string_view msg)
{
context->state.error.Fail();
context->state.error._status._setter(status);
+ if (msg.size() > 0) {
+ context->state.error._reason._setter(msg);
+ }
+
if (context->state.error.Redirected() || status ==
TS_HTTP_STATUS_MOVED_PERMANENTLY ||
status == TS_HTTP_STATUS_MOVED_TEMPORARILY || status ==
TS_HTTP_STATUS_TEMPORARY_REDIRECT ||
status == TS_HTTP_STATUS_PERMANENT_REDIRECT) {