mirror of
https://github.com/oatpp/oatpp.git
synced 2025-01-30 16:59:30 +08:00
Merge branch 'master' into test
This commit is contained in:
commit
70ad2a350e
@ -65,7 +65,9 @@ public:
|
||||
public:
|
||||
|
||||
String() {}
|
||||
|
||||
|
||||
String(std::nullptr_t) {}
|
||||
|
||||
String(v_buff_size size)
|
||||
: type::ObjectWrapper<oatpp::base::StrBuffer, __class::String>(oatpp::base::StrBuffer::createShared(size))
|
||||
{}
|
||||
@ -113,11 +115,6 @@ public:
|
||||
return *this;
|
||||
}
|
||||
|
||||
static const String& empty(){
|
||||
static String empty;
|
||||
return empty;
|
||||
}
|
||||
|
||||
bool operator==(const String &other) const {
|
||||
return m_ptr->equals(other.get());
|
||||
}
|
||||
@ -167,6 +164,10 @@ public:
|
||||
ObjectWrapper()
|
||||
: type::ObjectWrapper<Primitive, Clazz>()
|
||||
{}
|
||||
|
||||
ObjectWrapper(std::nullptr_t)
|
||||
: type::ObjectWrapper<Primitive, Clazz>()
|
||||
{}
|
||||
|
||||
ObjectWrapper(const std::shared_ptr<Primitive>& ptr)
|
||||
: type::ObjectWrapper<Primitive, Clazz>(ptr)
|
||||
@ -214,11 +215,6 @@ public:
|
||||
return this->get()->getValue();
|
||||
}
|
||||
|
||||
static const ObjectWrapper& empty(){
|
||||
static ObjectWrapper result;
|
||||
return result;
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
private:
|
||||
|
@ -128,6 +128,10 @@ public:
|
||||
PolymorphicWrapper()
|
||||
: valueType(Class::getType())
|
||||
{}
|
||||
|
||||
PolymorphicWrapper(std::nullptr_t)
|
||||
: valueType(Class::getType())
|
||||
{}
|
||||
|
||||
PolymorphicWrapper(const Type* const type)
|
||||
: valueType(type)
|
||||
@ -143,10 +147,6 @@ public:
|
||||
, valueType(other.valueType)
|
||||
{}
|
||||
|
||||
static PolymorphicWrapper empty(){
|
||||
return PolymorphicWrapper();
|
||||
}
|
||||
|
||||
PolymorphicWrapper& operator=(const PolymorphicWrapper<T>& other){
|
||||
m_ptr = other.m_ptr;
|
||||
return *this;
|
||||
@ -233,9 +233,9 @@ public:
|
||||
: PolymorphicWrapper<T>(Class::getType())
|
||||
{}
|
||||
|
||||
ObjectWrapper(std::nullptr_t nullptrt)
|
||||
: PolymorphicWrapper<T>(nullptr, Class::getType())
|
||||
{(void)nullptrt;}
|
||||
ObjectWrapper(std::nullptr_t)
|
||||
: PolymorphicWrapper<T>(Class::getType())
|
||||
{}
|
||||
|
||||
ObjectWrapper(const std::shared_ptr<T>& ptr)
|
||||
: PolymorphicWrapper<T>(ptr, Class::getType())
|
||||
@ -249,10 +249,6 @@ public:
|
||||
: PolymorphicWrapper<T>(std::move(other.getPtr()), Class::getType())
|
||||
{}
|
||||
|
||||
static ObjectWrapper empty(){
|
||||
return ObjectWrapper();
|
||||
}
|
||||
|
||||
ObjectWrapper& operator=(const PolymorphicWrapper<T>& other){
|
||||
if(this->valueType != other.valueType){
|
||||
OATPP_LOGE("ObjectWrapper", "Invalid class cast");
|
||||
|
@ -98,7 +98,7 @@ namespace oatpp { namespace utils { namespace conversion {
|
||||
if(size > 0){
|
||||
return oatpp::String((const char*)&buff[0], size, true);
|
||||
}
|
||||
return oatpp::String::empty();
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
oatpp::String uint32ToStr(v_uint32 value){
|
||||
@ -107,7 +107,7 @@ namespace oatpp { namespace utils { namespace conversion {
|
||||
if(size > 0){
|
||||
return oatpp::String((const char*)&buff[0], size, true);
|
||||
}
|
||||
return oatpp::String::empty();
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
oatpp::String int64ToStr(v_int64 value){
|
||||
@ -116,7 +116,7 @@ namespace oatpp { namespace utils { namespace conversion {
|
||||
if(size > 0){
|
||||
return oatpp::String((const char*)&buff[0], size, true);
|
||||
}
|
||||
return oatpp::String::empty();
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
oatpp::String uint64ToStr(v_uint64 value){
|
||||
@ -125,7 +125,7 @@ namespace oatpp { namespace utils { namespace conversion {
|
||||
if(size > 0){
|
||||
return oatpp::String((const char*)&buff[0], size, true);
|
||||
}
|
||||
return oatpp::String::empty();
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
std::string int32ToStdStr(v_int32 value){
|
||||
@ -202,7 +202,7 @@ v_buff_size float64ToCharSequence(v_float64 value, p_char8 data, v_buff_size n)
|
||||
if(size > 0){
|
||||
return oatpp::String((const char*)&buff[0], size, true);
|
||||
}
|
||||
return oatpp::String::empty();
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
oatpp::String float64ToStr(v_float64 value){
|
||||
@ -211,7 +211,7 @@ v_buff_size float64ToCharSequence(v_float64 value, p_char8 data, v_buff_size n)
|
||||
if(size > 0){
|
||||
return oatpp::String((const char*)&buff[0], size, true);
|
||||
}
|
||||
return oatpp::String::empty();
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
oatpp::String boolToStr(bool value) {
|
||||
|
@ -216,7 +216,7 @@ namespace oatpp { namespace utils { namespace conversion {
|
||||
if(size > 0){
|
||||
return oatpp::String((const char*)&buff[0], size, true);
|
||||
}
|
||||
return oatpp::String::empty();
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -242,7 +242,7 @@ data::mapping::type::AbstractObjectWrapper Deserializer::deserializeList(Deseria
|
||||
caret.skipBlankChars();
|
||||
auto item = deserializer->deserialize(caret, itemType);
|
||||
if(caret.hasError()){
|
||||
return AbstractObjectWrapper::empty();
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
list->addPolymorphicItem(item);
|
||||
@ -256,13 +256,13 @@ data::mapping::type::AbstractObjectWrapper Deserializer::deserializeList(Deseria
|
||||
if(!caret.hasError()){
|
||||
caret.setError("[oatpp::parser::json::mapping::Deserializer::readList()]: Error. ']' - expected", ERROR_CODE_ARRAY_SCOPE_CLOSE);
|
||||
}
|
||||
return AbstractObjectWrapper::empty();
|
||||
return nullptr;
|
||||
};
|
||||
|
||||
return AbstractObjectWrapper(list.getPtr(), list.valueType);
|
||||
} else {
|
||||
caret.setError("[oatpp::parser::json::mapping::Deserializer::readList()]: Error. '[' - expected", ERROR_CODE_ARRAY_SCOPE_OPEN);
|
||||
return AbstractObjectWrapper::empty();
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
}
|
||||
@ -296,13 +296,13 @@ data::mapping::type::AbstractObjectWrapper Deserializer::deserializeFieldsMap(De
|
||||
caret.skipBlankChars();
|
||||
auto key = Utils::parseString(caret);
|
||||
if(caret.hasError()){
|
||||
return AbstractObjectWrapper::empty();
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
caret.skipBlankChars();
|
||||
if(!caret.canContinueAtChar(':', 1)){
|
||||
caret.setError("[oatpp::parser::json::mapping::Deserializer::readListMap()]: Error. ':' - expected", ERROR_CODE_OBJECT_SCOPE_COLON_MISSING);
|
||||
return AbstractObjectWrapper::empty();
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
caret.skipBlankChars();
|
||||
@ -318,7 +318,7 @@ data::mapping::type::AbstractObjectWrapper Deserializer::deserializeFieldsMap(De
|
||||
if(!caret.hasError()){
|
||||
caret.setError("[oatpp::parser::json::mapping::Deserializer::readListMap()]: Error. '}' - expected", ERROR_CODE_OBJECT_SCOPE_CLOSE);
|
||||
}
|
||||
return AbstractObjectWrapper::empty();
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
return AbstractObjectWrapper(map.getPtr(), map.valueType);
|
||||
@ -327,7 +327,7 @@ data::mapping::type::AbstractObjectWrapper Deserializer::deserializeFieldsMap(De
|
||||
caret.setError("[oatpp::parser::json::mapping::Deserializer::readListMap()]: Error. '{' - expected", ERROR_CODE_OBJECT_SCOPE_OPEN);
|
||||
}
|
||||
|
||||
return AbstractObjectWrapper::empty();
|
||||
return nullptr;
|
||||
|
||||
}
|
||||
|
||||
@ -352,7 +352,7 @@ data::mapping::type::AbstractObjectWrapper Deserializer::deserializeObject(Deser
|
||||
caret.skipBlankChars();
|
||||
auto key = Utils::parseStringToStdString(caret);
|
||||
if(caret.hasError()){
|
||||
return AbstractObjectWrapper::empty();
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
auto fieldIterator = fieldsMap.find(key);
|
||||
@ -361,7 +361,7 @@ data::mapping::type::AbstractObjectWrapper Deserializer::deserializeObject(Deser
|
||||
caret.skipBlankChars();
|
||||
if(!caret.canContinueAtChar(':', 1)){
|
||||
caret.setError("[oatpp::parser::json::mapping::Deserializer::readObject()]: Error. ':' - expected", ERROR_CODE_OBJECT_SCOPE_COLON_MISSING);
|
||||
return AbstractObjectWrapper::empty();
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
caret.skipBlankChars();
|
||||
@ -373,13 +373,13 @@ data::mapping::type::AbstractObjectWrapper Deserializer::deserializeObject(Deser
|
||||
caret.skipBlankChars();
|
||||
if(!caret.canContinueAtChar(':', 1)){
|
||||
caret.setError("[oatpp::parser::json::mapping::Deserializer::readObject()/if(config->allowUnknownFields){}]: Error. ':' - expected", ERROR_CODE_OBJECT_SCOPE_COLON_MISSING);
|
||||
return AbstractObjectWrapper::empty();
|
||||
return nullptr;
|
||||
}
|
||||
caret.skipBlankChars();
|
||||
skipValue(caret);
|
||||
} else {
|
||||
caret.setError("[oatpp::parser::json::mapping::Deserializer::readObject()]: Error. Unknown field", ERROR_CODE_OBJECT_SCOPE_UNKNOWN_FIELD);
|
||||
return AbstractObjectWrapper::empty();
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
caret.skipBlankChars();
|
||||
@ -391,7 +391,7 @@ data::mapping::type::AbstractObjectWrapper Deserializer::deserializeObject(Deser
|
||||
if(!caret.hasError()){
|
||||
caret.setError("[oatpp::parser::json::mapping::Deserializer::readObject()]: Error. '}' - expected", ERROR_CODE_OBJECT_SCOPE_CLOSE);
|
||||
}
|
||||
return AbstractObjectWrapper::empty();
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
return object;
|
||||
@ -400,7 +400,7 @@ data::mapping::type::AbstractObjectWrapper Deserializer::deserializeObject(Deser
|
||||
caret.setError("[oatpp::parser::json::mapping::Deserializer::readObject()]: Error. '{' - expected", ERROR_CODE_OBJECT_SCOPE_OPEN);
|
||||
}
|
||||
|
||||
return AbstractObjectWrapper::empty();
|
||||
return nullptr;
|
||||
|
||||
}
|
||||
|
||||
|
@ -81,7 +81,7 @@ void ApiClient::formatPath(oatpp::data::stream::ConsistentOutputStream* stream,
|
||||
stream->writeSimple(seg.text.data(), seg.text.size());
|
||||
} else {
|
||||
auto key = oatpp::String(seg.text.data(), seg.text.length(), false);
|
||||
auto& param = params->get(key, oatpp::String::empty());
|
||||
auto& param = params->get(key, nullptr);
|
||||
if(!param){
|
||||
OATPP_LOGD(TAG, "Path parameter '%s' not provided in the api call", seg.text.c_str());
|
||||
throw std::runtime_error("[oatpp::web::client::ApiClient]: Path parameter missing");
|
||||
|
@ -109,11 +109,12 @@ public:
|
||||
};
|
||||
|
||||
/**
|
||||
* Info about content type and schema
|
||||
* Hints about the response (content-type, schema, description, ...)
|
||||
*/
|
||||
struct ContentTypeAndSchema {
|
||||
struct ResponseHints {
|
||||
oatpp::String contentType;
|
||||
oatpp::data::mapping::type::Type* schema;
|
||||
oatpp::String description;
|
||||
};
|
||||
|
||||
public:
|
||||
@ -182,7 +183,7 @@ public:
|
||||
/**
|
||||
* Consumes.
|
||||
*/
|
||||
std::list<ContentTypeAndSchema> consumes;
|
||||
std::list<ResponseHints> consumes;
|
||||
|
||||
/**
|
||||
* Security Requirements
|
||||
@ -208,7 +209,7 @@ public:
|
||||
* ResponseCode to {ContentType, Type} mapping.
|
||||
* Example responses[Status::CODE_200] = {"application/json", MyDto::ObjectWrapper::Class::getType()};
|
||||
*/
|
||||
std::unordered_map<oatpp::web::protocol::http::Status, ContentTypeAndSchema> responses;
|
||||
std::unordered_map<oatpp::web::protocol::http::Status, ResponseHints> responses;
|
||||
|
||||
oatpp::String toString();
|
||||
|
||||
@ -227,10 +228,11 @@ public:
|
||||
* @tparam T
|
||||
* @param status
|
||||
* @param contentType
|
||||
* @param responseDescription
|
||||
*/
|
||||
template<class T>
|
||||
void addResponse(const oatpp::web::protocol::http::Status& status, const oatpp::String& contentType) {
|
||||
responses[status] = {contentType, T::Class::getType()};
|
||||
void addResponse(const oatpp::web::protocol::http::Status& status, const oatpp::String& contentType, const oatpp::String& responseDescription = oatpp::String()) {
|
||||
responses[status] = {contentType, T::Class::getType(), responseDescription.get() == nullptr ? status.description : responseDescription};
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -47,7 +47,7 @@ public:
|
||||
|
||||
ENDPOINT_INFO(root) {
|
||||
info->summary = "root_summary";
|
||||
info->addResponse<String>(Status::CODE_200, "text/plain");
|
||||
info->addResponse<String>(Status::CODE_200, "text/plain", "test1-success");
|
||||
info->addResponse<String>(Status::CODE_404, "text/plain");
|
||||
}
|
||||
ENDPOINT("GET", "/", root) {
|
||||
@ -98,9 +98,11 @@ void ApiControllerTest::onRun() {
|
||||
auto r200 = endpoint->info()->responses[Status::CODE_200];
|
||||
OATPP_ASSERT(r200.contentType == "text/plain");
|
||||
OATPP_ASSERT(r200.schema == oatpp::String::Class::getType());
|
||||
OATPP_ASSERT(r200.description == "test1-success");
|
||||
|
||||
auto r404 = endpoint->info()->responses[Status::CODE_404];
|
||||
OATPP_ASSERT(r404.contentType == "text/plain");
|
||||
OATPP_ASSERT(r404.description == "Not Found");
|
||||
OATPP_ASSERT(r404.schema == oatpp::String::Class::getType());
|
||||
|
||||
auto response = controller.root();
|
||||
|
Loading…
Reference in New Issue
Block a user