difftastic/rustdoc/strum/derive.EnumProperty.html

45 lines
6.3 KiB
HTML

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

<!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="Add custom properties to enum variants."><title>EnumProperty in strum - Rust</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../static.files/FiraSans-Regular-018c141bf0843ffd.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../static.files/FiraSans-Medium-8f9a781e4970d388.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../static.files/SourceCodePro-Regular-562dcc5011b6de7d.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../static.files/SourceCodePro-Semibold-d899c5a5c4aeb14a.ttf.woff2"><link rel="stylesheet" href="../static.files/normalize-76eba96aa4d2e634.css"><link rel="stylesheet" href="../static.files/rustdoc-ac92e1bbe349e143.css"><meta name="rustdoc-vars" data-root-path="../" data-static-root-path="../static.files/" data-current-crate="strum" data-themes="" data-resource-suffix="" data-rustdoc-version="1.76.0 (07dca489a 2024-02-04)" data-channel="1.76.0" data-search-js="search-2b6ce74ff89ae146.js" data-settings-js="settings-4313503d2e1961c2.js" ><script src="../static.files/storage-f2adc0d6ca4d09fb.js"></script><script defer src="sidebar-items.js"></script><script defer src="../static.files/main-305769736d49e732.js"></script><noscript><link rel="stylesheet" href="../static.files/noscript-feafe1bb7466e4bd.css"></noscript><link rel="alternate icon" type="image/png" href="../static.files/favicon-16x16-8b506e7a72182f1c.png"><link rel="alternate icon" type="image/png" href="../static.files/favicon-32x32-422f7d1d52889060.png"><link rel="icon" type="image/svg+xml" href="../static.files/favicon-2c020d218678b618.svg"></head><body class="rustdoc derive"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><nav class="mobile-topbar"><button class="sidebar-menu-toggle">&#9776;</button></nav><nav class="sidebar"><div class="sidebar-crate"><h2><a href="../strum/index.html">strum</a><span class="version">0.26.3</span></h2></div><div class="sidebar-elems"></div></nav><div class="sidebar-resizer"></div>
<main><div class="width-limiter"><nav class="sub"><form class="search-form"><span></span><div id="sidebar-button" tabindex="-1"><a href="../strum/all.html" title="show sidebar"></a></div><input class="search-input" name="search" aria-label="Run search in the documentation" autocomplete="off" spellcheck="false" placeholder="Click or press S to search, ? for more options…" type="search"><div id="help-button" tabindex="-1"><a href="../help.html" title="help">?</a></div><div id="settings-menu" tabindex="-1"><a href="../settings.html" title="settings"><img width="22" height="22" alt="Change settings" src="../static.files/wheel-7b819b6101059cd0.svg"></a></div></form></nav><section id="main-content" class="content"><div class="main-heading"><h1>Derive Macro <a href="index.html">strum</a>::<wbr><a class="derive" href="#">EnumProperty</a><button id="copy-path" title="Copy item path to clipboard"><img src="../static.files/clipboard-7571035ce49a181d.svg" width="19" height="18" alt="Copy item path"></button></h1><span class="out-of-band"><a class="src" href="../src/strum_macros/lib.rs.html#804">source</a> · <button id="toggle-all-docs" title="collapse all docs">[<span>&#x2212;</span>]</button></span></div><pre class="rust item-decl"><code>#[derive(EnumProperty)]
{
<span class="comment">// Attributes available to this derive:</span>
#[strum]
}
</code></pre><details class="toggle top-doc" open><summary class="hideme"><span>Expand description</span></summary><div class="docblock"><p>Add custom properties to enum variants.</p>
<p>Enables the encoding of arbitrary constants into enum variants. This method
currently only supports adding additional string values. Other types of literals are still
experimental in the rustc compiler. The generated code works by nesting match statements.
The first match statement matches on the type of the enum, and the inner match statement
matches on the name of the property requested. This design works well for enums with a small
number of variants and properties, but scales linearly with the number of variants so may not
be the best choice in all situations.</p>
<div class="example-wrap"><pre class="rust rust-example-rendered"><code>
<span class="kw">use </span>strum_macros;
<span class="comment">// bring the trait into scope
</span><span class="kw">use </span>strum::EnumProperty;
<span class="attr">#[derive(strum_macros::EnumProperty, Debug)]
#[allow(dead_code)]
</span><span class="kw">enum </span>Color {
<span class="attr">#[strum(props(Red = <span class="string">"255"</span>, Blue = <span class="string">"255"</span>, Green = <span class="string">"255"</span>))]
</span>White,
<span class="attr">#[strum(props(Red = <span class="string">"0"</span>, Blue = <span class="string">"0"</span>, Green = <span class="string">"0"</span>))]
</span>Black,
<span class="attr">#[strum(props(Red = <span class="string">"0"</span>, Blue = <span class="string">"255"</span>, Green = <span class="string">"0"</span>))]
</span>Blue,
<span class="attr">#[strum(props(Red = <span class="string">"255"</span>, Blue = <span class="string">"0"</span>, Green = <span class="string">"0"</span>))]
</span>Red,
<span class="attr">#[strum(props(Red = <span class="string">"0"</span>, Blue = <span class="string">"0"</span>, Green = <span class="string">"255"</span>))]
</span>Green,
}
<span class="kw">let </span>my_color = Color::Red;
<span class="kw">let </span>display = <span class="macro">format!</span>(
<span class="string">"My color is {:?}. It's RGB is {},{},{}"</span>,
my_color,
my_color.get_str(<span class="string">"Red"</span>).unwrap(),
my_color.get_str(<span class="string">"Green"</span>).unwrap(),
my_color.get_str(<span class="string">"Blue"</span>).unwrap()
);
<span class="macro">assert_eq!</span>(<span class="string">"My color is Red. It\'s RGB is 255,0,0"</span>, <span class="kw-2">&amp;</span>display);</code></pre></div>
</div></details></section></div></main></body></html>