Implement exchanges

When a return item has an exchange variant associated to it, when the customer return is processed, that return item is not refunded, but rather the exchange variant is grouped into a new shipment for the existing order with other exchanges for the customer return. 

No new line items are created and no money is refunded for the exchanged items. 

The new inventory units are associated to the original like item so as to allow refund calculation for future returns of this item. 

There are different eligibility rules that stores can implement to determine what variants can be exchanged for, the default being any variant for the same product. 
Ah yea just overriding like that should be fine too, but so I understand this correctly the .eligible_variants method uses option_type_restriction to make it so that only variants with the option value are eligible correct?  So if color is the restriction than only variants for the same color are eligible?  Like you can exchange that medium blue shirt for a small or large blue shirt, but you couldn't exchange the medium blue shirt for a medium red shirt?