Comments (2)
I also saw references to macro_machine and macro_machines.
machine itself gave me problems because I want to return a list of events from each transition (those events are then dispatched to other state machines, or they cause IO to happen), and machine
didn't have a way to support this: the only return value was the new state instance.
I'm moderately happy with our current implementation: we use an Option<State>
in each state machine, and remove the State object from the machine (with let oldstate = self.state.take().unwrap()
) at the start of the process()
method. Then a big match
statement switches on the old state and returns the new state (along with pushing any actions/events that need to be returned to a nearby Vec
). This way, we can consume the old State, along with anything it contained, and use those pieces to create the new State object. I'm still cloning things like Nameplates left and right, but maybe we can turn those into Rc
s or something to reduce the cost a bit.
from magic-wormhole.rs.
I guess I'll close this for now. If anyone finds a cleaner way to implement our state machines, feel free to reopen it.
from magic-wormhole.rs.
Related Issues (20)
- Feature Request: cli installable using cargo-install HOT 2
- feature request: support ssh invite/ssh accept modes HOT 5
- Add function to get claimed nameplates
- Flaky tests
- rand >= 0.8 break WASM support HOT 3
- Feature suggestion: show bitrate in progress bar HOT 5
- Progress bar bitrate intermittently drops on the sending side HOT 10
- `send --code` does not verify that a nameplate was provided and uses the entire code as the nameplate instead HOT 2
- RUSTSEC-2023-0037: crate has been renamed to `crypto_secretbox` HOT 1
- Release mac binaries HOT 1
- RUSTSEC-2023-0052: webpki: CPU denial of service in certificate path building
- [Feature request] Drop xsalsa20poly1305 dependency HOT 3
- Adapt help message for renamed binary
- Windows binary for v0.6.1 HOT 2
- Enable transfers over link scoped addresses
- Expose the TLS implementation features of async-tungstenite
- CI test failures HOT 1
- For Android HOT 3
- Performance issue on Mac with M1 pro HOT 3
- [FR] Please publish binary crate on crates.io, too
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from magic-wormhole.rs.