Changeset 73978 in vbox
- Timestamp:
- Aug 30, 2018 1:19:36 PM (7 years ago)
- svn:sync-xref-src-repo-rev:
- 124714
- Location:
- trunk
- Files:
-
- 8 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/include/iprt/cpp/restbase.h
r73977 r73978 303 303 kCollectionFormat_tsv, /**< Tab-separated list. */ 304 304 kCollectionFormat_pipes, /**< Pipe-separated list. */ 305 kCollectionFormat_multi, /**< Special collection type that must be handled by caller of toString. */ 305 306 kCollectionFormat_Mask = 7, /**< Collection type mask. */ 306 307 … … 1370 1371 1371 1372 /** 1373 * Do path parameters. 1372 1374 * 1373 1375 * @returns IPRT status code … … 1380 1382 int doPathParameters(RTCString *a_pStrPath, const char *a_pszPathTemplate, size_t a_cchPathTemplate, 1381 1383 PATHREPLACEENTRY *a_paPathParams, size_t a_cPathParams) const; 1384 1385 /** Query parameter descriptor. */ 1386 typedef struct 1387 { 1388 const char *pszName; /**< The parameter name. */ 1389 uint32_t fFlags; /**< The toString flags. */ 1390 bool fRequired; /**< Required or not. */ 1391 } QUERYPARAMDESC; 1392 1393 /** 1394 * Do query parameters. 1395 * 1396 * @returns IPRT status code 1397 * @param a_pStrQuery The destination string. 1398 * @param a_paQueryParams The query parameter descriptors. 1399 * @param a_papQueryParamObjs The query parameter objects, parallel to @a a_paQueryParams. 1400 * @param a_cQueryParams Number of query parameters. 1401 */ 1402 int doQueryParameters(RTCString *a_pStrQuery, QUERYPARAMDESC const *a_paQueryParams, 1403 RTCRestObjectBase const **a_papQueryParamObjs, size_t a_cQueryParams) const; 1382 1404 }; 1383 1405 -
trunk/include/iprt/err.h
r73933 r73978 2877 2877 /** The JSON document is malformed. */ 2878 2878 #define VERR_JSON_MALFORMED (-24702) 2879 /** Object or array is empty. */ 2880 #define VERR_JSON_IS_EMPTY (-24703) 2879 2881 /** @} */ 2880 2882 -
trunk/include/iprt/json.h
r73956 r73978 277 277 * @param hJsonVal The JSON value handle. 278 278 * @param phJsonIt Where to store the JSON iterator handle on success. 279 * @todo Make return VERR_JSON_IS_EMPTY (or remove it). 279 280 */ 280 281 RTDECL(int) RTJsonIteratorBegin(RTJSONVAL hJsonVal, PRTJSONIT phJsonIt); … … 285 286 * @returns IPRT status code. 286 287 * @retval VERR_JSON_VALUE_INVALID_TYPE if the JSON value is not an array. 288 * @retval VERR_JSON_IS_EMPTY if no members. 287 289 * @param hJsonVal The JSON value handle. 288 290 * @param phJsonIt Where to store the JSON iterator handle on success. … … 295 297 * @returns IPRT status code. 296 298 * @retval VERR_JSON_VALUE_INVALID_TYPE if the JSON value is not an object. 299 * @retval VERR_JSON_IS_EMPTY if no members. 297 300 * @param hJsonVal The JSON value handle. 298 301 * @param phJsonIt Where to store the JSON iterator handle on success. -
trunk/src/VBox/Runtime/common/misc/json.cpp
r73956 r73978 1518 1518 RTJSON_TYPECHECK_RETURN(pThis, RTJSONVALTYPE_ARRAY); 1519 1519 1520 return rtJsonIteratorBeginWorker(pThis, phJsonIt); 1520 if (pThis->Type.Array.cItems > 0) 1521 return rtJsonIteratorBeginWorker(pThis, phJsonIt); 1522 return VERR_JSON_IS_EMPTY; 1521 1523 } 1522 1524 … … 1528 1530 RTJSON_TYPECHECK_RETURN(pThis, RTJSONVALTYPE_OBJECT); 1529 1531 1530 return rtJsonIteratorBeginWorker(pThis, phJsonIt); 1532 if (pThis->Type.Object.cMembers > 0) 1533 return rtJsonIteratorBeginWorker(pThis, phJsonIt); 1534 return VERR_JSON_IS_EMPTY; 1531 1535 } 1532 1536 -
trunk/src/VBox/Runtime/common/rest/RTCRestArrayBase.cpp
r73977 r73978 179 179 RTJsonIteratorFree(hIterator); 180 180 } 181 else if (rcRet == VERR_JSON_IS_EMPTY) 182 rcRet = VINF_SUCCESS; 181 183 else 182 184 rcRet = a_rCursor.m_pPrimary->addError(a_rCursor, rcRet, "RTJsonIteratorBeginArray failed: %Rrc", rcRet); -
trunk/src/VBox/Runtime/common/rest/RTCRestClientApiBase.cpp
r73977 r73978 117 117 if (strQuery.isNotEmpty()) 118 118 { 119 if (RT_SUCCESS(rc)) 120 rc = strFullUrl.appendNoThrow('?'); 121 if (RT_SUCCESS(rc)) 122 rc = strFullUrl.appendNoThrow(strQuery); 119 Assert(strQuery.startsWith("?")); 120 rc = strFullUrl.appendNoThrow(strQuery); 123 121 strQuery.setNull(); 124 122 } -
trunk/src/VBox/Runtime/common/rest/RTCRestClientRequestBase.cpp
r73977 r73978 112 112 } 113 113 114 115 int RTCRestClientRequestBase::doQueryParameters(RTCString *a_pStrQuery, QUERYPARAMDESC const *a_paQueryParams, 116 RTCRestObjectBase const **a_papQueryParamObjs, size_t a_cQueryParams) const 117 { 118 RTCString strTmpVal; 119 char chSep = a_pStrQuery->isEmpty() ? '?' : '&'; 120 for (size_t i = 0; i < a_cQueryParams; i++) 121 { 122 if ((a_paQueryParams[i].fFlags & RTCRestObjectBase::kCollectionFormat_Mask) != RTCRestObjectBase::kCollectionFormat_multi) 123 { 124 int rc = a_papQueryParamObjs[i]->toString(&strTmpVal, a_paQueryParams[i].fFlags); 125 AssertRCReturn(rc, rc); 126 127 rc = a_pStrQuery->appendPrintfNoThrow("%c%RMpq=%RMpq", chSep, a_paQueryParams[i].pszName, strTmpVal.c_str()); 128 AssertRCReturn(rc, rc); 129 130 chSep = '&'; 131 } 132 else 133 { 134 AssertFailedReturn(VERR_NOT_IMPLEMENTED); 135 } 136 } 137 return VINF_SUCCESS; 138 } 139 -
trunk/src/VBox/Runtime/common/rest/RTCRestStringMapBase.cpp
r73977 r73978 175 175 RTJsonIteratorFree(hIterator); 176 176 } 177 else if (rcRet == VERR_JSON_IS_EMPTY) 178 rcRet = VINF_SUCCESS; 177 179 else 178 180 rcRet = a_rCursor.m_pPrimary->addError(a_rCursor, rcRet, "RTJsonIteratorBegin failed: %Rrc", rcRet);
Note:
See TracChangeset
for help on using the changeset viewer.