2017-07-14 23:30:16 +00:00
<!DOCTYPE html>
< html lang = "en" >
< head >
< meta charset = "utf-8" >
< meta name = "viewport" content = "width=device-width, initial-scale=1.0" >
< meta name = "generator" content = "rustdoc" >
< meta name = "description" content = "API documentation for the Rust `bitflags` macro in crate `bitflags`." >
< meta name = "keywords" content = "rust, rustlang, rust-lang, bitflags" >
< title > bitflags::bitflags - Rust< / title >
< link rel = "stylesheet" type = "text/css" href = "../normalize.css" >
< link rel = "stylesheet" type = "text/css" href = "../rustdoc.css" >
< link rel = "stylesheet" type = "text/css" href = "../main.css" >
< / head >
< body class = "rustdoc macro" >
<!-- [if lte IE 8]>
< div class = "warning" >
This old browser is unsupported and will most likely display funky
things.
< / div >
<![endif]-->
< nav class = "sidebar" >
< p class = 'location' > < a href = 'index.html' > bitflags< / a > < / p > < script > window . sidebarCurrent = { name : 'bitflags' , ty : 'macro' , relpath : '' } ; < / script > < script defer src = "sidebar-items.js" > < / script >
< / nav >
< nav class = "sub" >
< form class = "search-form js-only" >
< div class = "search-container" >
< input class = "search-input" name = "search"
autocomplete="off"
placeholder="Click or press ‘ S’ to search, ‘ ?’ for more options…"
type="search">
< / div >
< / form >
< / nav >
< section id = 'main' class = "content" >
< h1 class = 'fqn' > < span class = 'in-band' > Macro < a href = 'index.html' > bitflags< / a > ::< wbr > < a class = "macro" href = '' > bitflags< / a > < / span > < span class = 'out-of-band' > < span id = 'render-detail' >
< a id = "toggle-all-docs" href = "javascript:void(0)" title = "collapse all docs" >
[< span class = 'inner' > − < / span > ]
< / a >
2017-07-16 21:37:37 +00:00
< / span > < a class = 'srclink' href = '../src/bitflags/lib.rs.html#306-342' title = 'goto source code' > [src]< / a > < / span > < / h1 >
2017-07-14 23:30:16 +00:00
< pre class = "rust macro" >
< span class = "macro" > macro_rules< / span > < span class = "macro" > !< / span > < span class = "ident" > bitflags< / span > {
2017-07-16 21:37:37 +00:00
($(< span class = "attribute" > #[< span class = "macro-nonterminal" > $< / span > < span class = "macro-nonterminal" > attr< / span > :< span class = "ident" > meta< / span > ]< / span > )< span class = "op" > *< / span > < span class = "kw" > pub< / span > < span class = "kw" > struct< / span > < span class = "macro-nonterminal" > $< / span > < span class = "macro-nonterminal" > BitFlags< / span > :< span class = "ident" > ident< / span > : < span class = "macro-nonterminal" > $< / span > < span class = "macro-nonterminal" > T< / span > :< span class = "ident" > ty< / span > {
$($(< span class = "attribute" > #[< span class = "macro-nonterminal" > $< / span > < span class = "macro-nonterminal" > Flag_attr< / span > :< span class = "ident" > meta< / span > ]< / span > )< span class = "op" > *< / span > < span class = "kw" > const< / span > < span class = "macro-nonterminal" > $< / span > < span class = "macro-nonterminal" > Flag< / span > :< span class = "ident" > ident< / span > < span class = "op" > =< / span > < span class = "macro-nonterminal" > $< / span > < span class = "macro-nonterminal" > value< / span > :< span class = "ident" > expr< / span > ;)< span class = "op" > +< / span >
2017-07-14 23:30:16 +00:00
}) < span class = "op" > => < / span > { ... };
2017-07-16 21:37:37 +00:00
($(< span class = "attribute" > #[< span class = "macro-nonterminal" > $< / span > < span class = "macro-nonterminal" > attr< / span > :< span class = "ident" > meta< / span > ]< / span > )< span class = "op" > *< / span > < span class = "kw" > struct< / span > < span class = "macro-nonterminal" > $< / span > < span class = "macro-nonterminal" > BitFlags< / span > :< span class = "ident" > ident< / span > : < span class = "macro-nonterminal" > $< / span > < span class = "macro-nonterminal" > T< / span > :< span class = "ident" > ty< / span > {
$($(< span class = "attribute" > #[< span class = "macro-nonterminal" > $< / span > < span class = "macro-nonterminal" > Flag_attr< / span > :< span class = "ident" > meta< / span > ]< / span > )< span class = "op" > *< / span > < span class = "kw" > const< / span > < span class = "macro-nonterminal" > $< / span > < span class = "macro-nonterminal" > Flag< / span > :< span class = "ident" > ident< / span > < span class = "op" > =< / span > < span class = "macro-nonterminal" > $< / span > < span class = "macro-nonterminal" > value< / span > :< span class = "ident" > expr< / span > ;)< span class = "op" > +< / span >
2017-07-14 23:30:16 +00:00
}) < span class = "op" > => < / span > { ... };
}< / pre >
2017-07-16 21:37:37 +00:00
< div class = 'docblock' > < p > The macro used to generate the flag structure.< / p >
2017-07-14 23:30:16 +00:00
2017-07-16 21:37:37 +00:00
< p > See the < a href = "../bitflags/index.html" > crate level docs< / a > for complete documentation.< / p >
2017-07-14 23:30:16 +00:00
< h1 id = 'example' class = 'section-header' > < a href = '#example' > Example< / a > < / h1 >
< pre class = "rust rust-example-rendered" >
< span class = "attribute" > #[< span class = "ident" > macro_use< / span > ]< / span >
< span class = "kw" > extern< / span > < span class = "kw" > crate< / span > < span class = "ident" > bitflags< / span > ;
< span class = "macro" > bitflags< / span > < span class = "macro" > !< / span > {
2017-07-16 21:37:37 +00:00
< span class = "kw" > struct< / span > < span class = "ident" > Flags< / span > : < span class = "ident" > u32< / span > {
< span class = "kw" > const< / span > < span class = "ident" > FLAG_A< / span > < span class = "op" > =< / span > < span class = "number" > 0b00000001< / span > ;
< span class = "kw" > const< / span > < span class = "ident" > FLAG_B< / span > < span class = "op" > =< / span > < span class = "number" > 0b00000010< / span > ;
< span class = "kw" > const< / span > < span class = "ident" > FLAG_C< / span > < span class = "op" > =< / span > < span class = "number" > 0b00000100< / span > ;
2017-07-14 23:30:16 +00:00
< span class = "kw" > const< / span > < span class = "ident" > FLAG_ABC< / span > < span class = "op" > =< / span > < span class = "ident" > FLAG_A< / span > .< span class = "ident" > bits< / span >
< span class = "op" > |< / span > < span class = "ident" > FLAG_B< / span > .< span class = "ident" > bits< / span >
2017-07-16 21:37:37 +00:00
< span class = "op" > |< / span > < span class = "ident" > FLAG_C< / span > .< span class = "ident" > bits< / span > ;
2017-07-14 23:30:16 +00:00
}
}
< span class = "kw" > fn< / span > < span class = "ident" > main< / span > () {
< span class = "kw" > let< / span > < span class = "ident" > e1< / span > < span class = "op" > =< / span > < span class = "ident" > FLAG_A< / span > < span class = "op" > |< / span > < span class = "ident" > FLAG_C< / span > ;
< span class = "kw" > let< / span > < span class = "ident" > e2< / span > < span class = "op" > =< / span > < span class = "ident" > FLAG_B< / span > < span class = "op" > |< / span > < span class = "ident" > FLAG_C< / span > ;
< span class = "macro" > assert_eq< / span > < span class = "macro" > !< / span > ((< span class = "ident" > e1< / span > < span class = "op" > |< / span > < span class = "ident" > e2< / span > ), < span class = "ident" > FLAG_ABC< / span > ); < span class = "comment" > // union< / span >
< span class = "macro" > assert_eq< / span > < span class = "macro" > !< / span > ((< span class = "ident" > e1< / span > < span class = "op" > & < / span > < span class = "ident" > e2< / span > ), < span class = "ident" > FLAG_C< / span > ); < span class = "comment" > // intersection< / span >
< span class = "macro" > assert_eq< / span > < span class = "macro" > !< / span > ((< span class = "ident" > e1< / span > < span class = "op" > -< / span > < span class = "ident" > e2< / span > ), < span class = "ident" > FLAG_A< / span > ); < span class = "comment" > // set difference< / span >
< span class = "macro" > assert_eq< / span > < span class = "macro" > !< / span > (< span class = "op" > !< / span > < span class = "ident" > e2< / span > , < span class = "ident" > FLAG_A< / span > ); < span class = "comment" > // set complement< / span >
}< / pre >
< p > The generated < code > struct< / code > s can also be extended with type and trait
implementations:< / p >
< pre class = "rust rust-example-rendered" >
< span class = "attribute" > #[< span class = "ident" > macro_use< / span > ]< / span >
< span class = "kw" > extern< / span > < span class = "kw" > crate< / span > < span class = "ident" > bitflags< / span > ;
< span class = "kw" > use< / span > < span class = "ident" > std< / span > ::< span class = "ident" > fmt< / span > ;
< span class = "macro" > bitflags< / span > < span class = "macro" > !< / span > {
2017-07-16 21:37:37 +00:00
< span class = "kw" > struct< / span > < span class = "ident" > Flags< / span > : < span class = "ident" > u32< / span > {
< span class = "kw" > const< / span > < span class = "ident" > FLAG_A< / span > < span class = "op" > =< / span > < span class = "number" > 0b00000001< / span > ;
< span class = "kw" > const< / span > < span class = "ident" > FLAG_B< / span > < span class = "op" > =< / span > < span class = "number" > 0b00000010< / span > ;
2017-07-14 23:30:16 +00:00
}
}
< span class = "kw" > impl< / span > < span class = "ident" > Flags< / span > {
< span class = "kw" > pub< / span > < span class = "kw" > fn< / span > < span class = "ident" > clear< / span > (< span class = "kw-2" > & < / span > < span class = "kw-2" > mut< / span > < span class = "self" > self< / span > ) {
< span class = "self" > self< / span > .< span class = "ident" > bits< / span > < span class = "op" > =< / span > < span class = "number" > 0< / span > ; < span class = "comment" > // The `bits` field can be accessed from within the< / span >
< span class = "comment" > // same module where the `bitflags!` macro was invoked.< / span >
}
}
< span class = "kw" > impl< / span > < span class = "ident" > fmt< / span > ::< span class = "ident" > Display< / span > < span class = "kw" > for< / span > < span class = "ident" > Flags< / span > {
< span class = "kw" > fn< / span > < span class = "ident" > fmt< / span > (< span class = "kw-2" > & < / span > < span class = "self" > self< / span > , < span class = "ident" > f< / span > : < span class = "kw-2" > & < / span > < span class = "kw-2" > mut< / span > < span class = "ident" > fmt< / span > ::< span class = "ident" > Formatter< / span > ) < span class = "op" > -> < / span > < span class = "ident" > fmt< / span > ::< span class = "prelude-ty" > Result< / span > {
< span class = "macro" > write< / span > < span class = "macro" > !< / span > (< span class = "ident" > f< / span > , < span class = "string" > " hi!" < / span > )
}
}
< span class = "kw" > fn< / span > < span class = "ident" > main< / span > () {
< span class = "kw" > let< / span > < span class = "kw-2" > mut< / span > < span class = "ident" > flags< / span > < span class = "op" > =< / span > < span class = "ident" > FLAG_A< / span > < span class = "op" > |< / span > < span class = "ident" > FLAG_B< / span > ;
< span class = "ident" > flags< / span > .< span class = "ident" > clear< / span > ();
< span class = "macro" > assert< / span > < span class = "macro" > !< / span > (< span class = "ident" > flags< / span > .< span class = "ident" > is_empty< / span > ());
< span class = "macro" > assert_eq< / span > < span class = "macro" > !< / span > (< span class = "macro" > format< / span > < span class = "macro" > !< / span > (< span class = "string" > " {}" < / span > , < span class = "ident" > flags< / span > ), < span class = "string" > " hi!" < / span > );
< span class = "macro" > assert_eq< / span > < span class = "macro" > !< / span > (< span class = "macro" > format< / span > < span class = "macro" > !< / span > (< span class = "string" > " {:?}" < / span > , < span class = "ident" > FLAG_A< / span > < span class = "op" > |< / span > < span class = "ident" > FLAG_B< / span > ), < span class = "string" > " FLAG_A | FLAG_B" < / span > );
< span class = "macro" > assert_eq< / span > < span class = "macro" > !< / span > (< span class = "macro" > format< / span > < span class = "macro" > !< / span > (< span class = "string" > " {:?}" < / span > , < span class = "ident" > FLAG_B< / span > ), < span class = "string" > " FLAG_B" < / span > );
}< / pre >
< / div > < / section >
< section id = 'search' class = "content hidden" > < / section >
< section class = "footer" > < / section >
< aside id = "help" class = "hidden" >
< div >
< h1 class = "hidden" > Help< / h1 >
< div class = "shortcuts" >
< h2 > Keyboard Shortcuts< / h2 >
< dl >
< dt > ?< / dt >
< dd > Show this help dialog< / dd >
< dt > S< / dt >
< dd > Focus the search field< / dd >
< dt > ⇤ < / dt >
< dd > Move up in search results< / dd >
< dt > ⇥ < / dt >
< dd > Move down in search results< / dd >
< dt > ⏎ < / dt >
< dd > Go to active search result< / dd >
< dt > +< / dt >
< dd > Collapse/expand all sections< / dd >
< / dl >
< / div >
< div class = "infos" >
< h2 > Search Tricks< / h2 >
< p >
Prefix searches with a type followed by a colon (e.g.
< code > fn:< / code > ) to restrict the search to a given type.
< / p >
< p >
Accepted types are: < code > fn< / code > , < code > mod< / code > ,
< code > struct< / code > , < code > enum< / code > ,
< code > trait< / code > , < code > type< / code > , < code > macro< / code > ,
and < code > const< / code > .
< / p >
< p >
Search functions by type signature (e.g.
< code > vec -> usize< / code > or < code > * -> vec< / code > )
< / p >
< / div >
< / div >
< / aside >
< script >
window.rootPath = "../";
window.currentCrate = "bitflags";
< / script >
< script src = "../main.js" > < / script >
< script defer src = "../search-index.js" > < / script >
< / body >
< / html >