in handlers/sf-contact-merge/src/main/scala/com/gu/sf_contact_merge/getsfcontacts/GetSfAddressOverride.scala [15:34]
def apply: GetSfAddressOverride = (
sfAddresses: SFContactsForMerge[ClientFailableOp[SFMaybeAddress]]
) => {
// get the address for the winning contact, if that is not set then iterate through the losing ones to find a good one
for {
addressInWinner <- sfAddresses.winner
winning <- addressInWinner match {
case UsableContactAddress(_) => ClientSuccess(DontOverrideAddress) // have a fine address already
case UnusableContactAddress =>
val maybeSuitableAddress = sfAddresses.others.collectFirst {
case fail: ClientFailure => fail // give up, error
case ClientSuccess(UsableContactAddress(address)) =>
ClientSuccess(OverrideAddressWith(address)) // found a decent address
}
maybeSuitableAddress.getOrElse(
ClientSuccess(DontOverrideAddress),
) // we're not going to lose any decent address
}
} yield winning
}