# [−][src]Macro cortex_m::singleton

    macro_rules! singleton {
        (: $ty:ty = $expr:expr) => { ... };
    }

Macro to create a mutable reference to a statically allocated value

This macro returns a value with type `Option<&'static mut $ty>`. `Some($expr)` will be returned the first time the macro is executed; further calls will return `None`. To avoid `unwrap`ping a `None` variant the caller must ensure that the macro is called from a function that's executed at most once in the whole lifetime of the program.

# Example

    #[macro_use(singleton)]
    extern crate cortex_m;

    fn main() {
        // OK if `main` is executed only once
        let x: &'static mut bool = singleton!(: bool = false).unwrap();

        let y = alias();
        // BAD this second call to `alias` will definitively `panic!`
        let y_alias = alias();
    }

    fn alias() -> &'static mut bool {
        singleton!(: bool = false).unwrap()
    }

# 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`)