Skip to content

Instantly share code, notes, and snippets.

@henninglive
Forked from anonymous/playground.rs
Created February 26, 2017 01:05
Show Gist options
  • Select an option

  • Save henninglive/3a9fd1b20a3e63a78481da087e3f895f to your computer and use it in GitHub Desktop.

Select an option

Save henninglive/3a9fd1b20a3e63a78481da087e3f895f to your computer and use it in GitHub Desktop.
Shared via Rust Playground
use std::marker::PhantomData;
trait SaveState {}
struct NoSave;
struct Saved;
struct Keyboard<S: SaveState> {
save: PhantomData<S>,
}
impl SaveState for NoSave {}
impl SaveState for Saved {}
impl Keyboard<NoSave> {
fn new() -> Keyboard<NoSave> {
Keyboard {
save: PhantomData,
}
}
fn save(self) -> Keyboard<Saved> {
Keyboard {
save: PhantomData,
}
}
}
impl Keyboard<Saved> {
fn restore(self) -> Keyboard<NoSave> {
Keyboard {
save: PhantomData,
}
}
}
fn main() {
let key1 = Keyboard::new();
let key2 = key1.save();
let key3 = key2.restore();
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment