| /* | |
| Licensed to the Apache Software Foundation (ASF) under one | |
| or more contributor license agreements. See the NOTICE file | |
| distributed with this work for additional information | |
| regarding copyright ownership. The ASF licenses this file | |
| to you under the Apache License, Version 2.0 (the | |
| "License"); you may not use this file except in compliance | |
| with the License. You may obtain a copy of the License at | |
| http://www.apache.org/licenses/LICENSE-2.0 | |
| Unless required by applicable law or agreed to in writing, software | |
| distributed under the License is distributed on an "AS IS" BASIS, | |
| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
| See the License for the specific language governing permissions and | |
| limitations under the License. | |
| */ | |
| #pragma once | |
| #include <vector> | |
| #include "cripts/Lulu.hpp" | |
| #include "cripts/Transaction.hpp" | |
| namespace cripts | |
| { | |
| // We have to forward declare this, to avoid some circular dependencies | |
| class Context; | |
| namespace Bundle | |
| { | |
| class Error | |
| { | |
| using self_type = Error; | |
| public: | |
| Error() = delete; | |
| void operator=(const self_type &) = delete; | |
| virtual ~Error() = default; | |
| Error(const cripts::string &message, cripts::string_view bundle, cripts::string_view option) | |
| : _message(message), _bundle(bundle), _option(option) | |
| { | |
| } | |
| [[nodiscard]] cripts::string_view | |
| Message() const | |
| { | |
| return {_message}; | |
| } | |
| [[nodiscard]] cripts::string_view | |
| Bundle() const | |
| { | |
| return {_bundle}; | |
| } | |
| [[nodiscard]] cripts::string_view | |
| Option() const | |
| { | |
| return {_option}; | |
| } | |
| private: | |
| std::string _message; | |
| cripts::string_view _bundle; | |
| cripts::string_view _option; | |
| }; | |
| class Base | |
| { | |
| using self_type = Base; | |
| public: | |
| Base() = default; | |
| Base(const self_type &) = delete; | |
| void operator=(const self_type &) = delete; | |
| virtual ~Base() = default; | |
| [[nodiscard]] virtual const cripts::string &Name() const = 0; | |
| void | |
| NeedCallback(cripts::Callbacks cb) | |
| { | |
| _callbacks |= cb; | |
| } | |
| void | |
| NeedCallback(unsigned cbs) | |
| { | |
| _callbacks |= cbs; | |
| } | |
| void | |
| NeedCallback(std::initializer_list<unsigned> cb_list) | |
| { | |
| for (auto &it : cb_list) { | |
| _callbacks |= it; | |
| } | |
| } | |
| [[nodiscard]] unsigned | |
| Callbacks() const | |
| { | |
| return _callbacks; | |
| } | |
| virtual bool | |
| Validate(std::vector<cripts::Bundle::Error> & /* errors ATS_UNUSED */) const | |
| { | |
| return true; | |
| } | |
| virtual void | |
| doRemap(cripts::Context * /* context ATS_UNUSED */) | |
| { | |
| } | |
| virtual void | |
| doPostRemap(cripts::Context * /* context ATS_UNUSED */) | |
| { | |
| } | |
| virtual void | |
| doSendResponse(cripts::Context * /* context ATS_UNUSED */) | |
| { | |
| } | |
| virtual void | |
| doCacheLookup(cripts::Context * /* context ATS_UNUSED */) | |
| { | |
| } | |
| virtual void | |
| doSendRequest(cripts::Context * /* context ATS_UNUSED */) | |
| { | |
| } | |
| virtual void | |
| doReadResponse(cripts::Context * /* context ATS_UNUSED */) | |
| { | |
| } | |
| virtual void | |
| doTxnClose(cripts::Context * /* context ATS_UNUSED */) | |
| { | |
| } | |
| protected: | |
| uint32_t _callbacks = 0; | |
| }; // Class Base | |
| } // namespace Bundle | |
| } // namespace cripts |