2 stable releases

1.15.0 Oct 11, 2024
1.14.0 Sep 19, 2024

#382 in Embedded development

Download history 125/week @ 2024-09-14 40/week @ 2024-09-21 21/week @ 2024-09-28 114/week @ 2024-10-05 59/week @ 2024-10-12

278 downloads per month
Used in memfaultd

Custom license

28KB
665 lines

memfault-ssf

Internal crate for use by the memfaultd crate, not for general use.


lib.rs:

Simple Service Framework

This library provides a simple abstraction to implement a service oriented architecture in a non-async Rust program.

Each service runs in its own thread with a processing loop waiting on a channel.

This library provides a few essential traits:

  • Service: a trait implemented by services
  • Message: a trait implemented by messages
  • Handler<M: Message>: a trait implemented by services that can handle messages of type M.

We provide some important structs to deploy the services:

  • ServiceThread: will start and run a service inside a dedicated thread. It returns a Mailbox.
  • Mailbox<S: Service>: a lightweight (cheap to clone()) handle to send messages to a thread.
  • Scheduler: a utility thread which keeps a schedule of messages that need to be sent at fixed intervals.

As well as important testing utilities that are a big part of the value provided by this framework:

  • ServiceJig: a way to run a service inside a test without using threads. The test can precisely decide when messages should be delivered and inspect the state of the service at any time.
  • ServiceMock: a service mock. Use this when you just need a place where to send messages. Your test can then verify that the right messages were sent to the mock.

No runtime deps