This implementation will wrap an ApiWritingRepository and diff the old and new data to remove any parts that didn’t change and therefore don’t need to be sent.
In practice, we expect this diffing to be most relevant at the statement group level (as in, we can completely remove statement groups other than the one property ID that the bridge is editing). Diffing within individual statement groups should only make a difference for the “update” edit decision, and then only if the previous statement had “normal” rank; in general, if the statement group contained statements that didn’t change and statements that did, then it would have been ambiguous and we would have bailed out instead. Diffing within individual statements may be useful to skip sending qualifiers and references, but that might not be necessary.
Note that this implementation cannot wrap any WritingEntityRepository – other implementations might interpret the removal of parts of the data as a request to actually remove it server-side. That is, we consider the fact that wbeditentity allows you to omit part of the data to be an implementation detail of that API, not an intrinsic property of any service that allows you to edit entity data.