9    org::xrpl::rpc::v1::GetLedgerDiffRequest& request = context.
params;
 
   10    org::xrpl::rpc::v1::GetLedgerDiffResponse response;
 
   11    grpc::Status status = grpc::Status::OK;
 
   18        grpc::Status errorStatus{
 
   19            grpc::StatusCode::NOT_FOUND, 
"base ledger not found"};
 
   20        return {response, errorStatus};
 
   24            desiredLedgerRv, request.desired_ledger(), context))
 
   26        grpc::Status errorStatus{
 
   27            grpc::StatusCode::NOT_FOUND, 
"desired ledger not found"};
 
   28        return {response, errorStatus};
 
   35        grpc::Status errorStatus{
 
   36            grpc::StatusCode::NOT_FOUND, 
"base ledger not validated"};
 
   37        return {response, errorStatus};
 
   44        grpc::Status errorStatus{
 
   45            grpc::StatusCode::NOT_FOUND, 
"base ledger not validated"};
 
   46        return {response, errorStatus};
 
   53    bool res = baseLedger->stateMap().compare(
 
   54        desiredLedger->stateMap(), differences, maxDifferences);
 
   57        grpc::Status errorStatus{
 
   58            grpc::StatusCode::RESOURCE_EXHAUSTED,
 
   59            "too many differences between specified ledgers"};
 
   60        return {response, errorStatus};
 
   63    for (
auto& [k, v] : differences)
 
   65        auto diff = response.mutable_ledger_objects()->add_objects();
 
   66        auto inBase = v.first;
 
   67        auto inDesired = v.second;
 
   72            diff->set_key(k.data(), k.size());
 
   77                inDesired->size() > 0,
 
   78                "ripple::doLedgerDiffGrpc : non-empty desired");
 
   79            diff->set_key(k.data(), k.size());
 
   80            if (request.include_blobs())
 
   82                diff->set_data(inDesired->data(), inDesired->size());
 
   86    return {response, status};