У меня есть приложение на C #, но некоторые его части имеют низкую производительность по ряду причин. Я хочу переписать эти части в Rust и взаимодействовать с моей новой нативной библиотекой, используя P / Invoke. Тем не менее, части моего кода, которые меня интересуют, это части, которые использовали INotifyPropertyChanged
или Observable<T>
.
Для справки, INotifyPropertyChanged
- это шаблон, в котором класс, реализующий этот интерфейс (признак), будет инициировать событие (свойство "y" объекта x изменилось) каждый раз, когда изменяется одно из свойств класса, независимо от того, что вызвало изменение (типичное исключение - свойства, которые влияют на значения друг друга, чтобы избежать переполнения стека).
Для моего конкретного случая использования я пытаюсь отслеживать древовидную структуру, которая существует в моем коде Rust из C #. Было бы идеально, если бы у этих уведомлений об изменениях был способ пузыриться до корня дерева (то есть, если x.y[0].z
изменяется, то y[0]
запускает событие, которое видно по x
, и x
запускает событие).
Есть ли рекомендуемый шаблон для определения, когда свойство объекта изменяется в Rust? Например, есть ли способ узнать, когда свойство структуры заимствовано, и вызвать обратный вызов?
Я видел Как я могу реализовать шаблон наблюдателя в Rust? , но принятый ответ не полностью отвечает тому, что мне интересно.