11#include " wsjcpp_jsonrpc20.h"
22#include < wsjcpp_core.h>
3+ #include < regex>
34
4- /* !
5- * WsjcppJsonRpc20Error -
6- * */
5+ // ---------------------------------------------------------------------
6+ // WsjcppJsonRpc20Error -
77
88WsjcppJsonRpc20Error::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+
961967std::string WsjcppJsonRpc20HandlerBase::getMethodName () const {
962968 return m_sMethodName;
963969}
@@ -1007,7 +1013,7 @@ void WsjcppJsonRpc20HandlerBase::setDeprecatedFromVersion(const std::string &sDe
10071013// ---------------------------------------------------------------------
10081014
10091015WsjcppJsonRpc20ParamDef &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
10191025WsjcppJsonRpc20ParamDef &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
10291035WsjcppJsonRpc20ParamDef &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
10391045WsjcppJsonRpc20ParamDef &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
10491055WsjcppJsonRpc20ParamDef &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
10591065WsjcppJsonRpc20ParamDef &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// ---------------------------------------------------------------------
0 commit comments