Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- use std::borrow::Cow;
- pub struct Controller<'a, I: Internals> {
- state: ControllerState<'a>,
- internals: I,
- }
- impl<'a, I: Internals> Controller<'a, I> {
- pub fn internals(&self) -> &I {
- &self.internals
- }
- pub fn do_something(&mut self) -> String {
- self.internals.update_things(&mut UpdateThingsEvent {
- state: &mut self.state,
- });
- self.state.things.join(", ")
- }
- }
- pub struct ControllerState<'a> {
- things: Vec<Cow<'a, str>>,
- }
- impl<'a> ControllerState<'a> {
- pub fn things_mut(&mut self) -> &mut Vec<Cow<'a, str>> {
- &mut self.things
- }
- }
- pub trait Internals {
- fn update_things(&mut self, state: &mut UpdateThingsEvent) {
- state.state.things_mut().push("thing".into());
- }
- }
- pub struct UpdateThingsEvent<'a> {
- state: &'a mut ControllerState<'a>,
- }
- impl<'a> UpdateThingsEvent<'a> {
- pub fn state(&mut self) -> &'a mut ControllerState {
- self.state
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement