Changeset 74347 in vbox for trunk/src/VBox/Runtime/common/rest
- Timestamp:
- Sep 18, 2018 4:10:34 PM (6 years ago)
- Location:
- trunk/src/VBox/Runtime/common/rest
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Runtime/common/rest/RTCRestAnyObject.cpp
r74149 r74347 112 112 case kTypeClass_Binary: 113 113 case kTypeClass_StringEnum: 114 case kTypeClass_Object: 114 case kTypeClass_AnyObject: 115 case kTypeClass_DataObject: 115 116 case kTypeClass_Invalid: 116 117 AssertFailedReturn(VERR_REST_INTERNAL_ERROR_7); … … 522 523 RTCRestObjectBase::kTypeClass RTCRestAnyObject::typeClass(void) const 523 524 { 524 return kTypeClass_ Object;525 return kTypeClass_AnyObject; 525 526 } 526 527 … … 547 548 case kTypeClass_Binary: 548 549 case kTypeClass_StringEnum: 549 case kTypeClass_Object: 550 case kTypeClass_DataObject: 551 case kTypeClass_AnyObject: 550 552 case kTypeClass_Invalid: 551 553 AssertFailed(); -
trunk/src/VBox/Runtime/common/rest/rest-primary-object-types.cpp
r74181 r74347 118 118 } 119 119 120 121 RTCRestObjectBase::kTypeClass RTCRestObjectBase::typeClass() const122 {123 return kTypeClass_Object;124 }125 120 126 121 … … 2014 2009 } 2015 2010 2011 2012 2013 /********************************************************************************************************************************* 2014 * RTCRestDataObject * 2015 *********************************************************************************************************************************/ 2016 2017 RTCRestDataObject::RTCRestDataObject() 2018 : RTCRestObjectBase() 2019 , m_fIsSet(0) 2020 { 2021 } 2022 2023 2024 RTCRestDataObject::~RTCRestDataObject() 2025 { 2026 } 2027 2028 2029 RTCRestDataObject::RTCRestDataObject(RTCRestDataObject const &a_rThat) 2030 : RTCRestObjectBase(a_rThat) 2031 , m_fIsSet(a_rThat.m_fIsSet) 2032 { 2033 } 2034 2035 2036 RTCRestDataObject &RTCRestDataObject::operator=(RTCRestDataObject const &a_rThat) 2037 { 2038 m_fNullIndicator = a_rThat.m_fNullIndicator; 2039 m_fIsSet = a_rThat.m_fIsSet; 2040 return *this; 2041 } 2042 2043 2044 int RTCRestDataObject::assignCopy(RTCRestDataObject const &a_rThat) 2045 { 2046 m_fNullIndicator = a_rThat.m_fNullIndicator; 2047 m_fIsSet = a_rThat.m_fIsSet; 2048 return VINF_SUCCESS; 2049 } 2050 2051 2052 int RTCRestDataObject::resetToDefault() 2053 { 2054 m_fNullIndicator = false; 2055 m_fIsSet = 0; 2056 return VINF_SUCCESS; 2057 } 2058 2059 2060 const char *RTCRestDataObject::serializeMembersAsJson(RTCRestOutputBase &a_rDst, const char *a_pszSep) const 2061 { 2062 RT_NOREF(a_rDst); 2063 return a_pszSep; 2064 } 2065 2066 2067 RTCRestOutputBase &RTCRestDataObject::serializeAsJson(RTCRestOutputBase &a_rDst) const 2068 { 2069 if (!m_fNullIndicator) 2070 { 2071 a_rDst.printf("{"); 2072 unsigned const uOldIndent = a_rDst.incrementIndent(); 2073 2074 const char *pszSep = serializeMembersAsJson(a_rDst, ""); 2075 2076 a_rDst.setIndent(uOldIndent); 2077 a_rDst.printf("%s}", *pszSep != '\0' ? "\n" : ""); 2078 } 2079 else 2080 a_rDst.printf("null"); 2081 return a_rDst; 2082 } 2083 2084 2085 int RTCRestDataObject::deserializeMemberFromJson(RTCRestJsonCursor const &a_rCursor, size_t a_cchName) 2086 { 2087 RT_NOREF(a_rCursor, a_cchName); 2088 return VERR_NOT_FOUND; 2089 } 2090 2091 2092 int RTCRestDataObject::deserializeFromJson(RTCRestJsonCursor const &a_rCursor) 2093 { 2094 /* 2095 * Make sure the object starts out with default values. 2096 */ 2097 if (m_fIsSet == 0) 2098 m_fNullIndicator = false; 2099 else 2100 resetToDefault(); 2101 2102 /* 2103 * Iterate the object values. 2104 */ 2105 RTJSONIT hIterator; 2106 int rcRet = RTJsonIteratorBeginObject(a_rCursor.m_hValue, &hIterator); 2107 if (RT_SUCCESS(rcRet)) 2108 { 2109 for (;;) 2110 { 2111 RTCRestJsonCursor SubCursor(a_rCursor); 2112 int rc = RTJsonIteratorQueryValue(hIterator, &SubCursor.m_hValue, &SubCursor.m_pszName); 2113 if (RT_SUCCESS(rc)) 2114 { 2115 size_t const cchName = strlen(SubCursor.m_pszName); 2116 2117 rc = deserializeMemberFromJson(SubCursor, cchName); 2118 if (rc == VINF_SUCCESS) 2119 { /* likely */ } 2120 else if (rc == VERR_NOT_FOUND) 2121 { 2122 rc = SubCursor.m_pPrimary->unknownField(SubCursor); 2123 if (rcRet == VINF_SUCCESS) 2124 rcRet = rc; 2125 } 2126 else if (RT_SUCCESS(rc)) 2127 { 2128 if (rcRet == VINF_SUCCESS) 2129 rcRet = rc; 2130 } 2131 else if (RT_SUCCESS(rcRet)) 2132 rcRet = rc; 2133 } 2134 else 2135 rcRet = a_rCursor.m_pPrimary->addError(a_rCursor, rc, "RTJsonIteratorQueryValue failed: %Rrc", rc); 2136 2137 /* 2138 * Advance. 2139 */ 2140 rc = RTJsonIteratorNext(hIterator); 2141 if (RT_SUCCESS(rc)) 2142 { /* likely */ } 2143 else if (rc == VERR_JSON_ITERATOR_END) 2144 break; 2145 else 2146 { 2147 rcRet = a_rCursor.m_pPrimary->addError(a_rCursor, rc, "RTJsonIteratorNext failed: %Rrc", rc); 2148 break; 2149 } 2150 } 2151 2152 RTJsonIteratorFree(hIterator); 2153 } 2154 else if ( rcRet == VERR_JSON_VALUE_INVALID_TYPE 2155 && RTJsonValueGetType(a_rCursor.m_hValue) == RTJSONVALTYPE_NULL) 2156 { 2157 m_fNullIndicator = true; 2158 rcRet = VINF_SUCCESS; 2159 } 2160 else 2161 rcRet = a_rCursor.m_pPrimary->addError(a_rCursor, rcRet, "RTJsonIteratorBeginObject failed: %Rrc (type %s)", 2162 rcRet, RTJsonValueTypeName(RTJsonValueGetType(a_rCursor.m_hValue))); 2163 return rcRet; 2164 } 2165 2166 2167 RTCRestObjectBase::kTypeClass RTCRestDataObject::typeClass(void) const 2168 { 2169 return kTypeClass_DataObject; 2170 } 2171
Note:
See TracChangeset
for help on using the changeset viewer.