edlang/clap/struct.ArgGroup.html
2024-07-26 09:44:36 +00:00

304 lines
64 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!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="Family of related arguments."><title>ArgGroup in clap - Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.ttf.woff2,FiraSans-Regular-018c141bf0843ffd.woff2,FiraSans-Medium-8f9a781e4970d388.woff2,SourceCodePro-Regular-562dcc5011b6de7d.ttf.woff2,SourceCodePro-Semibold-d899c5a5c4aeb14a.ttf.woff2".split(",").map(f=>`<link rel="preload" as="font" type="font/woff2" crossorigin href="../static.files/${f}">`).join(""))</script><link rel="stylesheet" href="../static.files/normalize-76eba96aa4d2e634.css"><link rel="stylesheet" href="../static.files/rustdoc-dd39b87e5fcfba68.css"><meta name="rustdoc-vars" data-root-path="../" data-static-root-path="../static.files/" data-current-crate="clap" data-themes="" data-resource-suffix="" data-rustdoc-version="1.80.0 (051478957 2024-07-21)" data-channel="1.80.0" data-search-js="search-d52510db62a78183.js" data-settings-js="settings-4313503d2e1961c2.js" ><script src="../static.files/storage-118b08c4c78b968e.js"></script><script defer src="sidebar-items.js"></script><script defer src="../static.files/main-20a3ad099b048cf2.js"></script><noscript><link rel="stylesheet" href="../static.files/noscript-df360f571f6edeae.css"></noscript><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 struct"><!--[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" title="show sidebar"></button><a class="logo-container" href="../clap/index.html"><img src="https://raw.githubusercontent.com/clap-rs/clap/master/assets/clap.png" alt=""></a></nav><nav class="sidebar"><div class="sidebar-crate"><a class="logo-container" href="../clap/index.html"><img src="https://raw.githubusercontent.com/clap-rs/clap/master/assets/clap.png" alt="logo"></a><h2><a href="../clap/index.html">clap</a><span class="version">4.5.11</span></h2></div><h2 class="location"><a href="#">ArgGroup</a></h2><div class="sidebar-elems"><section><h3><a href="#implementations">Methods</a></h3><ul class="block method"><li><a href="#method.arg">arg</a></li><li><a href="#method.args">args</a></li><li><a href="#method.conflicts_with">conflicts_with</a></li><li><a href="#method.conflicts_with_all">conflicts_with_all</a></li><li><a href="#method.get_args">get_args</a></li><li><a href="#method.get_id">get_id</a></li><li><a href="#method.id">id</a></li><li><a href="#method.is_multiple">is_multiple</a></li><li><a href="#method.is_required_set">is_required_set</a></li><li><a href="#method.multiple">multiple</a></li><li><a href="#method.new">new</a></li><li><a href="#method.required">required</a></li><li><a href="#method.requires">requires</a></li><li><a href="#method.requires_all">requires_all</a></li></ul><h3><a href="#trait-implementations">Trait Implementations</a></h3><ul class="block trait-implementation"><li><a href="#impl-Clone-for-ArgGroup">Clone</a></li><li><a href="#impl-Debug-for-ArgGroup">Debug</a></li><li><a href="#impl-Default-for-ArgGroup">Default</a></li><li><a href="#impl-Eq-for-ArgGroup">Eq</a></li><li><a href="#impl-From%3C%26ArgGroup%3E-for-ArgGroup">From&lt;&amp;ArgGroup&gt;</a></li><li><a href="#impl-PartialEq-for-ArgGroup">PartialEq</a></li><li><a href="#impl-StructuralPartialEq-for-ArgGroup">StructuralPartialEq</a></li></ul><h3><a href="#synthetic-implementations">Auto Trait Implementations</a></h3><ul class="block synthetic-implementation"><li><a href="#impl-Freeze-for-ArgGroup">Freeze</a></li><li><a href="#impl-RefUnwindSafe-for-ArgGroup">RefUnwindSafe</a></li><li><a href="#impl-Send-for-ArgGroup">Send</a></li><li><a href="#impl-Sync-for-ArgGroup">Sync</a></li><li><a href="#impl-Unpin-for-ArgGroup">Unpin</a></li><li><a href="#impl-UnwindSafe-for-ArgGroup">UnwindSafe</a></li></ul><h3><a href="#blanket-implementations">Blanket Implementations</a></h3><ul class="block blanket-implementation"><li><a href="#impl-Any-for-T">Any</a></li><li><a href="#impl-Borrow%3CT%3E-for-T">Borrow&lt;T&gt;</a></li><li><a href="#impl-BorrowMut%3CT%3E-for-T">BorrowMut&lt;T&gt;</a></li><li><a href="#impl-From%3CT%3E-for-T">From&lt;T&gt;</a></li><li><a href="#impl-Into%3CU%3E-for-T">Into&lt;U&gt;</a></li><li><a href="#impl-ToOwned-for-T">ToOwned</a></li><li><a href="#impl-TryFrom%3CU%3E-for-T">TryFrom&lt;U&gt;</a></li><li><a href="#impl-TryInto%3CU%3E-for-T">TryInto&lt;U&gt;</a></li></ul></section><h2><a href="index.html">In crate clap</a></h2></div></nav><div class="sidebar-resizer"></div><main><div class="width-limiter"><rustdoc-search></rustdoc-search><section id="main-content" class="content"><div class="main-heading"><h1>Struct <a href="index.html">clap</a>::<wbr><a class="struct" href="#">ArgGroup</a><button id="copy-path" title="Copy item path to clipboard">Copy item path</button></h1><span class="out-of-band"><a class="src" href="../src/clap_builder/builder/arg_group.rs.html#88">source</a> · <button id="toggle-all-docs" title="collapse all docs">[<span>&#x2212;</span>]</button></span></div><pre class="rust item-decl"><code>pub struct ArgGroup { <span class="comment">/* private fields */</span> }</code></pre><details class="toggle top-doc" open><summary class="hideme"><span>Expand description</span></summary><div class="docblock"><p>Family of related <a href="struct.Arg.html" title="struct clap::Arg">arguments</a>.</p>
<p>By placing arguments in a logical group, you can create easier requirement and
exclusion rules instead of having to list each argument individually, or when you want a rule
to apply “any but not all” arguments.</p>
<p>For instance, you can make an entire <code>ArgGroup</code> required. If <a href="struct.ArgGroup.html#method.multiple" title="method clap::ArgGroup::multiple"><code>ArgGroup::multiple(true)</code></a> is
set, this means that at least one argument from that group must be present. If
<a href="struct.ArgGroup.html#method.multiple" title="method clap::ArgGroup::multiple"><code>ArgGroup::multiple(false)</code></a> is set (the default), one and <em>only</em> one must be present.</p>
<p>You can also do things such as name an entire <code>ArgGroup</code> as a <a href="struct.Arg.html#method.conflicts_with" title="method clap::Arg::conflicts_with">conflict</a> or <a href="struct.Arg.html#method.requires" title="method clap::Arg::requires">requirement</a> for
another argument, meaning any of the arguments that belong to that group will cause a failure
if present, or must be present respectively.</p>
<p>Perhaps the most common use of <code>ArgGroup</code>s is to require one and <em>only</em> one argument to be
present out of a given set. Imagine that you had multiple arguments, and you want one of them
to be required, but making all of them required isnt feasible because perhaps they conflict
with each other. For example, lets say that you were building an application where one could
set a given version number by supplying a string with an option argument, i.e.
<code>--set-ver v1.2.3</code>, you also wanted to support automatically using a previous version number
and simply incrementing one of the three numbers. So you create three flags <code>--major</code>,
<code>--minor</code>, and <code>--patch</code>. All of these arguments shouldnt be used at one time but you want to
specify that <em>at least one</em> of them is used. For this, you can create a group.</p>
<p>Finally, you may use <code>ArgGroup</code>s to pull a value from a group of arguments when you dont care
exactly which argument was actually used at runtime.</p>
<h2 id="examples"><a class="doc-anchor" href="#examples">§</a>Examples</h2>
<p>The following example demonstrates using an <code>ArgGroup</code> to ensure that one, and only one, of
the arguments from the specified group is present at runtime.</p>
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">let </span>result = Command::new(<span class="string">"cmd"</span>)
.arg(<span class="macro">arg!</span>(--<span class="string">"set-ver" </span>&lt;ver&gt; <span class="string">"set the version manually"</span>))
.arg(<span class="macro">arg!</span>(--major <span class="string">"auto increase major"</span>))
.arg(<span class="macro">arg!</span>(--minor <span class="string">"auto increase minor"</span>))
.arg(<span class="macro">arg!</span>(--patch <span class="string">"auto increase patch"</span>))
.group(ArgGroup::new(<span class="string">"vers"</span>)
.args([<span class="string">"set-ver"</span>, <span class="string">"major"</span>, <span class="string">"minor"</span>, <span class="string">"patch"</span>])
.required(<span class="bool-val">true</span>))
.try_get_matches_from(<span class="macro">vec!</span>[<span class="string">"cmd"</span>, <span class="string">"--major"</span>, <span class="string">"--patch"</span>]);
<span class="comment">// Because we used two args in the group it's an error
</span><span class="macro">assert!</span>(result.is_err());
<span class="kw">let </span>err = result.unwrap_err();
<span class="macro">assert_eq!</span>(err.kind(), ErrorKind::ArgumentConflict);</code></pre></div>
<p>This next example shows a passing parse of the same scenario</p>
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">let </span>result = Command::new(<span class="string">"cmd"</span>)
.arg(<span class="macro">arg!</span>(--<span class="string">"set-ver" </span>&lt;ver&gt; <span class="string">"set the version manually"</span>))
.arg(<span class="macro">arg!</span>(--major <span class="string">"auto increase major"</span>))
.arg(<span class="macro">arg!</span>(--minor <span class="string">"auto increase minor"</span>))
.arg(<span class="macro">arg!</span>(--patch <span class="string">"auto increase patch"</span>))
.group(ArgGroup::new(<span class="string">"vers"</span>)
.args([<span class="string">"set-ver"</span>, <span class="string">"major"</span>, <span class="string">"minor"</span>,<span class="string">"patch"</span>])
.required(<span class="bool-val">true</span>))
.try_get_matches_from(<span class="macro">vec!</span>[<span class="string">"cmd"</span>, <span class="string">"--major"</span>]);
<span class="macro">assert!</span>(result.is_ok());
<span class="kw">let </span>matches = result.unwrap();
<span class="comment">// We may not know which of the args was used, so we can test for the group...
</span><span class="macro">assert!</span>(matches.contains_id(<span class="string">"vers"</span>));
<span class="comment">// We can also ask the group which arg was used
</span><span class="macro">assert_eq!</span>(matches
.get_one::&lt;Id&gt;(<span class="string">"vers"</span>)
.expect(<span class="string">"`vers` is required"</span>)
.as_str(),
<span class="string">"major"
</span>);
<span class="comment">// we could also alternatively check each arg individually (not shown here)</span></code></pre></div>
</div></details><h2 id="implementations" class="section-header">Implementations<a href="#implementations" class="anchor">§</a></h2><div id="implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-ArgGroup" class="impl"><a class="src rightside" href="../src/clap_builder/builder/arg_group.rs.html#98">source</a><a href="#impl-ArgGroup" class="anchor">§</a><h3 class="code-header">impl <a class="struct" href="struct.ArgGroup.html" title="struct clap::ArgGroup">ArgGroup</a></h3></section></summary><div class="docblock"><h4 id="builder"><a class="doc-anchor" href="#builder">§</a>Builder</h4></div><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.new" class="method"><a class="src rightside" href="../src/clap_builder/builder/arg_group.rs.html#112">source</a><h4 class="code-header">pub fn <a href="#method.new" class="fn">new</a>(id: impl <a class="trait" href="https://doc.rust-lang.org/1.80.0/core/convert/trait.Into.html" title="trait core::convert::Into">Into</a>&lt;<a class="struct" href="struct.Id.html" title="struct clap::Id">Id</a>&gt;) -&gt; <a class="struct" href="struct.ArgGroup.html" title="struct clap::ArgGroup">ArgGroup</a></h4></section></summary><div class="docblock"><p>Create a <code>ArgGroup</code> using a unique name.</p>
<p>The name will be used to get values from the group or refer to the group inside of conflict
and requirement rules.</p>
<h5 id="examples-1"><a class="doc-anchor" href="#examples-1">§</a>Examples</h5>
<div class="example-wrap"><pre class="rust rust-example-rendered"><code>ArgGroup::new(<span class="string">"config"</span>)</code></pre></div>
</div></details><details class="toggle method-toggle" open><summary><section id="method.id" class="method"><a class="src rightside" href="../src/clap_builder/builder/arg_group.rs.html#127">source</a><h4 class="code-header">pub fn <a href="#method.id" class="fn">id</a>(self, id: impl <a class="trait" href="https://doc.rust-lang.org/1.80.0/core/convert/trait.Into.html" title="trait core::convert::Into">Into</a>&lt;<a class="struct" href="struct.Id.html" title="struct clap::Id">Id</a>&gt;) -&gt; <a class="struct" href="struct.ArgGroup.html" title="struct clap::ArgGroup">ArgGroup</a></h4></section></summary><div class="docblock"><p>Sets the group name.</p>
<h5 id="examples-2"><a class="doc-anchor" href="#examples-2">§</a>Examples</h5>
<div class="example-wrap"><pre class="rust rust-example-rendered"><code>ArgGroup::default().id(<span class="string">"config"</span>)</code></pre></div>
</div></details><details class="toggle method-toggle" open><summary><section id="method.arg" class="method"><a class="src rightside" href="../src/clap_builder/builder/arg_group.rs.html#157">source</a><h4 class="code-header">pub fn <a href="#method.arg" class="fn">arg</a>(self, arg_id: impl <a class="trait" href="builder/trait.IntoResettable.html" title="trait clap::builder::IntoResettable">IntoResettable</a>&lt;<a class="struct" href="struct.Id.html" title="struct clap::Id">Id</a>&gt;) -&gt; <a class="struct" href="struct.ArgGroup.html" title="struct clap::ArgGroup">ArgGroup</a></h4></section></summary><div class="docblock"><p>Adds an <a href="struct.Arg.html" title="struct clap::Arg">argument</a> to this group by name</p>
<h5 id="examples-3"><a class="doc-anchor" href="#examples-3">§</a>Examples</h5>
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">let </span>m = Command::new(<span class="string">"myprog"</span>)
.arg(Arg::new(<span class="string">"flag"</span>)
.short(<span class="string">'f'</span>)
.action(ArgAction::SetTrue))
.arg(Arg::new(<span class="string">"color"</span>)
.short(<span class="string">'c'</span>)
.action(ArgAction::SetTrue))
.group(ArgGroup::new(<span class="string">"req_flags"</span>)
.arg(<span class="string">"flag"</span>)
.arg(<span class="string">"color"</span>))
.get_matches_from(<span class="macro">vec!</span>[<span class="string">"myprog"</span>, <span class="string">"-f"</span>]);
<span class="comment">// maybe we don't know which of the two flags was used...
</span><span class="macro">assert!</span>(m.contains_id(<span class="string">"req_flags"</span>));
<span class="comment">// but we can also check individually if needed
</span><span class="macro">assert!</span>(m.contains_id(<span class="string">"flag"</span>));</code></pre></div>
</div></details><details class="toggle method-toggle" open><summary><section id="method.args" class="method"><a class="src rightside" href="../src/clap_builder/builder/arg_group.rs.html#190">source</a><h4 class="code-header">pub fn <a href="#method.args" class="fn">args</a>(self, ns: impl <a class="trait" href="https://doc.rust-lang.org/1.80.0/core/iter/traits/collect/trait.IntoIterator.html" title="trait core::iter::traits::collect::IntoIterator">IntoIterator</a>&lt;Item = impl <a class="trait" href="https://doc.rust-lang.org/1.80.0/core/convert/trait.Into.html" title="trait core::convert::Into">Into</a>&lt;<a class="struct" href="struct.Id.html" title="struct clap::Id">Id</a>&gt;&gt;) -&gt; <a class="struct" href="struct.ArgGroup.html" title="struct clap::ArgGroup">ArgGroup</a></h4></section></summary><div class="docblock"><p>Adds multiple <a href="struct.Arg.html" title="struct clap::Arg">arguments</a> to this group by name</p>
<h5 id="examples-4"><a class="doc-anchor" href="#examples-4">§</a>Examples</h5>
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">let </span>m = Command::new(<span class="string">"myprog"</span>)
.arg(Arg::new(<span class="string">"flag"</span>)
.short(<span class="string">'f'</span>)
.action(ArgAction::SetTrue))
.arg(Arg::new(<span class="string">"color"</span>)
.short(<span class="string">'c'</span>)
.action(ArgAction::SetTrue))
.group(ArgGroup::new(<span class="string">"req_flags"</span>)
.args([<span class="string">"flag"</span>, <span class="string">"color"</span>]))
.get_matches_from(<span class="macro">vec!</span>[<span class="string">"myprog"</span>, <span class="string">"-f"</span>]);
<span class="comment">// maybe we don't know which of the two flags was used...
</span><span class="macro">assert!</span>(m.contains_id(<span class="string">"req_flags"</span>));
<span class="comment">// but we can also check individually if needed
</span><span class="macro">assert!</span>(m.contains_id(<span class="string">"flag"</span>));</code></pre></div>
</div></details><details class="toggle method-toggle" open><summary><section id="method.get_args" class="method"><a class="src rightside" href="../src/clap_builder/builder/arg_group.rs.html#211">source</a><h4 class="code-header">pub fn <a href="#method.get_args" class="fn">get_args</a>(&amp;self) -&gt; impl <a class="trait" href="https://doc.rust-lang.org/1.80.0/core/iter/traits/iterator/trait.Iterator.html" title="trait core::iter::traits::iterator::Iterator">Iterator</a>&lt;Item = &amp;<a class="struct" href="struct.Id.html" title="struct clap::Id">Id</a>&gt;</h4></section></summary><div class="docblock"><p>Getters for all args. It will return a vector of <code>Id</code></p>
<h5 id="example"><a class="doc-anchor" href="#example">§</a>Example</h5>
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">let </span>args: Vec&lt;<span class="kw-2">&amp;</span>str&gt; = <span class="macro">vec!</span>[<span class="string">"a1"</span>.into(), <span class="string">"a4"</span>.into()];
<span class="kw">let </span>grp = ArgGroup::new(<span class="string">"program"</span>).args(<span class="kw-2">&amp;</span>args);
<span class="kw">for </span>(pos, arg) <span class="kw">in </span>grp.get_args().enumerate() {
<span class="macro">assert_eq!</span>(<span class="kw-2">*</span>arg, args[pos]);
}</code></pre></div>
</div></details><details class="toggle method-toggle" open><summary><section id="method.multiple" class="method"><a class="src rightside" href="../src/clap_builder/builder/arg_group.rs.html#264">source</a><h4 class="code-header">pub fn <a href="#method.multiple" class="fn">multiple</a>(self, yes: <a class="primitive" href="https://doc.rust-lang.org/1.80.0/std/primitive.bool.html">bool</a>) -&gt; <a class="struct" href="struct.ArgGroup.html" title="struct clap::ArgGroup">ArgGroup</a></h4></section></summary><div class="docblock"><p>Allows more than one of the <a href="struct.Arg.html" title="struct clap::Arg"><code>Arg</code></a>s in this group to be used. (Default: <code>false</code>)</p>
<h5 id="examples-5"><a class="doc-anchor" href="#examples-5">§</a>Examples</h5>
<p>Notice in this example we use <em>both</em> the <code>-f</code> and <code>-c</code> flags which are both part of the
group</p>
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">let </span>m = Command::new(<span class="string">"myprog"</span>)
.arg(Arg::new(<span class="string">"flag"</span>)
.short(<span class="string">'f'</span>)
.action(ArgAction::SetTrue))
.arg(Arg::new(<span class="string">"color"</span>)
.short(<span class="string">'c'</span>)
.action(ArgAction::SetTrue))
.group(ArgGroup::new(<span class="string">"req_flags"</span>)
.args([<span class="string">"flag"</span>, <span class="string">"color"</span>])
.multiple(<span class="bool-val">true</span>))
.get_matches_from(<span class="macro">vec!</span>[<span class="string">"myprog"</span>, <span class="string">"-f"</span>, <span class="string">"-c"</span>]);
<span class="comment">// maybe we don't know which of the two flags was used...
</span><span class="macro">assert!</span>(m.contains_id(<span class="string">"req_flags"</span>));</code></pre></div>
<p>In this next example, we show the default behavior (i.e. <code>multiple(false)</code>) which will throw
an error if more than one of the args in the group was used.</p>
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">let </span>result = Command::new(<span class="string">"myprog"</span>)
.arg(Arg::new(<span class="string">"flag"</span>)
.short(<span class="string">'f'</span>)
.action(ArgAction::SetTrue))
.arg(Arg::new(<span class="string">"color"</span>)
.short(<span class="string">'c'</span>)
.action(ArgAction::SetTrue))
.group(ArgGroup::new(<span class="string">"req_flags"</span>)
.args([<span class="string">"flag"</span>, <span class="string">"color"</span>]))
.try_get_matches_from(<span class="macro">vec!</span>[<span class="string">"myprog"</span>, <span class="string">"-f"</span>, <span class="string">"-c"</span>]);
<span class="comment">// Because we used both args in the group it's an error
</span><span class="macro">assert!</span>(result.is_err());
<span class="kw">let </span>err = result.unwrap_err();
<span class="macro">assert_eq!</span>(err.kind(), ErrorKind::ArgumentConflict);</code></pre></div>
</div></details><details class="toggle method-toggle" open><summary><section id="method.is_multiple" class="method"><a class="src rightside" href="../src/clap_builder/builder/arg_group.rs.html#283">source</a><h4 class="code-header">pub fn <a href="#method.is_multiple" class="fn">is_multiple</a>(&amp;mut self) -&gt; <a class="primitive" href="https://doc.rust-lang.org/1.80.0/std/primitive.bool.html">bool</a></h4></section></summary><div class="docblock"><p>Return true if the group allows more than one of the arguments
in this group to be used. (Default: <code>false</code>)</p>
<h5 id="example-1"><a class="doc-anchor" href="#example-1">§</a>Example</h5>
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">let </span><span class="kw-2">mut </span>group = ArgGroup::new(<span class="string">"myprog"</span>)
.args([<span class="string">"f"</span>, <span class="string">"c"</span>])
.multiple(<span class="bool-val">true</span>);
<span class="macro">assert!</span>(group.is_multiple());</code></pre></div>
</div></details><details class="toggle method-toggle" open><summary><section id="method.required" class="method"><a class="src rightside" href="../src/clap_builder/builder/arg_group.rs.html#327">source</a><h4 class="code-header">pub fn <a href="#method.required" class="fn">required</a>(self, yes: <a class="primitive" href="https://doc.rust-lang.org/1.80.0/std/primitive.bool.html">bool</a>) -&gt; <a class="struct" href="struct.ArgGroup.html" title="struct clap::ArgGroup">ArgGroup</a></h4></section></summary><div class="docblock"><p>Require an argument from the group to be present when parsing.</p>
<p>This is unless conflicting with another argument. A required group will be displayed in
the usage string of the application in the format <code>&lt;arg|arg2|arg3&gt;</code>.</p>
<p><strong>NOTE:</strong> This setting only applies to the current <a href="struct.Command.html" title="struct clap::Command"><code>Command</code></a> / <a href="trait.Subcommand.html" title="trait clap::Subcommand"><code>Subcommand</code></a>s, and not
globally.</p>
<p><strong>NOTE:</strong> By default, <a href="struct.ArgGroup.html#method.multiple" title="method clap::ArgGroup::multiple"><code>ArgGroup::multiple</code></a> is set to <code>false</code> which when combined with
<code>ArgGroup::required(true)</code> states, “One and <em>only one</em> arg must be used from this group.
Use of more than one arg is an error.” Vice setting <code>ArgGroup::multiple(true)</code> which
states, <em>At least</em> one arg from this group must be used. Using multiple is OK.“</p>
<h5 id="examples-6"><a class="doc-anchor" href="#examples-6">§</a>Examples</h5>
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">let </span>result = Command::new(<span class="string">"myprog"</span>)
.arg(Arg::new(<span class="string">"flag"</span>)
.short(<span class="string">'f'</span>)
.action(ArgAction::SetTrue))
.arg(Arg::new(<span class="string">"color"</span>)
.short(<span class="string">'c'</span>)
.action(ArgAction::SetTrue))
.group(ArgGroup::new(<span class="string">"req_flags"</span>)
.args([<span class="string">"flag"</span>, <span class="string">"color"</span>])
.required(<span class="bool-val">true</span>))
.try_get_matches_from(<span class="macro">vec!</span>[<span class="string">"myprog"</span>]);
<span class="comment">// Because we didn't use any of the args in the group, it's an error
</span><span class="macro">assert!</span>(result.is_err());
<span class="kw">let </span>err = result.unwrap_err();
<span class="macro">assert_eq!</span>(err.kind(), ErrorKind::MissingRequiredArgument);</code></pre></div>
</div></details><details class="toggle method-toggle" open><summary><section id="method.requires" class="method"><a class="src rightside" href="../src/clap_builder/builder/arg_group.rs.html#368">source</a><h4 class="code-header">pub fn <a href="#method.requires" class="fn">requires</a>(self, id: impl <a class="trait" href="builder/trait.IntoResettable.html" title="trait clap::builder::IntoResettable">IntoResettable</a>&lt;<a class="struct" href="struct.Id.html" title="struct clap::Id">Id</a>&gt;) -&gt; <a class="struct" href="struct.ArgGroup.html" title="struct clap::ArgGroup">ArgGroup</a></h4></section></summary><div class="docblock"><p>Specify an argument or group that must be present when this group is.</p>
<p>This is not to be confused with a <a href="struct.ArgGroup.html#method.required" title="method clap::ArgGroup::required">required group</a>. Requirement rules function just like
<a href="struct.Arg.html#method.requires" title="method clap::Arg::requires">argument requirement rules</a>, you can name other arguments or groups that must be present
when any one of the arguments from this group is used.</p>
<p><strong>NOTE:</strong> The name provided may be an argument or group name</p>
<h5 id="examples-7"><a class="doc-anchor" href="#examples-7">§</a>Examples</h5>
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">let </span>result = Command::new(<span class="string">"myprog"</span>)
.arg(Arg::new(<span class="string">"flag"</span>)
.short(<span class="string">'f'</span>)
.action(ArgAction::SetTrue))
.arg(Arg::new(<span class="string">"color"</span>)
.short(<span class="string">'c'</span>)
.action(ArgAction::SetTrue))
.arg(Arg::new(<span class="string">"debug"</span>)
.short(<span class="string">'d'</span>)
.action(ArgAction::SetTrue))
.group(ArgGroup::new(<span class="string">"req_flags"</span>)
.args([<span class="string">"flag"</span>, <span class="string">"color"</span>])
.requires(<span class="string">"debug"</span>))
.try_get_matches_from(<span class="macro">vec!</span>[<span class="string">"myprog"</span>, <span class="string">"-c"</span>]);
<span class="comment">// because we used an arg from the group, and the group requires "-d" to be used, it's an
// error
</span><span class="macro">assert!</span>(result.is_err());
<span class="kw">let </span>err = result.unwrap_err();
<span class="macro">assert_eq!</span>(err.kind(), ErrorKind::MissingRequiredArgument);</code></pre></div>
</div></details><details class="toggle method-toggle" open><summary><section id="method.requires_all" class="method"><a class="src rightside" href="../src/clap_builder/builder/arg_group.rs.html#416">source</a><h4 class="code-header">pub fn <a href="#method.requires_all" class="fn">requires_all</a>(
self,
ns: impl <a class="trait" href="https://doc.rust-lang.org/1.80.0/core/iter/traits/collect/trait.IntoIterator.html" title="trait core::iter::traits::collect::IntoIterator">IntoIterator</a>&lt;Item = impl <a class="trait" href="https://doc.rust-lang.org/1.80.0/core/convert/trait.Into.html" title="trait core::convert::Into">Into</a>&lt;<a class="struct" href="struct.Id.html" title="struct clap::Id">Id</a>&gt;&gt;,
) -&gt; <a class="struct" href="struct.ArgGroup.html" title="struct clap::ArgGroup">ArgGroup</a></h4></section></summary><div class="docblock"><p>Specify arguments or groups that must be present when this group is.</p>
<p>This is not to be confused with a <a href="struct.ArgGroup.html#method.required" title="method clap::ArgGroup::required">required group</a>. Requirement rules function just like
<a href="struct.Arg.html#method.requires_ifs" title="method clap::Arg::requires_ifs">argument requirement rules</a>, you can name other arguments or groups that must be present
when one of the arguments from this group is used.</p>
<p><strong>NOTE:</strong> The names provided may be an argument or group name</p>
<h5 id="examples-8"><a class="doc-anchor" href="#examples-8">§</a>Examples</h5>
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">let </span>result = Command::new(<span class="string">"myprog"</span>)
.arg(Arg::new(<span class="string">"flag"</span>)
.short(<span class="string">'f'</span>)
.action(ArgAction::SetTrue))
.arg(Arg::new(<span class="string">"color"</span>)
.short(<span class="string">'c'</span>)
.action(ArgAction::SetTrue))
.arg(Arg::new(<span class="string">"debug"</span>)
.short(<span class="string">'d'</span>)
.action(ArgAction::SetTrue))
.arg(Arg::new(<span class="string">"verb"</span>)
.short(<span class="string">'v'</span>)
.action(ArgAction::SetTrue))
.group(ArgGroup::new(<span class="string">"req_flags"</span>)
.args([<span class="string">"flag"</span>, <span class="string">"color"</span>])
.requires_all([<span class="string">"debug"</span>, <span class="string">"verb"</span>]))
.try_get_matches_from(<span class="macro">vec!</span>[<span class="string">"myprog"</span>, <span class="string">"-c"</span>, <span class="string">"-d"</span>]);
<span class="comment">// because we used an arg from the group, and the group requires "-d" and "-v" to be used,
// yet we only used "-d" it's an error
</span><span class="macro">assert!</span>(result.is_err());
<span class="kw">let </span>err = result.unwrap_err();
<span class="macro">assert_eq!</span>(err.kind(), ErrorKind::MissingRequiredArgument);</code></pre></div>
</div></details><details class="toggle method-toggle" open><summary><section id="method.conflicts_with" class="method"><a class="src rightside" href="../src/clap_builder/builder/arg_group.rs.html#457">source</a><h4 class="code-header">pub fn <a href="#method.conflicts_with" class="fn">conflicts_with</a>(self, id: impl <a class="trait" href="builder/trait.IntoResettable.html" title="trait clap::builder::IntoResettable">IntoResettable</a>&lt;<a class="struct" href="struct.Id.html" title="struct clap::Id">Id</a>&gt;) -&gt; <a class="struct" href="struct.ArgGroup.html" title="struct clap::ArgGroup">ArgGroup</a></h4></section></summary><div class="docblock"><p>Specify an argument or group that must <strong>not</strong> be present when this group is.</p>
<p>Exclusion (aka conflict) rules function just like <a href="struct.Arg.html#method.conflicts_with" title="method clap::Arg::conflicts_with">argument exclusion rules</a>, you can name
other arguments or groups that must <em>not</em> be present when one of the arguments from this
group are used.</p>
<p><strong>NOTE:</strong> The name provided may be an argument, or group name</p>
<h5 id="examples-9"><a class="doc-anchor" href="#examples-9">§</a>Examples</h5>
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">let </span>result = Command::new(<span class="string">"myprog"</span>)
.arg(Arg::new(<span class="string">"flag"</span>)
.short(<span class="string">'f'</span>)
.action(ArgAction::SetTrue))
.arg(Arg::new(<span class="string">"color"</span>)
.short(<span class="string">'c'</span>)
.action(ArgAction::SetTrue))
.arg(Arg::new(<span class="string">"debug"</span>)
.short(<span class="string">'d'</span>)
.action(ArgAction::SetTrue))
.group(ArgGroup::new(<span class="string">"req_flags"</span>)
.args([<span class="string">"flag"</span>, <span class="string">"color"</span>])
.conflicts_with(<span class="string">"debug"</span>))
.try_get_matches_from(<span class="macro">vec!</span>[<span class="string">"myprog"</span>, <span class="string">"-c"</span>, <span class="string">"-d"</span>]);
<span class="comment">// because we used an arg from the group, and the group conflicts with "-d", it's an error
</span><span class="macro">assert!</span>(result.is_err());
<span class="kw">let </span>err = result.unwrap_err();
<span class="macro">assert_eq!</span>(err.kind(), ErrorKind::ArgumentConflict);</code></pre></div>
</div></details><details class="toggle method-toggle" open><summary><section id="method.conflicts_with_all" class="method"><a class="src rightside" href="../src/clap_builder/builder/arg_group.rs.html#504">source</a><h4 class="code-header">pub fn <a href="#method.conflicts_with_all" class="fn">conflicts_with_all</a>(
self,
ns: impl <a class="trait" href="https://doc.rust-lang.org/1.80.0/core/iter/traits/collect/trait.IntoIterator.html" title="trait core::iter::traits::collect::IntoIterator">IntoIterator</a>&lt;Item = impl <a class="trait" href="https://doc.rust-lang.org/1.80.0/core/convert/trait.Into.html" title="trait core::convert::Into">Into</a>&lt;<a class="struct" href="struct.Id.html" title="struct clap::Id">Id</a>&gt;&gt;,
) -&gt; <a class="struct" href="struct.ArgGroup.html" title="struct clap::ArgGroup">ArgGroup</a></h4></section></summary><div class="docblock"><p>Specify arguments or groups that must <strong>not</strong> be present when this group is.</p>
<p>Exclusion rules function just like <a href="struct.Arg.html#method.conflicts_with_all" title="method clap::Arg::conflicts_with_all">argument exclusion rules</a>, you can name other arguments
or groups that must <em>not</em> be present when one of the arguments from this group are used.</p>
<p><strong>NOTE:</strong> The names provided may be an argument, or group name</p>
<h5 id="examples-10"><a class="doc-anchor" href="#examples-10">§</a>Examples</h5>
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">let </span>result = Command::new(<span class="string">"myprog"</span>)
.arg(Arg::new(<span class="string">"flag"</span>)
.short(<span class="string">'f'</span>)
.action(ArgAction::SetTrue))
.arg(Arg::new(<span class="string">"color"</span>)
.short(<span class="string">'c'</span>)
.action(ArgAction::SetTrue))
.arg(Arg::new(<span class="string">"debug"</span>)
.short(<span class="string">'d'</span>)
.action(ArgAction::SetTrue))
.arg(Arg::new(<span class="string">"verb"</span>)
.short(<span class="string">'v'</span>)
.action(ArgAction::SetTrue))
.group(ArgGroup::new(<span class="string">"req_flags"</span>)
.args([<span class="string">"flag"</span>, <span class="string">"color"</span>])
.conflicts_with_all([<span class="string">"debug"</span>, <span class="string">"verb"</span>]))
.try_get_matches_from(<span class="macro">vec!</span>[<span class="string">"myprog"</span>, <span class="string">"-c"</span>, <span class="string">"-v"</span>]);
<span class="comment">// because we used an arg from the group, and the group conflicts with either "-v" or "-d"
// it's an error
</span><span class="macro">assert!</span>(result.is_err());
<span class="kw">let </span>err = result.unwrap_err();
<span class="macro">assert_eq!</span>(err.kind(), ErrorKind::ArgumentConflict);</code></pre></div>
</div></details></div></details><details class="toggle implementors-toggle" open><summary><section id="impl-ArgGroup-1" class="impl"><a class="src rightside" href="../src/clap_builder/builder/arg_group.rs.html#513">source</a><a href="#impl-ArgGroup-1" class="anchor">§</a><h3 class="code-header">impl <a class="struct" href="struct.ArgGroup.html" title="struct clap::ArgGroup">ArgGroup</a></h3></section></summary><div class="docblock"><h4 id="reflection"><a class="doc-anchor" href="#reflection">§</a>Reflection</h4></div><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.get_id" class="method"><a class="src rightside" href="../src/clap_builder/builder/arg_group.rs.html#516">source</a><h4 class="code-header">pub fn <a href="#method.get_id" class="fn">get_id</a>(&amp;self) -&gt; &amp;<a class="struct" href="struct.Id.html" title="struct clap::Id">Id</a></h4></section></summary><div class="docblock"><p>Get the name of the group</p>
</div></details><details class="toggle method-toggle" open><summary><section id="method.is_required_set" class="method"><a class="src rightside" href="../src/clap_builder/builder/arg_group.rs.html#522">source</a><h4 class="code-header">pub fn <a href="#method.is_required_set" class="fn">is_required_set</a>(&amp;self) -&gt; <a class="primitive" href="https://doc.rust-lang.org/1.80.0/std/primitive.bool.html">bool</a></h4></section></summary><div class="docblock"><p>Reports whether <a href="struct.ArgGroup.html#method.required" title="method clap::ArgGroup::required"><code>ArgGroup::required</code></a> is set</p>
</div></details></div></details></div><h2 id="trait-implementations" class="section-header">Trait Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div id="trait-implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-Clone-for-ArgGroup" class="impl"><a class="src rightside" href="../src/clap_builder/builder/arg_group.rs.html#87">source</a><a href="#impl-Clone-for-ArgGroup" class="anchor">§</a><h3 class="code-header">impl <a class="trait" href="https://doc.rust-lang.org/1.80.0/core/clone/trait.Clone.html" title="trait core::clone::Clone">Clone</a> for <a class="struct" href="struct.ArgGroup.html" title="struct clap::ArgGroup">ArgGroup</a></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.clone" class="method trait-impl"><a class="src rightside" href="../src/clap_builder/builder/arg_group.rs.html#87">source</a><a href="#method.clone" class="anchor">§</a><h4 class="code-header">fn <a href="https://doc.rust-lang.org/1.80.0/core/clone/trait.Clone.html#tymethod.clone" class="fn">clone</a>(&amp;self) -&gt; <a class="struct" href="struct.ArgGroup.html" title="struct clap::ArgGroup">ArgGroup</a></h4></section></summary><div class='docblock'>Returns a copy of the value. <a href="https://doc.rust-lang.org/1.80.0/core/clone/trait.Clone.html#tymethod.clone">Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.clone_from" class="method trait-impl"><span class="rightside"><span class="since" title="Stable since Rust version 1.0.0">1.0.0</span> · <a class="src" href="https://doc.rust-lang.org/1.80.0/src/core/clone.rs.html#169">source</a></span><a href="#method.clone_from" class="anchor">§</a><h4 class="code-header">fn <a href="https://doc.rust-lang.org/1.80.0/core/clone/trait.Clone.html#method.clone_from" class="fn">clone_from</a>(&amp;mut self, source: <a class="primitive" href="https://doc.rust-lang.org/1.80.0/std/primitive.reference.html">&amp;Self</a>)</h4></section></summary><div class='docblock'>Performs copy-assignment from <code>source</code>. <a href="https://doc.rust-lang.org/1.80.0/core/clone/trait.Clone.html#method.clone_from">Read more</a></div></details></div></details><details class="toggle implementors-toggle" open><summary><section id="impl-Debug-for-ArgGroup" class="impl"><a class="src rightside" href="../src/clap_builder/builder/arg_group.rs.html#87">source</a><a href="#impl-Debug-for-ArgGroup" class="anchor">§</a><h3 class="code-header">impl <a class="trait" href="https://doc.rust-lang.org/1.80.0/core/fmt/trait.Debug.html" title="trait core::fmt::Debug">Debug</a> for <a class="struct" href="struct.ArgGroup.html" title="struct clap::ArgGroup">ArgGroup</a></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.fmt" class="method trait-impl"><a class="src rightside" href="../src/clap_builder/builder/arg_group.rs.html#87">source</a><a href="#method.fmt" class="anchor">§</a><h4 class="code-header">fn <a href="https://doc.rust-lang.org/1.80.0/core/fmt/trait.Debug.html#tymethod.fmt" class="fn">fmt</a>(&amp;self, f: &amp;mut <a class="struct" href="https://doc.rust-lang.org/1.80.0/core/fmt/struct.Formatter.html" title="struct core::fmt::Formatter">Formatter</a>&lt;'_&gt;) -&gt; <a class="enum" href="https://doc.rust-lang.org/1.80.0/core/result/enum.Result.html" title="enum core::result::Result">Result</a>&lt;<a class="primitive" href="https://doc.rust-lang.org/1.80.0/std/primitive.unit.html">()</a>, <a class="struct" href="https://doc.rust-lang.org/1.80.0/core/fmt/struct.Error.html" title="struct core::fmt::Error">Error</a>&gt;</h4></section></summary><div class='docblock'>Formats the value using the given formatter. <a href="https://doc.rust-lang.org/1.80.0/core/fmt/trait.Debug.html#tymethod.fmt">Read more</a></div></details></div></details><details class="toggle implementors-toggle" open><summary><section id="impl-Default-for-ArgGroup" class="impl"><a class="src rightside" href="../src/clap_builder/builder/arg_group.rs.html#87">source</a><a href="#impl-Default-for-ArgGroup" class="anchor">§</a><h3 class="code-header">impl <a class="trait" href="https://doc.rust-lang.org/1.80.0/core/default/trait.Default.html" title="trait core::default::Default">Default</a> for <a class="struct" href="struct.ArgGroup.html" title="struct clap::ArgGroup">ArgGroup</a></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.default" class="method trait-impl"><a class="src rightside" href="../src/clap_builder/builder/arg_group.rs.html#87">source</a><a href="#method.default" class="anchor">§</a><h4 class="code-header">fn <a href="https://doc.rust-lang.org/1.80.0/core/default/trait.Default.html#tymethod.default" class="fn">default</a>() -&gt; <a class="struct" href="struct.ArgGroup.html" title="struct clap::ArgGroup">ArgGroup</a></h4></section></summary><div class='docblock'>Returns the “default value” for a type. <a href="https://doc.rust-lang.org/1.80.0/core/default/trait.Default.html#tymethod.default">Read more</a></div></details></div></details><details class="toggle implementors-toggle" open><summary><section id="impl-From%3C%26ArgGroup%3E-for-ArgGroup" class="impl"><a class="src rightside" href="../src/clap_builder/builder/arg_group.rs.html#527">source</a><a href="#impl-From%3C%26ArgGroup%3E-for-ArgGroup" class="anchor">§</a><h3 class="code-header">impl <a class="trait" href="https://doc.rust-lang.org/1.80.0/core/convert/trait.From.html" title="trait core::convert::From">From</a>&lt;&amp;<a class="struct" href="struct.ArgGroup.html" title="struct clap::ArgGroup">ArgGroup</a>&gt; for <a class="struct" href="struct.ArgGroup.html" title="struct clap::ArgGroup">ArgGroup</a></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.from" class="method trait-impl"><a class="src rightside" href="../src/clap_builder/builder/arg_group.rs.html#528">source</a><a href="#method.from" class="anchor">§</a><h4 class="code-header">fn <a href="https://doc.rust-lang.org/1.80.0/core/convert/trait.From.html#tymethod.from" class="fn">from</a>(g: &amp;<a class="struct" href="struct.ArgGroup.html" title="struct clap::ArgGroup">ArgGroup</a>) -&gt; <a class="struct" href="struct.ArgGroup.html" title="struct clap::ArgGroup">ArgGroup</a></h4></section></summary><div class='docblock'>Converts to this type from the input type.</div></details></div></details><details class="toggle implementors-toggle" open><summary><section id="impl-PartialEq-for-ArgGroup" class="impl"><a class="src rightside" href="../src/clap_builder/builder/arg_group.rs.html#87">source</a><a href="#impl-PartialEq-for-ArgGroup" class="anchor">§</a><h3 class="code-header">impl <a class="trait" href="https://doc.rust-lang.org/1.80.0/core/cmp/trait.PartialEq.html" title="trait core::cmp::PartialEq">PartialEq</a> for <a class="struct" href="struct.ArgGroup.html" title="struct clap::ArgGroup">ArgGroup</a></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.eq" class="method trait-impl"><a class="src rightside" href="../src/clap_builder/builder/arg_group.rs.html#87">source</a><a href="#method.eq" class="anchor">§</a><h4 class="code-header">fn <a href="https://doc.rust-lang.org/1.80.0/core/cmp/trait.PartialEq.html#tymethod.eq" class="fn">eq</a>(&amp;self, other: &amp;<a class="struct" href="struct.ArgGroup.html" title="struct clap::ArgGroup">ArgGroup</a>) -&gt; <a class="primitive" href="https://doc.rust-lang.org/1.80.0/std/primitive.bool.html">bool</a></h4></section></summary><div class='docblock'>This method tests for <code>self</code> and <code>other</code> values to be equal, and is used
by <code>==</code>.</div></details><details class="toggle method-toggle" open><summary><section id="method.ne" class="method trait-impl"><span class="rightside"><span class="since" title="Stable since Rust version 1.0.0">1.0.0</span> · <a class="src" href="https://doc.rust-lang.org/1.80.0/src/core/cmp.rs.html#263">source</a></span><a href="#method.ne" class="anchor">§</a><h4 class="code-header">fn <a href="https://doc.rust-lang.org/1.80.0/core/cmp/trait.PartialEq.html#method.ne" class="fn">ne</a>(&amp;self, other: <a class="primitive" href="https://doc.rust-lang.org/1.80.0/std/primitive.reference.html">&amp;Rhs</a>) -&gt; <a class="primitive" href="https://doc.rust-lang.org/1.80.0/std/primitive.bool.html">bool</a></h4></section></summary><div class='docblock'>This method tests for <code>!=</code>. The default implementation is almost always
sufficient, and should not be overridden without very good reason.</div></details></div></details><section id="impl-Eq-for-ArgGroup" class="impl"><a class="src rightside" href="../src/clap_builder/builder/arg_group.rs.html#87">source</a><a href="#impl-Eq-for-ArgGroup" class="anchor">§</a><h3 class="code-header">impl <a class="trait" href="https://doc.rust-lang.org/1.80.0/core/cmp/trait.Eq.html" title="trait core::cmp::Eq">Eq</a> for <a class="struct" href="struct.ArgGroup.html" title="struct clap::ArgGroup">ArgGroup</a></h3></section><section id="impl-StructuralPartialEq-for-ArgGroup" class="impl"><a class="src rightside" href="../src/clap_builder/builder/arg_group.rs.html#87">source</a><a href="#impl-StructuralPartialEq-for-ArgGroup" class="anchor">§</a><h3 class="code-header">impl <a class="trait" href="https://doc.rust-lang.org/1.80.0/core/marker/trait.StructuralPartialEq.html" title="trait core::marker::StructuralPartialEq">StructuralPartialEq</a> for <a class="struct" href="struct.ArgGroup.html" title="struct clap::ArgGroup">ArgGroup</a></h3></section></div><h2 id="synthetic-implementations" class="section-header">Auto Trait Implementations<a href="#synthetic-implementations" class="anchor">§</a></h2><div id="synthetic-implementations-list"><section id="impl-Freeze-for-ArgGroup" class="impl"><a href="#impl-Freeze-for-ArgGroup" class="anchor">§</a><h3 class="code-header">impl <a class="trait" href="https://doc.rust-lang.org/1.80.0/core/marker/trait.Freeze.html" title="trait core::marker::Freeze">Freeze</a> for <a class="struct" href="struct.ArgGroup.html" title="struct clap::ArgGroup">ArgGroup</a></h3></section><section id="impl-RefUnwindSafe-for-ArgGroup" class="impl"><a href="#impl-RefUnwindSafe-for-ArgGroup" class="anchor">§</a><h3 class="code-header">impl <a class="trait" href="https://doc.rust-lang.org/1.80.0/core/panic/unwind_safe/trait.RefUnwindSafe.html" title="trait core::panic::unwind_safe::RefUnwindSafe">RefUnwindSafe</a> for <a class="struct" href="struct.ArgGroup.html" title="struct clap::ArgGroup">ArgGroup</a></h3></section><section id="impl-Send-for-ArgGroup" class="impl"><a href="#impl-Send-for-ArgGroup" class="anchor">§</a><h3 class="code-header">impl <a class="trait" href="https://doc.rust-lang.org/1.80.0/core/marker/trait.Send.html" title="trait core::marker::Send">Send</a> for <a class="struct" href="struct.ArgGroup.html" title="struct clap::ArgGroup">ArgGroup</a></h3></section><section id="impl-Sync-for-ArgGroup" class="impl"><a href="#impl-Sync-for-ArgGroup" class="anchor">§</a><h3 class="code-header">impl <a class="trait" href="https://doc.rust-lang.org/1.80.0/core/marker/trait.Sync.html" title="trait core::marker::Sync">Sync</a> for <a class="struct" href="struct.ArgGroup.html" title="struct clap::ArgGroup">ArgGroup</a></h3></section><section id="impl-Unpin-for-ArgGroup" class="impl"><a href="#impl-Unpin-for-ArgGroup" class="anchor">§</a><h3 class="code-header">impl <a class="trait" href="https://doc.rust-lang.org/1.80.0/core/marker/trait.Unpin.html" title="trait core::marker::Unpin">Unpin</a> for <a class="struct" href="struct.ArgGroup.html" title="struct clap::ArgGroup">ArgGroup</a></h3></section><section id="impl-UnwindSafe-for-ArgGroup" class="impl"><a href="#impl-UnwindSafe-for-ArgGroup" class="anchor">§</a><h3 class="code-header">impl <a class="trait" href="https://doc.rust-lang.org/1.80.0/core/panic/unwind_safe/trait.UnwindSafe.html" title="trait core::panic::unwind_safe::UnwindSafe">UnwindSafe</a> for <a class="struct" href="struct.ArgGroup.html" title="struct clap::ArgGroup">ArgGroup</a></h3></section></div><h2 id="blanket-implementations" class="section-header">Blanket Implementations<a href="#blanket-implementations" class="anchor">§</a></h2><div id="blanket-implementations-list"><details class="toggle implementors-toggle"><summary><section id="impl-Any-for-T" class="impl"><a class="src rightside" href="https://doc.rust-lang.org/1.80.0/src/core/any.rs.html#140">source</a><a href="#impl-Any-for-T" class="anchor">§</a><h3 class="code-header">impl&lt;T&gt; <a class="trait" href="https://doc.rust-lang.org/1.80.0/core/any/trait.Any.html" title="trait core::any::Any">Any</a> for T<div class="where">where
T: 'static + ?<a class="trait" href="https://doc.rust-lang.org/1.80.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.type_id" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/1.80.0/src/core/any.rs.html#141">source</a><a href="#method.type_id" class="anchor">§</a><h4 class="code-header">fn <a href="https://doc.rust-lang.org/1.80.0/core/any/trait.Any.html#tymethod.type_id" class="fn">type_id</a>(&amp;self) -&gt; <a class="struct" href="https://doc.rust-lang.org/1.80.0/core/any/struct.TypeId.html" title="struct core::any::TypeId">TypeId</a></h4></section></summary><div class='docblock'>Gets the <code>TypeId</code> of <code>self</code>. <a href="https://doc.rust-lang.org/1.80.0/core/any/trait.Any.html#tymethod.type_id">Read more</a></div></details></div></details><details class="toggle implementors-toggle"><summary><section id="impl-Borrow%3CT%3E-for-T" class="impl"><a class="src rightside" href="https://doc.rust-lang.org/1.80.0/src/core/borrow.rs.html#208">source</a><a href="#impl-Borrow%3CT%3E-for-T" class="anchor">§</a><h3 class="code-header">impl&lt;T&gt; <a class="trait" href="https://doc.rust-lang.org/1.80.0/core/borrow/trait.Borrow.html" title="trait core::borrow::Borrow">Borrow</a>&lt;T&gt; for T<div class="where">where
T: ?<a class="trait" href="https://doc.rust-lang.org/1.80.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/1.80.0/src/core/borrow.rs.html#210">source</a><a href="#method.borrow" class="anchor">§</a><h4 class="code-header">fn <a href="https://doc.rust-lang.org/1.80.0/core/borrow/trait.Borrow.html#tymethod.borrow" class="fn">borrow</a>(&amp;self) -&gt; <a class="primitive" href="https://doc.rust-lang.org/1.80.0/std/primitive.reference.html">&amp;T</a></h4></section></summary><div class='docblock'>Immutably borrows from an owned value. <a href="https://doc.rust-lang.org/1.80.0/core/borrow/trait.Borrow.html#tymethod.borrow">Read more</a></div></details></div></details><details class="toggle implementors-toggle"><summary><section id="impl-BorrowMut%3CT%3E-for-T" class="impl"><a class="src rightside" href="https://doc.rust-lang.org/1.80.0/src/core/borrow.rs.html#216">source</a><a href="#impl-BorrowMut%3CT%3E-for-T" class="anchor">§</a><h3 class="code-header">impl&lt;T&gt; <a class="trait" href="https://doc.rust-lang.org/1.80.0/core/borrow/trait.BorrowMut.html" title="trait core::borrow::BorrowMut">BorrowMut</a>&lt;T&gt; for T<div class="where">where
T: ?<a class="trait" href="https://doc.rust-lang.org/1.80.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow_mut" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/1.80.0/src/core/borrow.rs.html#217">source</a><a href="#method.borrow_mut" class="anchor">§</a><h4 class="code-header">fn <a href="https://doc.rust-lang.org/1.80.0/core/borrow/trait.BorrowMut.html#tymethod.borrow_mut" class="fn">borrow_mut</a>(&amp;mut self) -&gt; <a class="primitive" href="https://doc.rust-lang.org/1.80.0/std/primitive.reference.html">&amp;mut T</a></h4></section></summary><div class='docblock'>Mutably borrows from an owned value. <a href="https://doc.rust-lang.org/1.80.0/core/borrow/trait.BorrowMut.html#tymethod.borrow_mut">Read more</a></div></details></div></details><details class="toggle implementors-toggle"><summary><section id="impl-From%3CT%3E-for-T" class="impl"><a class="src rightside" href="https://doc.rust-lang.org/1.80.0/src/core/convert/mod.rs.html#765">source</a><a href="#impl-From%3CT%3E-for-T" class="anchor">§</a><h3 class="code-header">impl&lt;T&gt; <a class="trait" href="https://doc.rust-lang.org/1.80.0/core/convert/trait.From.html" title="trait core::convert::From">From</a>&lt;T&gt; for T</h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.from-1" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/1.80.0/src/core/convert/mod.rs.html#768">source</a><a href="#method.from-1" class="anchor">§</a><h4 class="code-header">fn <a href="https://doc.rust-lang.org/1.80.0/core/convert/trait.From.html#tymethod.from" class="fn">from</a>(t: T) -&gt; T</h4></section></summary><div class="docblock"><p>Returns the argument unchanged.</p>
</div></details></div></details><details class="toggle implementors-toggle"><summary><section id="impl-Into%3CU%3E-for-T" class="impl"><a class="src rightside" href="https://doc.rust-lang.org/1.80.0/src/core/convert/mod.rs.html#748-750">source</a><a href="#impl-Into%3CU%3E-for-T" class="anchor">§</a><h3 class="code-header">impl&lt;T, U&gt; <a class="trait" href="https://doc.rust-lang.org/1.80.0/core/convert/trait.Into.html" title="trait core::convert::Into">Into</a>&lt;U&gt; for T<div class="where">where
U: <a class="trait" href="https://doc.rust-lang.org/1.80.0/core/convert/trait.From.html" title="trait core::convert::From">From</a>&lt;T&gt;,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.into" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/1.80.0/src/core/convert/mod.rs.html#758">source</a><a href="#method.into" class="anchor">§</a><h4 class="code-header">fn <a href="https://doc.rust-lang.org/1.80.0/core/convert/trait.Into.html#tymethod.into" class="fn">into</a>(self) -&gt; U</h4></section></summary><div class="docblock"><p>Calls <code>U::from(self)</code>.</p>
<p>That is, this conversion is whatever the implementation of
<code><a href="https://doc.rust-lang.org/1.80.0/core/convert/trait.From.html" title="trait core::convert::From">From</a>&lt;T&gt; for U</code> chooses to do.</p>
</div></details></div></details><details class="toggle implementors-toggle"><summary><section id="impl-ToOwned-for-T" class="impl"><a class="src rightside" href="https://doc.rust-lang.org/1.80.0/src/alloc/borrow.rs.html#83-85">source</a><a href="#impl-ToOwned-for-T" class="anchor">§</a><h3 class="code-header">impl&lt;T&gt; <a class="trait" href="https://doc.rust-lang.org/1.80.0/alloc/borrow/trait.ToOwned.html" title="trait alloc::borrow::ToOwned">ToOwned</a> for T<div class="where">where
T: <a class="trait" href="https://doc.rust-lang.org/1.80.0/core/clone/trait.Clone.html" title="trait core::clone::Clone">Clone</a>,</div></h3></section></summary><div class="impl-items"><details class="toggle" open><summary><section id="associatedtype.Owned" class="associatedtype trait-impl"><a href="#associatedtype.Owned" class="anchor">§</a><h4 class="code-header">type <a href="https://doc.rust-lang.org/1.80.0/alloc/borrow/trait.ToOwned.html#associatedtype.Owned" class="associatedtype">Owned</a> = T</h4></section></summary><div class='docblock'>The resulting type after obtaining ownership.</div></details><details class="toggle method-toggle" open><summary><section id="method.to_owned" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/1.80.0/src/alloc/borrow.rs.html#88">source</a><a href="#method.to_owned" class="anchor">§</a><h4 class="code-header">fn <a href="https://doc.rust-lang.org/1.80.0/alloc/borrow/trait.ToOwned.html#tymethod.to_owned" class="fn">to_owned</a>(&amp;self) -&gt; T</h4></section></summary><div class='docblock'>Creates owned data from borrowed data, usually by cloning. <a href="https://doc.rust-lang.org/1.80.0/alloc/borrow/trait.ToOwned.html#tymethod.to_owned">Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.clone_into" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/1.80.0/src/alloc/borrow.rs.html#92">source</a><a href="#method.clone_into" class="anchor">§</a><h4 class="code-header">fn <a href="https://doc.rust-lang.org/1.80.0/alloc/borrow/trait.ToOwned.html#method.clone_into" class="fn">clone_into</a>(&amp;self, target: <a class="primitive" href="https://doc.rust-lang.org/1.80.0/std/primitive.reference.html">&amp;mut T</a>)</h4></section></summary><div class='docblock'>Uses borrowed data to replace owned data, usually by cloning. <a href="https://doc.rust-lang.org/1.80.0/alloc/borrow/trait.ToOwned.html#method.clone_into">Read more</a></div></details></div></details><details class="toggle implementors-toggle"><summary><section id="impl-TryFrom%3CU%3E-for-T" class="impl"><a class="src rightside" href="https://doc.rust-lang.org/1.80.0/src/core/convert/mod.rs.html#805-807">source</a><a href="#impl-TryFrom%3CU%3E-for-T" class="anchor">§</a><h3 class="code-header">impl&lt;T, U&gt; <a class="trait" href="https://doc.rust-lang.org/1.80.0/core/convert/trait.TryFrom.html" title="trait core::convert::TryFrom">TryFrom</a>&lt;U&gt; for T<div class="where">where
U: <a class="trait" href="https://doc.rust-lang.org/1.80.0/core/convert/trait.Into.html" title="trait core::convert::Into">Into</a>&lt;T&gt;,</div></h3></section></summary><div class="impl-items"><details class="toggle" open><summary><section id="associatedtype.Error" class="associatedtype trait-impl"><a href="#associatedtype.Error" class="anchor">§</a><h4 class="code-header">type <a href="https://doc.rust-lang.org/1.80.0/core/convert/trait.TryFrom.html#associatedtype.Error" class="associatedtype">Error</a> = <a class="enum" href="https://doc.rust-lang.org/1.80.0/core/convert/enum.Infallible.html" title="enum core::convert::Infallible">Infallible</a></h4></section></summary><div class='docblock'>The type returned in the event of a conversion error.</div></details><details class="toggle method-toggle" open><summary><section id="method.try_from" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/1.80.0/src/core/convert/mod.rs.html#812">source</a><a href="#method.try_from" class="anchor">§</a><h4 class="code-header">fn <a href="https://doc.rust-lang.org/1.80.0/core/convert/trait.TryFrom.html#tymethod.try_from" class="fn">try_from</a>(value: U) -&gt; <a class="enum" href="https://doc.rust-lang.org/1.80.0/core/result/enum.Result.html" title="enum core::result::Result">Result</a>&lt;T, &lt;T as <a class="trait" href="https://doc.rust-lang.org/1.80.0/core/convert/trait.TryFrom.html" title="trait core::convert::TryFrom">TryFrom</a>&lt;U&gt;&gt;::<a class="associatedtype" href="https://doc.rust-lang.org/1.80.0/core/convert/trait.TryFrom.html#associatedtype.Error" title="type core::convert::TryFrom::Error">Error</a>&gt;</h4></section></summary><div class='docblock'>Performs the conversion.</div></details></div></details><details class="toggle implementors-toggle"><summary><section id="impl-TryInto%3CU%3E-for-T" class="impl"><a class="src rightside" href="https://doc.rust-lang.org/1.80.0/src/core/convert/mod.rs.html#790-792">source</a><a href="#impl-TryInto%3CU%3E-for-T" class="anchor">§</a><h3 class="code-header">impl&lt;T, U&gt; <a class="trait" href="https://doc.rust-lang.org/1.80.0/core/convert/trait.TryInto.html" title="trait core::convert::TryInto">TryInto</a>&lt;U&gt; for T<div class="where">where
U: <a class="trait" href="https://doc.rust-lang.org/1.80.0/core/convert/trait.TryFrom.html" title="trait core::convert::TryFrom">TryFrom</a>&lt;T&gt;,</div></h3></section></summary><div class="impl-items"><details class="toggle" open><summary><section id="associatedtype.Error-1" class="associatedtype trait-impl"><a href="#associatedtype.Error-1" class="anchor">§</a><h4 class="code-header">type <a href="https://doc.rust-lang.org/1.80.0/core/convert/trait.TryInto.html#associatedtype.Error" class="associatedtype">Error</a> = &lt;U as <a class="trait" href="https://doc.rust-lang.org/1.80.0/core/convert/trait.TryFrom.html" title="trait core::convert::TryFrom">TryFrom</a>&lt;T&gt;&gt;::<a class="associatedtype" href="https://doc.rust-lang.org/1.80.0/core/convert/trait.TryFrom.html#associatedtype.Error" title="type core::convert::TryFrom::Error">Error</a></h4></section></summary><div class='docblock'>The type returned in the event of a conversion error.</div></details><details class="toggle method-toggle" open><summary><section id="method.try_into" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/1.80.0/src/core/convert/mod.rs.html#797">source</a><a href="#method.try_into" class="anchor">§</a><h4 class="code-header">fn <a href="https://doc.rust-lang.org/1.80.0/core/convert/trait.TryInto.html#tymethod.try_into" class="fn">try_into</a>(self) -&gt; <a class="enum" href="https://doc.rust-lang.org/1.80.0/core/result/enum.Result.html" title="enum core::result::Result">Result</a>&lt;U, &lt;U as <a class="trait" href="https://doc.rust-lang.org/1.80.0/core/convert/trait.TryFrom.html" title="trait core::convert::TryFrom">TryFrom</a>&lt;T&gt;&gt;::<a class="associatedtype" href="https://doc.rust-lang.org/1.80.0/core/convert/trait.TryFrom.html#associatedtype.Error" title="type core::convert::TryFrom::Error">Error</a>&gt;</h4></section></summary><div class='docblock'>Performs the conversion.</div></details></div></details></div></section></div></main></body></html>