Skip to content

Commit 34152af

Browse files
committed
Fixed TODO - check uniq param define and Added validate to param name by regexp [a-z]+[0-9a-z_]*
1 parent d14094c commit 34152af

File tree

2 files changed

+50
-12
lines changed

2 files changed

+50
-12
lines changed

src/wsjcpp_jsonrpc20.cpp

Lines changed: 45 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
#include "wsjcpp_jsonrpc20.h"
22
#include <wsjcpp_core.h>
3+
#include <regex>
34

4-
/*!
5-
* WsjcppJsonRpc20Error -
6-
* */
5+
// ---------------------------------------------------------------------
6+
// WsjcppJsonRpc20Error -
77

88
WsjcppJsonRpc20Error::WsjcppJsonRpc20Error(int nErrorCode, const std::string &sErrorMessage) {
99
m_nErrorCode = nErrorCode;
@@ -958,6 +958,12 @@ bool WsjcppJsonRpc20HandlerBase::checkAccess(WsjcppJsonRpc20Request *pRequest, W
958958

959959
// ---------------------------------------------------------------------
960960

961+
const std::vector<WsjcppJsonRpc20ParamDef> &WsjcppJsonRpc20HandlerBase::inputs() {
962+
return m_vInputs;
963+
}
964+
965+
// ---------------------------------------------------------------------
966+
961967
std::string WsjcppJsonRpc20HandlerBase::getMethodName() const {
962968
return m_sMethodName;
963969
}
@@ -1007,7 +1013,7 @@ void WsjcppJsonRpc20HandlerBase::setDeprecatedFromVersion(const std::string &sDe
10071013
// ---------------------------------------------------------------------
10081014

10091015
WsjcppJsonRpc20ParamDef &WsjcppJsonRpc20HandlerBase::requireStringParam(const std::string &sName, const std::string &sDescription) {
1010-
// TODO check duplicates
1016+
this->validateParamName(sName);
10111017
WsjcppJsonRpc20ParamDef pStringDef(sName, sDescription);
10121018
pStringDef.string_().required();
10131019
m_vInputs.push_back(pStringDef);
@@ -1017,7 +1023,7 @@ WsjcppJsonRpc20ParamDef &WsjcppJsonRpc20HandlerBase::requireStringParam(const st
10171023
// ---------------------------------------------------------------------
10181024

10191025
WsjcppJsonRpc20ParamDef &WsjcppJsonRpc20HandlerBase::optionalStringParam(const std::string &sName, const std::string &sDescription) {
1020-
// TODO check duplicates
1026+
this->validateParamName(sName);
10211027
WsjcppJsonRpc20ParamDef pStringDef(sName, sDescription);
10221028
pStringDef.string_().optional();
10231029
m_vInputs.push_back(pStringDef);
@@ -1027,7 +1033,7 @@ WsjcppJsonRpc20ParamDef &WsjcppJsonRpc20HandlerBase::optionalStringParam(const s
10271033
// ---------------------------------------------------------------------
10281034

10291035
WsjcppJsonRpc20ParamDef &WsjcppJsonRpc20HandlerBase::requireIntegerParam(const std::string &sName, const std::string &sDescription) {
1030-
// TODO check duplicates
1036+
this->validateParamName(sName);
10311037
WsjcppJsonRpc20ParamDef pIntegerDef(sName, sDescription);
10321038
pIntegerDef.integer_().required();
10331039
m_vInputs.push_back(pIntegerDef);
@@ -1037,7 +1043,7 @@ WsjcppJsonRpc20ParamDef &WsjcppJsonRpc20HandlerBase::requireIntegerParam(const s
10371043
// ---------------------------------------------------------------------
10381044

10391045
WsjcppJsonRpc20ParamDef &WsjcppJsonRpc20HandlerBase::optionalIntegerParam(const std::string &sName, const std::string &sDescription) {
1040-
// TODO check duplicates
1046+
this->validateParamName(sName);
10411047
WsjcppJsonRpc20ParamDef pIntegerDef(sName, sDescription);
10421048
pIntegerDef.integer_().optional();
10431049
m_vInputs.push_back(pIntegerDef);
@@ -1047,7 +1053,7 @@ WsjcppJsonRpc20ParamDef &WsjcppJsonRpc20HandlerBase::optionalIntegerParam(const
10471053
// ---------------------------------------------------------------------
10481054

10491055
WsjcppJsonRpc20ParamDef &WsjcppJsonRpc20HandlerBase::requireBooleanParam(const std::string &sName, const std::string &sDescription) {
1050-
// TODO check duplicates
1056+
this->validateParamName(sName);
10511057
WsjcppJsonRpc20ParamDef pBooleanDef(sName, sDescription);
10521058
pBooleanDef.bool_().required();
10531059
m_vInputs.push_back(pBooleanDef);
@@ -1057,7 +1063,7 @@ WsjcppJsonRpc20ParamDef &WsjcppJsonRpc20HandlerBase::requireBooleanParam(const s
10571063
// ---------------------------------------------------------------------
10581064

10591065
WsjcppJsonRpc20ParamDef &WsjcppJsonRpc20HandlerBase::optionalBooleanParam(const std::string &sName, const std::string &sDescription) {
1060-
// TODO check duplicates
1066+
this->validateParamName(sName);
10611067
WsjcppJsonRpc20ParamDef pBooleanDef(sName, sDescription);
10621068
pBooleanDef.bool_().optional();
10631069
m_vInputs.push_back(pBooleanDef);
@@ -1066,8 +1072,36 @@ WsjcppJsonRpc20ParamDef &WsjcppJsonRpc20HandlerBase::optionalBooleanParam(const
10661072

10671073
// ---------------------------------------------------------------------
10681074

1069-
const std::vector<WsjcppJsonRpc20ParamDef> &WsjcppJsonRpc20HandlerBase::inputs() {
1070-
return m_vInputs;
1075+
WsjcppJsonRpc20ParamDef &WsjcppJsonRpc20HandlerBase::requireJsonParam(const std::string &sName, const std::string &sDescription) {
1076+
this->validateParamName(sName);
1077+
WsjcppJsonRpc20ParamDef pJsonDef(sName, sDescription);
1078+
pJsonDef.json_().required();
1079+
m_vInputs.push_back(pJsonDef);
1080+
return m_vInputs[m_vInputs.size()-1];
1081+
}
1082+
1083+
// ---------------------------------------------------------------------
1084+
1085+
WsjcppJsonRpc20ParamDef &WsjcppJsonRpc20HandlerBase::optionalJsonParam(const std::string &sName, const std::string &sDescription) {
1086+
this->validateParamName(sName);
1087+
WsjcppJsonRpc20ParamDef pJsonDef(sName, sDescription);
1088+
pJsonDef.json_().optional();
1089+
m_vInputs.push_back(pJsonDef);
1090+
return m_vInputs[m_vInputs.size()-1];
1091+
}
1092+
1093+
// ---------------------------------------------------------------------
1094+
1095+
void WsjcppJsonRpc20HandlerBase::validateParamName(const std::string &sName) {
1096+
std::regex rxName("[a-z]+[0-9a-z_]*");
1097+
if (!std::regex_match(sName, rxName)) {
1098+
WsjcppLog::throw_err(TAG, "Parameter '" + sName + "' in method '" + m_sMethodName + "' has invalid format. Expected '[a-z]+[0-9a-z_]*'");
1099+
}
1100+
for (int i = 0; i < m_vInputs.size(); i++) {
1101+
if (m_vInputs[i].getName() == sName) {
1102+
WsjcppLog::throw_err(TAG, "Parameter '" + sName + "' in method '" + m_sMethodName + "' already exists");
1103+
}
1104+
}
10711105
}
10721106

10731107
// ---------------------------------------------------------------------

src/wsjcpp_jsonrpc20.h

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -298,13 +298,17 @@ class WsjcppJsonRpc20HandlerBase {
298298
WsjcppJsonRpc20ParamDef &optionalIntegerParam(const std::string &sName, const std::string &sDescription);
299299
WsjcppJsonRpc20ParamDef &requireBooleanParam(const std::string &sName, const std::string &sDescription);
300300
WsjcppJsonRpc20ParamDef &optionalBooleanParam(const std::string &sName, const std::string &sDescription);
301+
WsjcppJsonRpc20ParamDef &requireJsonParam(const std::string &sName, const std::string &sDescription);
302+
WsjcppJsonRpc20ParamDef &optionalJsonParam(const std::string &sName, const std::string &sDescription);
301303

302304
std::string TAG;
303305
std::string m_sMethodName;
304306
std::string m_sDescription;
305307

306308
private:
307-
std::vector<WsjcppJsonRpc20ParamDef> m_vInputs; // TODO redesign to map
309+
void validateParamName(const std::string &sName);
310+
311+
std::vector<WsjcppJsonRpc20ParamDef> m_vInputs; // TODO rename to m_vParams to std::map
308312
// std::map<std::string, WsjcppJsonRpc20ParamDef*> *m_vWsjcppJsonRpc20ParamDefs;
309313
std::string m_sActivatedFromVersion;
310314
std::string m_sDeprecatedFromVersion;

0 commit comments

Comments
 (0)