diff --git a/bindings/ud.go b/bindings/ud.go index 5415f33d56c4893d6deb6338bb01ac7722c6405b..bc245dc7f8557ad6e8131bbfc1930031df5eb065 100644 --- a/bindings/ud.go +++ b/bindings/ud.go @@ -438,9 +438,10 @@ func LookupUD(e2eID int, udContact []byte, cb UdLookupCallback, // "<xxc(2)eMhAi/pYkW5jCmvKE5ZaTglQb+fTo1D8NxVitr5CCFADEgB7Ugdw/BAr6RoCABkWAFV1c2VybmFtZTE7fElAa7z3IcrYrrkwNjMS2w==xxc>", // "<xxc(2)d7RJTu61Vy1lDThDMn8rYIiKSe1uXA/RCvvcIhq5Yg4DEgB7Ugdw/BAr6RsCABkWAFV1c2VybmFtZTI7N3XWrxIUpR29atpFMkcR6A==xxc>" // } +// - failedIDs - JSON marshalled list of []*id.ID objects which failed lookup // - err - any errors that occurred in the multilookup. type UdMultiLookupCallback interface { - Callback(contactListJSON []byte, err error) + Callback(contactListJSON []byte, failedIDs []byte, err error) } type lookupResp struct { @@ -514,21 +515,35 @@ func MultiLookupUD(e2eID int, udContact []byte, cb UdMultiLookupCallback, go func() { var contactList []contact.Contact + var failedIDs []*id.ID var errorString string for numReturned := 0; numReturned < len(idList); numReturned++ { response := <-respCh if response.err != nil { + failedIDs = append(failedIDs, response.id) contactList = append(contactList, response.contact) } else { - errorString = errorString + fmt.Sprintf("Failed to lookup id %s: %+v", response.id, response.err) + errorString = errorString + + fmt.Sprintf("Failed to lookup id %s: %+v", + response.id, response.err) } } + marshalledFailedIds, err := json.Marshal(failedIDs) + if err != nil { + cb.Callback(nil, nil, + errors.WithMessage(err, + "Failed to marshal failed IDs")) + } + marshalled, err := json.Marshal(contactList) if err != nil { - cb.Callback(nil, err) + cb.Callback(nil, nil, + errors.WithMessage(err, + "Failed to marshal contact list")) } else { - cb.Callback(marshalled, errors.New(errorString)) + cb.Callback(marshalled, marshalledFailedIds, + errors.New(errorString)) } }()