Merge branch 'master' into test

This commit is contained in:
Yhz 2020-04-07 16:37:07 +08:00
commit 70ad2a350e
8 changed files with 46 additions and 50 deletions

View File

@ -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:

View File

@ -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");

View File

@ -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) {

View File

@ -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;
}
/**

View File

@ -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;
}

View File

@ -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");

View File

@ -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};
}
/**

View File

@ -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();