From what I can tell, accepting Box<dyn Trait> directly is pretty rare and looks quite weird. I think you'd go with the generic approach by default. The generic approach is also more flexible in terms of forward compatibility: if you were to change your representation from Box<dyn Trait> to something else, there's little chance you could convert a Box<dyn Trait> to that something else, whereas this option for silently changing the implementation is still open if you use generics.