Skip to content

Instantly share code, notes, and snippets.

@jonlil
Created June 26, 2019 20:06
Show Gist options
  • Save jonlil/cc71cc512371067b30b8863d25beba40 to your computer and use it in GitHub Desktop.
Save jonlil/cc71cc512371067b30b8863d25beba40 to your computer and use it in GitHub Desktop.
struct Message<'a> {
transaction_id: &'a [u8],
}
struct RequestHandler<'a> {
handler: Box<Controller>,
request: Message<'a>,
}
impl<'a> RequestHandler<'a> {
pub fn new(message: Message, handler: Box<Controller>) -> RequestHandler {
RequestHandler {
request: message,
handler: handler,
}
}
fn exec(&self) {
self.handler.execute();
}
}
trait Controller {
fn execute(&self);
}
struct StartController;
impl Controller for StartController {
fn execute(&self) {
eprintln!("{}", "StartController");
}
}
struct BlogController;
impl Controller for BlogController {
fn execute(&self) {
eprintln!("{}", "BlogController");
}
}
fn get_controller(action_type: u8) -> Option<Box<dyn Controller>> {
match action_type {
0x00 => Some(Box::new(BlogController {})),
0x01 => Some(Box::new(StartController {})),
_ => None,
}
}
fn main() {
let controller = get_controller(0x00).unwrap();
let handler = RequestHandler::new(
Message {
transaction_id: &[0x00],
},
controller,
);
handler.exec();
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment