foo(&data);
makes no sense to me.
foo(*data);
works as expected. or, changing
fn foo<T: MyTrait>(arg: &T) {} // .... foo(&*data);