# actix_web::actix::actix::Supervisor - Rust
API documentation for the Rust `Supervisor` struct in crate `actix_web`.
Keywords: rust, rustlang, rust-lang, Supervisor

# Struct actix_web::actix::actix::Supervisor [−]

    pub struct Supervisor<A> where
        A: Supervised<Context = Context<A>> + Actor,  { /* fields omitted */ }

Actor supervisor

Supervisor manages incoming message for actor. In case of actor failure, supervisor creates new execution context and restarts actor lifecycle. Supervisor does not does not re-create actor, it just calls `restarting()` method.

Supervisor has same lifecycle as actor. In situation when all addresses to supervisor get dropped and actor does not execute anything, supervisor terminates.

`Supervisor` can not guarantee that actor successfully process incoming message. If actor fails during message processing, this message can not be recovered. Sender would receive `Err(Cancelled)` error in this situation.

## Example

    #[derive(Message)]
    struct Die;

    struct MyActor;

    impl Actor for MyActor {
        type Context = Context<Self>;
    }

    // To use actor with supervisor actor has to implement `Supervised` trait
    impl actix::Supervised for MyActor {
        fn restarting(&mut self, ctx: &mut Context<MyActor>) {
            println!("restarting");
        }
    }

    impl Handler<Die> for MyActor {
        type Result = ();

        fn handle(&mut self, _: Die, ctx: &mut Context<MyActor>) {
            ctx.stop();
        }
    }

    fn main() {
        System::run(|| {
            let addr = actix::Supervisor::start(|_| MyActor);

            addr.do_send(Die);
        });
    }

## Methods

###

`impl<A> Supervisor<A> where A: Supervised<Context = Context<A>> + Actor,`

####

`pub fn start<F>(f: F) -> Addr<A> where A: Actor<Context = Context<A>>, F: FnOnce(&mut <A as Actor>::Context) -> A + 'static,` |

Start new supervised actor in current tokio runtime.

Type of returned address depends on variable type. For example to get `Addr<Syn, _>` of newly created actor, use explicitly `Addr<Syn, _>` type as type of a variable.

    struct MyActor;

    impl Actor for MyActor {
        type Context = Context<Self>;
    }

    // Get `Addr` of a MyActor actor
    let addr = actix::Supervisor::start(|_| MyActor);

####

`pub fn start_in_arbiter<F>(sys: &Addr<Arbiter>, f: F) -> Addr<A> where A: Actor<Context = Context<A>>, F: FnOnce(&mut Context<A>) -> A + Send + 'static,` |

Start new supervised actor in arbiter's thread.

## Auto Trait Implementations

###

`impl<A> !Send for Supervisor<A>`

###

`impl<A> !Sync for Supervisor<A>`

# Help

## Keyboard Shortcuts

`?`
  Show this help dialog
`S`
  Focus the search field
`↑`
  Move up in search results
`↓`
  Move down in search results
`↹`
  Switch tab
`⏎`
  Go to active search result
`+`
  Expand all sections
`-`
  Collapse all sections

## Search Tricks

Prefix searches with a type followed by a colon (e.g. `fn:`) to restrict the search to a given type.

Accepted types are: `fn`, `mod`, `struct`, `enum`, `trait`, `type`, `macro`, and `const`.

Search functions by type signature (e.g. `vec -> usize` or `* -> vec`)

Search multiple things at once by splitting your query with comma (e.g. `str,u8` or `String,struct:Vec,test`)