diff options
| -rw-r--r-- | zenutil/cache/cacherequests.cpp | 80 | ||||
| -rw-r--r-- | zenutil/include/zenutil/cache/cacherequests.h | 6 |
2 files changed, 67 insertions, 19 deletions
diff --git a/zenutil/cache/cacherequests.cpp b/zenutil/cache/cacherequests.cpp index fe3b63dc1..3f8a89b6f 100644 --- a/zenutil/cache/cacherequests.cpp +++ b/zenutil/cache/cacherequests.cpp @@ -363,7 +363,7 @@ namespace cacherequests { bool GetCacheRecordsRequest::Parse(const CbPackage& RpcRequest) { return Parse(RpcRequest.GetObject()); } - bool GetCacheRecordsRequest::Format(CbObjectWriter& Writer) const + bool GetCacheRecordsRequest::Format(CbObjectWriter& Writer, const std::span<const size_t> OptionalRecordFilter) const { Writer << "Method" << "GetCacheRecords"; @@ -372,14 +372,30 @@ namespace cacherequests { Writer << "DefaultPolicy" << WriteToString<128>(DefaultPolicy); Writer << "Namespace" << Namespace; Writer.BeginArray("Requests"); - for (const GetCacheRecordRequest& RecordRequest : Requests) + if (OptionalRecordFilter.empty()) { - Writer.BeginObject(); + for (const GetCacheRecordRequest& RecordRequest : Requests) { - WriteCacheRequestKey(Writer, RecordRequest.Key); - WriteOptionalCacheRequestPolicy(Writer, "Policy", RecordRequest.Policy); + Writer.BeginObject(); + { + WriteCacheRequestKey(Writer, RecordRequest.Key); + WriteOptionalCacheRequestPolicy(Writer, "Policy", RecordRequest.Policy); + } + Writer.EndObject(); + } + } + else + { + for (size_t Index : OptionalRecordFilter) + { + const GetCacheRecordRequest& RecordRequest = Requests[Index]; + Writer.BeginObject(); + { + WriteCacheRequestKey(Writer, RecordRequest.Key); + WriteOptionalCacheRequestPolicy(Writer, "Policy", RecordRequest.Policy); + } + Writer.EndObject(); } - Writer.EndObject(); } Writer.EndArray(); } @@ -388,10 +404,10 @@ namespace cacherequests { return true; } - bool GetCacheRecordsRequest::Format(CbPackage& OutPackage) const + bool GetCacheRecordsRequest::Format(CbPackage& OutPackage, const std::span<const size_t> OptionalRecordFilter) const { CbObjectWriter Writer; - if (!Format(Writer)) + if (!Format(Writer, OptionalRecordFilter)) { return false; } @@ -646,7 +662,7 @@ namespace cacherequests { return true; } - bool GetCacheValuesRequest::Format(CbPackage& OutPackage) const + bool GetCacheValuesRequest::Format(CbPackage& OutPackage, const std::span<const size_t> OptionalValueFilter) const { CbObjectWriter Writer; Writer << "Method" @@ -658,14 +674,30 @@ namespace cacherequests { Writer << "Namespace" << Namespace; Writer.BeginArray("Requests"); - for (const GetCacheValueRequest& ValueRequest : Requests) + if (OptionalValueFilter.empty()) { - Writer.BeginObject(); + for (const GetCacheValueRequest& ValueRequest : Requests) { - WriteCacheRequestKey(Writer, ValueRequest.Key); - WriteCachePolicy(Writer, "Policy", ValueRequest.Policy); + Writer.BeginObject(); + { + WriteCacheRequestKey(Writer, ValueRequest.Key); + WriteCachePolicy(Writer, "Policy", ValueRequest.Policy); + } + Writer.EndObject(); + } + } + else + { + for (size_t Index : OptionalValueFilter) + { + const GetCacheValueRequest& ValueRequest = Requests[Index]; + Writer.BeginObject(); + { + WriteCacheRequestKey(Writer, ValueRequest.Key); + WriteCachePolicy(Writer, "Policy", ValueRequest.Policy); + } + Writer.EndObject(); } - Writer.EndObject(); } Writer.EndArray(); } @@ -757,7 +789,7 @@ namespace cacherequests { Namespace = *RequestNamespace; DefaultPolicy = GetCachePolicy(Params, "DefaultPolicy").value_or(CachePolicy::Default); - CbArrayView RequestsArray = Params["Requests"].AsArrayView(); + CbArrayView RequestsArray = Params["ChunkRequests"].AsArrayView(); Requests.reserve(RequestsArray.Num()); for (CbFieldView RequestField : RequestsArray) { @@ -792,7 +824,7 @@ namespace cacherequests { Writer << "DefaultPolicy" << WriteToString<128>(DefaultPolicy); Writer << "Namespace" << Namespace; - Writer.BeginArray("Requests"); + Writer.BeginArray("ChunkRequests"); for (const GetCacheChunkRequest& ValueRequest : Requests) { Writer.BeginObject(); @@ -1186,6 +1218,14 @@ namespace cacherequests { CHECK(FullRequestCopy.Parse(FullRequestPackage)); CHECK(FullRequest == FullRequestCopy); + CbPackage PartialRequestPackage; + CHECK(FullRequest.Format(PartialRequestPackage, std::initializer_list<size_t>{0, 2})); + GetCacheRecordsRequest PartialRequest = FullRequest; + PartialRequest.Requests.erase(PartialRequest.Requests.begin() + 1); + GetCacheRecordsRequest PartialRequestCopy; + CHECK(PartialRequestCopy.Parse(PartialRequestPackage)); + CHECK(PartialRequest == PartialRequestCopy); + GetCacheRecordsResult EmptyResult; CbPackage EmptyResponsePackage; CHECK(EmptyResult.Format(EmptyResponsePackage)); @@ -1321,6 +1361,14 @@ namespace cacherequests { CHECK(FullRequestCopy.Parse(FullRequestPackage.GetObject())); CHECK(FullRequest == FullRequestCopy); + CbPackage PartialRequestPackage; + CHECK(FullRequest.Format(PartialRequestPackage, std::initializer_list<size_t>{0, 2})); + GetCacheValuesRequest PartialRequest = FullRequest; + PartialRequest.Requests.erase(PartialRequest.Requests.begin() + 1); + GetCacheValuesRequest PartialRequestCopy; + CHECK(PartialRequestCopy.Parse(PartialRequestPackage.GetObject())); + CHECK(PartialRequest == PartialRequestCopy); + CacheValuesResult EmptyResult; CbPackage EmptyResponsePackage; CHECK(EmptyResult.Format(EmptyResponsePackage)); diff --git a/zenutil/include/zenutil/cache/cacherequests.h b/zenutil/include/zenutil/cache/cacherequests.h index aeaa5beee..357063bcf 100644 --- a/zenutil/include/zenutil/cache/cacherequests.h +++ b/zenutil/include/zenutil/cache/cacherequests.h @@ -108,8 +108,8 @@ namespace cacherequests { bool Parse(const CbPackage& RpcRequest); bool Parse(const CbObjectView& RpcRequest); - bool Format(CbPackage& OutPackage) const; - bool Format(CbObjectWriter& Writer) const; + bool Format(CbPackage& OutPackage, const std::span<const size_t> OptionalRecordFilter = {}) const; + bool Format(CbObjectWriter& Writer, const std::span<const size_t> OptionalRecordFilter = {}) const; }; struct GetCacheRecordResultValue @@ -180,7 +180,7 @@ namespace cacherequests { std::vector<GetCacheValueRequest> Requests; bool Parse(const CbObjectView& BatchObject); - bool Format(CbPackage& OutPackage) const; + bool Format(CbPackage& OutPackage, const std::span<const size_t> OptionalValueFilter = {}) const; }; struct CacheValueResult |