В API объект должен поддерживать оба независимых трейта. Разберите, допустим ли такой trait object и как выразить эту границу корректно:
trait Readable {
fn read(&self) -> String;
}
trait Writable {
fn write(&mut self, data: &str);
}
fn process(value: &mut (dyn Readable + Writable)) {
value.write("data");
println!("{}", value.read());
}