Qual é o Rust equivalente às funções virtuais do C ++?

Eu estou tentando implementar algo no Rust que funciona como uma função virtual C ++ em uma classe, eu teria uma estrutura de base com dados e manteria algumas funções indefinidas, como no exemplo a seguir:

class A {
    int stuff;
public:
    virtual void foo(int a, int b) = 0;
    void function_that_calls_foo() { /*...*/ foo(1, 2); /*...*/ }
}

class B: public A { void foo(int a, int b) { /* ... */ } }

Eu estava tentando implementá-lo usando ponteiros de função, mas sem muito sucesso. Eu poderia usar uma característica com as funções de A e implementar A na outra classe, mas perderia os dados da estrutura. Qual é a melhor (mais rápida?) Maneira de implementar esse tipo de coisa no Rust?

struct A {
    ...
}

impl A {
    fn function_that_calls_foo(&self) {
        ...
        self.foo(a, b);
        ...
    }
}

struct B {
    a: A;
}

impl B {
    fn xxx(&self) {
        a.function_that_calls_foo(1, 2);
    }

    fn foo(&self, a: i32, b: i32) {...}
}

questionAnswers(1)

yourAnswerToTheQuestion