Skip to content

A Rust crate to write toy distributed systems with Maelstrom as Actors.

License

Notifications You must be signed in to change notification settings

PierreZ/maelstrom-rs

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

11 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

maelstrom-rs

A crate that is providing an Actor model to develop toy distributed systems using Maelstrom.

What is Maelstrom?

Maelstrom is a workbench for learning distributed systems by writing your own. It uses the Jepsen testing library to test toy implementations of distributed systems.

Getting started

Examples following the official documentations can be found in the examples folder.

The crate exposes:

  • an Actor trait that you can implement:
  • a Runtime, that will run it.

Examples

use maelstrom_rs::actor::Actor;
use maelstrom_rs::message::{Request, Response};
use maelstrom_rs::error::Error;
use maelstrom_rs::runtime::Runtime;

fn main() {
   let node = EchoActor { node_id: None };
   let mut runtime = Runtime::new(Box::new(node));
   // runtime.start();
}

struct EchoActor {
    node_id: Option<String>,
}

impl Actor for EchoActor {
  fn init(&mut self, node_id: &str, _node_ids: Vec<String>) -> Result<(), Error> {
       self.node_id = Some(String::from(node_id));
       eprintln!("node {} initiated", node_id);
       Ok(())
   }

   fn receive(&mut self, message: &Request) -> Result<Vec<Response>, Error> {
       match message.message_type.as_str() {
           "echo" => unimplemented!(),
           _ => unimplemented!(),
        }
   }
}

About

A Rust crate to write toy distributed systems with Maelstrom as Actors.

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published