Auto Generated Documentation

This commit is contained in:
github-actions[bot]
2021-03-15 22:13:44 +00:00
parent b11f2a46f9
commit 7528fbbc3d
2102 changed files with 13789 additions and 4892 deletions
+6
View File
@@ -0,0 +1,6 @@
<!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="List of all items in this crate"><meta name="keywords" content="rust, rustlang, rust-lang"><title>List of all items in this crate</title><link rel="stylesheet" type="text/css" href="../normalize.css"><link rel="stylesheet" type="text/css" href="../rustdoc.css" id="mainThemeStyle"><link rel="stylesheet" type="text/css" href="../light.css" id="themeStyle"><link rel="stylesheet" type="text/css" href="../dark.css" disabled ><link rel="stylesheet" type="text/css" href="../ayu.css" disabled ><script id="default-settings"></script><script src="../storage.js"></script><noscript><link rel="stylesheet" href="../noscript.css"></noscript><link rel="icon" type="image/svg+xml" href="../favicon.svg">
<link rel="alternate icon" type="image/png" href="../favicon-16x16.png">
<link rel="alternate icon" type="image/png" href="../favicon-32x32.png"><style type="text/css">#crate-search{background-image:url("../down-arrow.svg");}</style></head><body class="rustdoc mod"><!--[if lte IE 8]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><nav class="sidebar"><div class="sidebar-menu">&#9776;</div><a href='../synom/index.html'><div class='logo-container rust-logo'><img src='../rust-logo.png' alt='logo'></div></a><p class="location">Crate synom</p><div class="block version"><p>Version 0.11.3</p></div><a id="all-types" href="index.html"><p>Back to index</p></a></nav><div class="theme-picker"><button id="theme-picker" aria-label="Pick another theme!" aria-haspopup="menu"><img src="../brush.svg" width="18" alt="Pick another theme!"></button><div id="theme-choices" role="menu"></div></div><script src="../theme.js"></script><nav class="sub"><form class="search-form"><div class="search-container"><div><select id="crate-search"><option value="All crates">All crates</option></select><input class="search-input" name="search" disabled autocomplete="off" spellcheck="false" placeholder="Click or press S to search, ? for more options…" type="search"></div><button type="button" class="help-button">?</button>
<a id="settings-menu" href="../settings.html"><img src="../wheel.svg" width="18" alt="Change settings"></a></div></form></nav><section id="main" class="content"><h1 class="fqn"><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">&#x2212;</span>]</a></span>
</span>
<span class="in-band">List of all items</span></h1><h3 id="Enums">Enums</h3><ul class="enums docblock"><li><a href="enum.IResult.html">IResult</a></li></ul><h3 id="Macros">Macros</h3><ul class="macros docblock"><li><a href="macro.alt.html">alt</a></li><li><a href="macro.call.html">call</a></li><li><a href="macro.cond.html">cond</a></li><li><a href="macro.cond_reduce.html">cond_reduce</a></li><li><a href="macro.delimited.html">delimited</a></li><li><a href="macro.do_parse.html">do_parse</a></li><li><a href="macro.epsilon.html">epsilon</a></li><li><a href="macro.keyword.html">keyword</a></li><li><a href="macro.many0.html">many0</a></li><li><a href="macro.map.html">map</a></li><li><a href="macro.named.html">named</a></li><li><a href="macro.not.html">not</a></li><li><a href="macro.opt_vec.html">opt_vec</a></li><li><a href="macro.option.html">option</a></li><li><a href="macro.peek.html">peek</a></li><li><a href="macro.preceded.html">preceded</a></li><li><a href="macro.punct.html">punct</a></li><li><a href="macro.separated_list.html">separated_list</a></li><li><a href="macro.separated_nonempty_list.html">separated_nonempty_list</a></li><li><a href="macro.switch.html">switch</a></li><li><a href="macro.tag.html">tag</a></li><li><a href="macro.take_until.html">take_until</a></li><li><a href="macro.terminated.html">terminated</a></li><li><a href="macro.terminated_list.html">terminated_list</a></li><li><a href="macro.tuple.html">tuple</a></li><li><a href="macro.value.html">value</a></li></ul></section><section id="search" class="content hidden"></section><section class="footer"></section><script>window.rootPath = "../";window.currentCrate = "synom";</script><script src="../main.js"></script><script defer src="../search-index.js"></script></body></html>
File diff suppressed because one or more lines are too long
+62
View File
@@ -0,0 +1,62 @@
<!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 `synom` crate."><meta name="keywords" content="rust, rustlang, rust-lang, synom"><title>synom - Rust</title><link rel="stylesheet" type="text/css" href="../normalize.css"><link rel="stylesheet" type="text/css" href="../rustdoc.css" id="mainThemeStyle"><link rel="stylesheet" type="text/css" href="../light.css" id="themeStyle"><link rel="stylesheet" type="text/css" href="../dark.css" disabled ><link rel="stylesheet" type="text/css" href="../ayu.css" disabled ><script id="default-settings"></script><script src="../storage.js"></script><noscript><link rel="stylesheet" href="../noscript.css"></noscript><link rel="icon" type="image/svg+xml" href="../favicon.svg">
<link rel="alternate icon" type="image/png" href="../favicon-16x16.png">
<link rel="alternate icon" type="image/png" href="../favicon-32x32.png"><style type="text/css">#crate-search{background-image:url("../down-arrow.svg");}</style></head><body class="rustdoc mod"><!--[if lte IE 8]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><nav class="sidebar"><div class="sidebar-menu">&#9776;</div><a href='../synom/index.html'><div class='logo-container rust-logo'><img src='../rust-logo.png' alt='logo'></div></a><p class="location">Crate synom</p><div class="block version"><p>Version 0.11.3</p></div><div class="sidebar-elems"><a id="all-types" href="all.html"><p>See all synom's items</p></a><div class="block items"><ul><li><a href="#macros">Macros</a></li><li><a href="#enums">Enums</a></li></ul></div><p class="location"></p><script>window.sidebarCurrent = {name: "synom", ty: "mod", relpath: "../"};</script></div></nav><div class="theme-picker"><button id="theme-picker" aria-label="Pick another theme!" aria-haspopup="menu"><img src="../brush.svg" width="18" alt="Pick another theme!"></button><div id="theme-choices" role="menu"></div></div><script src="../theme.js"></script><nav class="sub"><form class="search-form"><div class="search-container"><div><select id="crate-search"><option value="All crates">All crates</option></select><input class="search-input" name="search" disabled autocomplete="off" spellcheck="false" placeholder="Click or press S to search, ? for more options…" type="search"></div><button type="button" class="help-button">?</button>
<a id="settings-menu" href="../settings.html"><img src="../wheel.svg" width="18" alt="Change settings"></a></div></form></nav><section id="main" class="content"><h1 class="fqn"><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">&#x2212;</span>]</a></span><a class="srclink" href="../src/synom/lib.rs.html#1-1225" title="goto source code">[src]</a></span><span class="in-band">Crate <a class="mod" href="">synom</a></span></h1><div class="docblock"><p>Adapted from <a href="https://github.com/Geal/nom"><code>nom</code></a> by removing the
<code>IResult::Incomplete</code> variant which:</p>
<ul>
<li>we don't need,</li>
<li>is an unintuitive footgun when working with non-streaming use cases, and</li>
<li>more than doubles compilation time.</li>
</ul>
<h2 id="whitespace-handling-strategy" class="section-header"><a href="#whitespace-handling-strategy">Whitespace handling strategy</a></h2>
<p>As (sy)nom is a parser combinator library, the parsers provided here and
that you implement yourself are all made up of successively more primitive
parsers, eventually culminating in a small number of fundamental parsers
that are implemented in Rust. Among these are <code>punct!</code> and <code>keyword!</code>.</p>
<p>All synom fundamental parsers (those not combined out of other parsers)
should be written to skip over leading whitespace in their input. This way,
as long as every parser eventually boils down to some combination of
fundamental parsers, we get correct whitespace handling at all levels for
free.</p>
<p>For our use case, this strategy is a huge improvement in usability,
correctness, and compile time over nom's <code>ws!</code> strategy.</p>
</div><h2 id="macros" class="section-header"><a href="#macros">Macros</a></h2>
<table><tr class="module-item"><td><a class="macro" href="macro.alt.html" title="synom::alt macro">alt</a></td><td class="docblock-short"><p>Run a series of parsers, returning the result of the first one which
succeeds.</p>
</td></tr><tr class="module-item"><td><a class="macro" href="macro.call.html" title="synom::call macro">call</a></td><td class="docblock-short"><p>Invoke the given parser function with the passed in arguments.</p>
</td></tr><tr class="module-item"><td><a class="macro" href="macro.cond.html" title="synom::cond macro">cond</a></td><td class="docblock-short"><p>Conditionally execute the given parser.</p>
</td></tr><tr class="module-item"><td><a class="macro" href="macro.cond_reduce.html" title="synom::cond_reduce macro">cond_reduce</a></td><td class="docblock-short"><p>Fail to parse if condition is false, otherwise parse the given parser.</p>
</td></tr><tr class="module-item"><td><a class="macro" href="macro.delimited.html" title="synom::delimited macro">delimited</a></td><td class="docblock-short"><p>Value surrounded by a pair of delimiters.</p>
</td></tr><tr class="module-item"><td><a class="macro" href="macro.do_parse.html" title="synom::do_parse macro">do_parse</a></td><td class="docblock-short"><p>Run a series of parsers, one after another, optionally assigning the results
a name. Fail if any of the parsers fails.</p>
</td></tr><tr class="module-item"><td><a class="macro" href="macro.epsilon.html" title="synom::epsilon macro">epsilon</a></td><td class="docblock-short"><p>Parses nothing and always succeeds.</p>
</td></tr><tr class="module-item"><td><a class="macro" href="macro.keyword.html" title="synom::keyword macro">keyword</a></td><td class="docblock-short"><p>Parse a keyword like &quot;fn&quot; or &quot;struct&quot;.</p>
</td></tr><tr class="module-item"><td><a class="macro" href="macro.many0.html" title="synom::many0 macro">many0</a></td><td class="docblock-short"><p>Parse zero or more values using the given parser.</p>
</td></tr><tr class="module-item"><td><a class="macro" href="macro.map.html" title="synom::map macro">map</a></td><td class="docblock-short"><p>Transform the result of a parser by applying a function or closure.</p>
</td></tr><tr class="module-item"><td><a class="macro" href="macro.named.html" title="synom::named macro">named</a></td><td class="docblock-short"><p>Define a function from a parser combination.</p>
</td></tr><tr class="module-item"><td><a class="macro" href="macro.not.html" title="synom::not macro">not</a></td><td class="docblock-short"><p>Parses successfully if the given parser fails to parse. Does not consume any
of the input.</p>
</td></tr><tr class="module-item"><td><a class="macro" href="macro.opt_vec.html" title="synom::opt_vec macro">opt_vec</a></td><td class="docblock-short"><p>Turn a failed parse into an empty vector. The argument parser must itself
return a vector.</p>
</td></tr><tr class="module-item"><td><a class="macro" href="macro.option.html" title="synom::option macro">option</a></td><td class="docblock-short"><p>Turn a failed parse into <code>None</code> and a successful parse into <code>Some</code>.</p>
</td></tr><tr class="module-item"><td><a class="macro" href="macro.peek.html" title="synom::peek macro">peek</a></td><td class="docblock-short"><p>Parse a value without consuming it from the input data.</p>
</td></tr><tr class="module-item"><td><a class="macro" href="macro.preceded.html" title="synom::preceded macro">preceded</a></td><td class="docblock-short"><p>Parse two things, returning the value of the second.</p>
</td></tr><tr class="module-item"><td><a class="macro" href="macro.punct.html" title="synom::punct macro">punct</a></td><td class="docblock-short"><p>Parse a piece of punctuation like &quot;+&quot; or &quot;+=&quot;.</p>
</td></tr><tr class="module-item"><td><a class="macro" href="macro.separated_list.html" title="synom::separated_list macro">separated_list</a></td><td class="docblock-short"><p>Zero or more values separated by some separator. Does not allow a trailing
seperator.</p>
</td></tr><tr class="module-item"><td><a class="macro" href="macro.separated_nonempty_list.html" title="synom::separated_nonempty_list macro">separated_nonempty_list</a></td><td class="docblock-short"><p>One or more values separated by some separator. Does not allow a trailing
separator.</p>
</td></tr><tr class="module-item"><td><a class="macro" href="macro.switch.html" title="synom::switch macro">switch</a></td><td class="docblock-short"><p>Pattern-match the result of a parser to select which other parser to run.</p>
</td></tr><tr class="module-item"><td><a class="macro" href="macro.tag.html" title="synom::tag macro">tag</a></td><td class="docblock-short"><p>Parse the given string from exactly the current position in the input. You
almost always want <code>punct!</code> or <code>keyword!</code> instead of this.</p>
</td></tr><tr class="module-item"><td><a class="macro" href="macro.take_until.html" title="synom::take_until macro">take_until</a></td><td class="docblock-short"><p>Parse the part of the input up to but not including the given string. Fail
to parse if the given string is not present in the input.</p>
</td></tr><tr class="module-item"><td><a class="macro" href="macro.terminated.html" title="synom::terminated macro">terminated</a></td><td class="docblock-short"><p>Parse two things, returning the value of the first.</p>
</td></tr><tr class="module-item"><td><a class="macro" href="macro.terminated_list.html" title="synom::terminated_list macro">terminated_list</a></td><td class="docblock-short"><p>Zero or more values separated by some separator. A trailing separator is
allowed.</p>
</td></tr><tr class="module-item"><td><a class="macro" href="macro.tuple.html" title="synom::tuple macro">tuple</a></td><td class="docblock-short"><p>Run a series of parsers and produce all of the results in a tuple.</p>
</td></tr><tr class="module-item"><td><a class="macro" href="macro.value.html" title="synom::value macro">value</a></td><td class="docblock-short"><p>Produce the given value without parsing anything. Useful as an argument to
<code>switch!</code>.</p>
</td></tr></table><h2 id="enums" class="section-header"><a href="#enums">Enums</a></h2>
<table><tr class="module-item"><td><a class="enum" href="enum.IResult.html" title="synom::IResult enum">IResult</a></td><td class="docblock-short"><p>The result of a parser.</p>
</td></tr></table></section><section id="search" class="content hidden"></section><section class="footer"></section><script>window.rootPath = "../";window.currentCrate = "synom";</script><script src="../main.js"></script><script defer src="../search-index.js"></script></body></html>
+10
View File
@@ -0,0 +1,10 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta http-equiv="refresh" content="0;URL=macro.alt.html">
</head>
<body>
<p>Redirecting to <a href="macro.alt.html">macro.alt.html</a>...</p>
<script>location.replace("macro.alt.html" + location.search + location.hash);</script>
</body>
</html>
+47
View File
@@ -0,0 +1,47 @@
<!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 `alt` macro in crate `synom`."><meta name="keywords" content="rust, rustlang, rust-lang, alt"><title>synom::alt - Rust</title><link rel="stylesheet" type="text/css" href="../normalize.css"><link rel="stylesheet" type="text/css" href="../rustdoc.css" id="mainThemeStyle"><link rel="stylesheet" type="text/css" href="../light.css" id="themeStyle"><link rel="stylesheet" type="text/css" href="../dark.css" disabled ><link rel="stylesheet" type="text/css" href="../ayu.css" disabled ><script id="default-settings"></script><script src="../storage.js"></script><noscript><link rel="stylesheet" href="../noscript.css"></noscript><link rel="icon" type="image/svg+xml" href="../favicon.svg">
<link rel="alternate icon" type="image/png" href="../favicon-16x16.png">
<link rel="alternate icon" type="image/png" href="../favicon-32x32.png"><style type="text/css">#crate-search{background-image:url("../down-arrow.svg");}</style></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"><div class="sidebar-menu">&#9776;</div><a href='../synom/index.html'><div class='logo-container rust-logo'><img src='../rust-logo.png' alt='logo'></div></a><div class="sidebar-elems"><p class="location"><a href="index.html">synom</a></p><script>window.sidebarCurrent = {name: "alt", ty: "macro", relpath: ""};</script><script defer src="sidebar-items.js"></script></div></nav><div class="theme-picker"><button id="theme-picker" aria-label="Pick another theme!" aria-haspopup="menu"><img src="../brush.svg" width="18" alt="Pick another theme!"></button><div id="theme-choices" role="menu"></div></div><script src="../theme.js"></script><nav class="sub"><form class="search-form"><div class="search-container"><div><select id="crate-search"><option value="All crates">All crates</option></select><input class="search-input" name="search" disabled autocomplete="off" spellcheck="false" placeholder="Click or press S to search, ? for more options…" type="search"></div><button type="button" class="help-button">?</button>
<a id="settings-menu" href="../settings.html"><img src="../wheel.svg" width="18" alt="Change settings"></a></div></form></nav><section id="main" class="content"><h1 class="fqn"><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">&#x2212;</span>]</a></span><a class="srclink" href="../src/synom/lib.rs.html#1106-1147" title="goto source code">[src]</a></span><span class="in-band">Macro <a href="index.html">synom</a>::<wbr><a class="macro" href="">alt</a></span></h1><div class="docblock type-decl hidden-by-usual-hider"><div class="example-wrap"><pre class="rust macro">
<span class="macro">macro_rules</span><span class="macro">!</span> <span class="ident">alt</span> {
(<span class="macro-nonterminal">$</span><span class="macro-nonterminal">i</span>:<span class="ident">expr</span>, <span class="macro-nonterminal">$</span><span class="macro-nonterminal">e</span>:<span class="ident">ident</span> <span class="op">|</span> $(<span class="macro-nonterminal">$</span><span class="macro-nonterminal">rest</span>:<span class="ident">tt</span>)<span class="kw-2">*</span>) <span class="op">=</span><span class="op">&gt;</span> { ... };
(<span class="macro-nonterminal">$</span><span class="macro-nonterminal">i</span>:<span class="ident">expr</span>, <span class="macro-nonterminal">$</span><span class="macro-nonterminal">subrule</span>:<span class="macro">ident</span><span class="macro">!</span>( $(<span class="macro-nonterminal">$</span><span class="macro-nonterminal">args</span>:<span class="ident">tt</span>)<span class="kw-2">*</span>) <span class="op">|</span> $(<span class="macro-nonterminal">$</span><span class="macro-nonterminal">rest</span>:<span class="ident">tt</span>)<span class="kw-2">*</span>) <span class="op">=</span><span class="op">&gt;</span> { ... };
(<span class="macro-nonterminal">$</span><span class="macro-nonterminal">i</span>:<span class="ident">expr</span>, <span class="macro-nonterminal">$</span><span class="macro-nonterminal">subrule</span>:<span class="macro">ident</span><span class="macro">!</span>( $(<span class="macro-nonterminal">$</span><span class="macro-nonterminal">args</span>:<span class="ident">tt</span>)<span class="op">*</span> ) <span class="op">=</span><span class="op">&gt;</span> { <span class="macro-nonterminal">$</span><span class="macro-nonterminal">gen</span>:<span class="ident">expr</span> } <span class="op">|</span> $(<span class="macro-nonterminal">$</span><span class="macro-nonterminal">rest</span>:<span class="ident">tt</span>)<span class="op">+</span>) <span class="op">=</span><span class="op">&gt;</span> { ... };
(<span class="macro-nonterminal">$</span><span class="macro-nonterminal">i</span>:<span class="ident">expr</span>, <span class="macro-nonterminal">$</span><span class="macro-nonterminal">e</span>:<span class="ident">ident</span> <span class="op">=</span><span class="op">&gt;</span> { <span class="macro-nonterminal">$</span><span class="macro-nonterminal">gen</span>:<span class="ident">expr</span> } <span class="op">|</span> $(<span class="macro-nonterminal">$</span><span class="macro-nonterminal">rest</span>:<span class="ident">tt</span>)<span class="kw-2">*</span>) <span class="op">=</span><span class="op">&gt;</span> { ... };
(<span class="macro-nonterminal">$</span><span class="macro-nonterminal">i</span>:<span class="ident">expr</span>, <span class="macro-nonterminal">$</span><span class="macro-nonterminal">e</span>:<span class="ident">ident</span> <span class="op">=</span><span class="op">&gt;</span> { <span class="macro-nonterminal">$</span><span class="macro-nonterminal">gen</span>:<span class="ident">expr</span> }) <span class="op">=</span><span class="op">&gt;</span> { ... };
(<span class="macro-nonterminal">$</span><span class="macro-nonterminal">i</span>:<span class="ident">expr</span>, <span class="macro-nonterminal">$</span><span class="macro-nonterminal">subrule</span>:<span class="macro">ident</span><span class="macro">!</span>( $(<span class="macro-nonterminal">$</span><span class="macro-nonterminal">args</span>:<span class="ident">tt</span>)<span class="op">*</span> ) <span class="op">=</span><span class="op">&gt;</span> { <span class="macro-nonterminal">$</span><span class="macro-nonterminal">gen</span>:<span class="ident">expr</span> }) <span class="op">=</span><span class="op">&gt;</span> { ... };
(<span class="macro-nonterminal">$</span><span class="macro-nonterminal">i</span>:<span class="ident">expr</span>, <span class="macro-nonterminal">$</span><span class="macro-nonterminal">e</span>:<span class="ident">ident</span>) <span class="op">=</span><span class="op">&gt;</span> { ... };
(<span class="macro-nonterminal">$</span><span class="macro-nonterminal">i</span>:<span class="ident">expr</span>, <span class="macro-nonterminal">$</span><span class="macro-nonterminal">subrule</span>:<span class="macro">ident</span><span class="macro">!</span>( $(<span class="macro-nonterminal">$</span><span class="macro-nonterminal">args</span>:<span class="ident">tt</span>)<span class="kw-2">*</span>)) <span class="op">=</span><span class="op">&gt;</span> { ... };
}</pre></div>
</div><div class="docblock"><p>Run a series of parsers, returning the result of the first one which
succeeds.</p>
<p>Optionally allows for the result to be transformed.</p>
<ul>
<li><strong>Syntax:</strong> <code>alt!(THING1 | THING2 =&gt; { FUNC } | ...)</code></li>
<li><strong>Output:</strong> <code>T</code>, the return type of <code>THING1</code> and <code>FUNC(THING2)</code> and ...</li>
</ul>
<div class="example-wrap"><pre class="rust rust-example-rendered">
<span class="kw">extern</span> <span class="kw">crate</span> <span class="ident">syn</span>;
<span class="attribute">#[<span class="ident">macro_use</span>]</span> <span class="kw">extern</span> <span class="kw">crate</span> <span class="ident">synom</span>;
<span class="kw">use</span> <span class="ident">syn</span>::<span class="ident">Ident</span>;
<span class="kw">use</span> <span class="ident">syn</span>::<span class="ident">parse</span>::<span class="ident">ident</span>;
<span class="macro">named</span><span class="macro">!</span>(<span class="ident">ident_or_bang</span> <span class="op">-</span><span class="op">&gt;</span> <span class="ident">Ident</span>,
<span class="macro">alt</span><span class="macro">!</span>(
<span class="ident">ident</span>
<span class="op">|</span>
<span class="macro">punct</span><span class="macro">!</span>(<span class="string">&quot;!&quot;</span>) <span class="op">=</span><span class="op">&gt;</span> { <span class="op">|</span><span class="kw">_</span><span class="op">|</span> <span class="string">&quot;BANG&quot;</span>.<span class="ident">into</span>() }
)
);
<span class="kw">fn</span> <span class="ident">main</span>() {
<span class="kw">let</span> <span class="ident">input</span> <span class="op">=</span> <span class="string">&quot;foo&quot;</span>;
<span class="kw">let</span> <span class="ident">parsed</span> <span class="op">=</span> <span class="ident">ident_or_bang</span>(<span class="ident">input</span>).<span class="ident">expect</span>(<span class="string">&quot;identifier or `!`&quot;</span>);
<span class="macro">assert_eq</span><span class="macro">!</span>(<span class="ident">parsed</span>, <span class="string">&quot;foo&quot;</span>);
<span class="kw">let</span> <span class="ident">input</span> <span class="op">=</span> <span class="string">&quot;!&quot;</span>;
<span class="kw">let</span> <span class="ident">parsed</span> <span class="op">=</span> <span class="ident">ident_or_bang</span>(<span class="ident">input</span>).<span class="ident">expect</span>(<span class="string">&quot;identifier or `!`&quot;</span>);
<span class="macro">assert_eq</span><span class="macro">!</span>(<span class="ident">parsed</span>, <span class="string">&quot;BANG&quot;</span>);
}</pre></div>
</div></section><section id="search" class="content hidden"></section><section class="footer"></section><script>window.rootPath = "../";window.currentCrate = "synom";</script><script src="../main.js"></script><script defer src="../search-index.js"></script></body></html>
+10
View File
@@ -0,0 +1,10 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta http-equiv="refresh" content="0;URL=macro.call.html">
</head>
<body>
<p>Redirecting to <a href="macro.call.html">macro.call.html</a>...</p>
<script>location.replace("macro.call.html" + location.search + location.hash);</script>
</body>
</html>
+50
View File
@@ -0,0 +1,50 @@
<!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 `call` macro in crate `synom`."><meta name="keywords" content="rust, rustlang, rust-lang, call"><title>synom::call - Rust</title><link rel="stylesheet" type="text/css" href="../normalize.css"><link rel="stylesheet" type="text/css" href="../rustdoc.css" id="mainThemeStyle"><link rel="stylesheet" type="text/css" href="../light.css" id="themeStyle"><link rel="stylesheet" type="text/css" href="../dark.css" disabled ><link rel="stylesheet" type="text/css" href="../ayu.css" disabled ><script id="default-settings"></script><script src="../storage.js"></script><noscript><link rel="stylesheet" href="../noscript.css"></noscript><link rel="icon" type="image/svg+xml" href="../favicon.svg">
<link rel="alternate icon" type="image/png" href="../favicon-16x16.png">
<link rel="alternate icon" type="image/png" href="../favicon-32x32.png"><style type="text/css">#crate-search{background-image:url("../down-arrow.svg");}</style></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"><div class="sidebar-menu">&#9776;</div><a href='../synom/index.html'><div class='logo-container rust-logo'><img src='../rust-logo.png' alt='logo'></div></a><div class="sidebar-elems"><p class="location"><a href="index.html">synom</a></p><script>window.sidebarCurrent = {name: "call", ty: "macro", relpath: ""};</script><script defer src="sidebar-items.js"></script></div></nav><div class="theme-picker"><button id="theme-picker" aria-label="Pick another theme!" aria-haspopup="menu"><img src="../brush.svg" width="18" alt="Pick another theme!"></button><div id="theme-choices" role="menu"></div></div><script src="../theme.js"></script><nav class="sub"><form class="search-form"><div class="search-container"><div><select id="crate-search"><option value="All crates">All crates</option></select><input class="search-input" name="search" disabled autocomplete="off" spellcheck="false" placeholder="Click or press S to search, ? for more options…" type="search"></div><button type="button" class="help-button">?</button>
<a id="settings-menu" href="../settings.html"><img src="../wheel.svg" width="18" alt="Change settings"></a></div></form></nav><section id="main" class="content"><h1 class="fqn"><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">&#x2212;</span>]</a></span><a class="srclink" href="../src/synom/lib.rs.html#152-156" title="goto source code">[src]</a></span><span class="in-band">Macro <a href="index.html">synom</a>::<wbr><a class="macro" href="">call</a></span></h1><div class="docblock type-decl hidden-by-usual-hider"><div class="example-wrap"><pre class="rust macro">
<span class="macro">macro_rules</span><span class="macro">!</span> <span class="ident">call</span> {
(<span class="macro-nonterminal">$</span><span class="macro-nonterminal">i</span>:<span class="ident">expr</span>, <span class="macro-nonterminal">$</span><span class="macro-nonterminal">fun</span>:<span class="ident">expr</span> $(, <span class="macro-nonterminal">$</span><span class="macro-nonterminal">args</span>:<span class="ident">expr</span>)<span class="kw-2">*</span>) <span class="op">=</span><span class="op">&gt;</span> { ... };
}</pre></div>
</div><div class="docblock"><p>Invoke the given parser function with the passed in arguments.</p>
<ul>
<li>
<p><strong>Syntax:</strong> <code>call!(FUNCTION, ARGS...)</code></p>
<p>where the signature of the function is <code>fn(&amp;str, ARGS...) -&gt; IResult&lt;&amp;str, T&gt;</code></p>
</li>
<li>
<p><strong>Output:</strong> <code>T</code>, the result of invoking the function <code>FUNCTION</code></p>
</li>
</ul>
<div class="example-wrap"><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">synom</span>;
<span class="kw">use</span> <span class="ident">synom</span>::<span class="ident">IResult</span>;
<span class="comment">// Parses any string up to but not including the given character, returning</span>
<span class="comment">// the content up to the given character. The given character is required to</span>
<span class="comment">// be present in the input string.</span>
<span class="kw">fn</span> <span class="ident">skip_until</span>(<span class="ident">input</span>: <span class="kw-2">&amp;</span><span class="ident">str</span>, <span class="ident">ch</span>: <span class="ident">char</span>) <span class="op">-</span><span class="op">&gt;</span> <span class="ident">IResult</span><span class="op">&lt;</span><span class="kw-2">&amp;</span><span class="ident">str</span>, <span class="kw-2">&amp;</span><span class="ident">str</span><span class="op">&gt;</span> {
<span class="kw">if</span> <span class="kw">let</span> <span class="prelude-val">Some</span>(<span class="ident">pos</span>) <span class="op">=</span> <span class="ident">input</span>.<span class="ident">find</span>(<span class="ident">ch</span>) {
<span class="ident">IResult</span>::<span class="ident">Done</span>(<span class="kw-2">&amp;</span><span class="ident">input</span>[<span class="ident">pos</span>..], <span class="kw-2">&amp;</span><span class="ident">input</span>[..<span class="ident">pos</span>])
} <span class="kw">else</span> {
<span class="ident">IResult</span>::<span class="ident">Error</span>
}
}
<span class="comment">// Parses any string surrounded by tilde characters &#39;~&#39;. Returns the content</span>
<span class="comment">// between the tilde characters.</span>
<span class="macro">named</span><span class="macro">!</span>(<span class="ident">surrounded_by_tilde</span> <span class="op">-</span><span class="op">&gt;</span> <span class="kw-2">&amp;</span><span class="ident">str</span>, <span class="macro">delimited</span><span class="macro">!</span>(
<span class="macro">punct</span><span class="macro">!</span>(<span class="string">&quot;~&quot;</span>),
<span class="macro">call</span><span class="macro">!</span>(<span class="ident">skip_until</span>, <span class="string">&#39;~&#39;</span>),
<span class="macro">punct</span><span class="macro">!</span>(<span class="string">&quot;~&quot;</span>)
));
<span class="kw">fn</span> <span class="ident">main</span>() {
<span class="kw">let</span> <span class="ident">input</span> <span class="op">=</span> <span class="string">&quot;~ abc def ~&quot;</span>;
<span class="kw">let</span> <span class="ident">inner</span> <span class="op">=</span> <span class="ident">surrounded_by_tilde</span>(<span class="ident">input</span>).<span class="ident">expect</span>(<span class="string">&quot;surrounded by tilde&quot;</span>);
<span class="macro">println</span><span class="macro">!</span>(<span class="string">&quot;{:?}&quot;</span>, <span class="ident">inner</span>);
}</pre></div>
</div></section><section id="search" class="content hidden"></section><section class="footer"></section><script>window.rootPath = "../";window.currentCrate = "synom";</script><script src="../main.js"></script><script defer src="../search-index.js"></script></body></html>
+10
View File
@@ -0,0 +1,10 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta http-equiv="refresh" content="0;URL=macro.cond.html">
</head>
<body>
<p>Redirecting to <a href="macro.cond.html">macro.cond.html</a>...</p>
<script>location.replace("macro.cond.html" + location.search + location.hash);</script>
</body>
</html>
+67
View File
@@ -0,0 +1,67 @@
<!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 `cond` macro in crate `synom`."><meta name="keywords" content="rust, rustlang, rust-lang, cond"><title>synom::cond - Rust</title><link rel="stylesheet" type="text/css" href="../normalize.css"><link rel="stylesheet" type="text/css" href="../rustdoc.css" id="mainThemeStyle"><link rel="stylesheet" type="text/css" href="../light.css" id="themeStyle"><link rel="stylesheet" type="text/css" href="../dark.css" disabled ><link rel="stylesheet" type="text/css" href="../ayu.css" disabled ><script id="default-settings"></script><script src="../storage.js"></script><noscript><link rel="stylesheet" href="../noscript.css"></noscript><link rel="icon" type="image/svg+xml" href="../favicon.svg">
<link rel="alternate icon" type="image/png" href="../favicon-16x16.png">
<link rel="alternate icon" type="image/png" href="../favicon-32x32.png"><style type="text/css">#crate-search{background-image:url("../down-arrow.svg");}</style></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"><div class="sidebar-menu">&#9776;</div><a href='../synom/index.html'><div class='logo-container rust-logo'><img src='../rust-logo.png' alt='logo'></div></a><div class="sidebar-elems"><p class="location"><a href="index.html">synom</a></p><script>window.sidebarCurrent = {name: "cond", ty: "macro", relpath: ""};</script><script defer src="sidebar-items.js"></script></div></nav><div class="theme-picker"><button id="theme-picker" aria-label="Pick another theme!" aria-haspopup="menu"><img src="../brush.svg" width="18" alt="Pick another theme!"></button><div id="theme-choices" role="menu"></div></div><script src="../theme.js"></script><nav class="sub"><form class="search-form"><div class="search-container"><div><select id="crate-search"><option value="All crates">All crates</option></select><input class="search-input" name="search" disabled autocomplete="off" spellcheck="false" placeholder="Click or press S to search, ? for more options…" type="search"></div><button type="button" class="help-button">?</button>
<a id="settings-menu" href="../settings.html"><img src="../wheel.svg" width="18" alt="Change settings"></a></div></form></nav><section id="main" class="content"><h1 class="fqn"><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">&#x2212;</span>]</a></span><a class="srclink" href="../src/synom/lib.rs.html#307-322" title="goto source code">[src]</a></span><span class="in-band">Macro <a href="index.html">synom</a>::<wbr><a class="macro" href="">cond</a></span></h1><div class="docblock type-decl hidden-by-usual-hider"><div class="example-wrap"><pre class="rust macro">
<span class="macro">macro_rules</span><span class="macro">!</span> <span class="ident">cond</span> {
(<span class="macro-nonterminal">$</span><span class="macro-nonterminal">i</span>:<span class="ident">expr</span>, <span class="macro-nonterminal">$</span><span class="macro-nonterminal">cond</span>:<span class="ident">expr</span>, <span class="macro-nonterminal">$</span><span class="macro-nonterminal">submac</span>:<span class="macro">ident</span><span class="macro">!</span>( $(<span class="macro-nonterminal">$</span><span class="macro-nonterminal">args</span>:<span class="ident">tt</span>)<span class="op">*</span> )) <span class="op">=</span><span class="op">&gt;</span> { ... };
(<span class="macro-nonterminal">$</span><span class="macro-nonterminal">i</span>:<span class="ident">expr</span>, <span class="macro-nonterminal">$</span><span class="macro-nonterminal">cond</span>:<span class="ident">expr</span>, <span class="macro-nonterminal">$</span><span class="macro-nonterminal">f</span>:<span class="ident">expr</span>) <span class="op">=</span><span class="op">&gt;</span> { ... };
}</pre></div>
</div><div class="docblock"><p>Conditionally execute the given parser.</p>
<p>If you are familiar with nom, this is nom's <code>cond_with_error</code> parser.</p>
<ul>
<li><strong>Syntax:</strong> <code>cond!(CONDITION, THING)</code></li>
<li><strong>Output:</strong> <code>Some(THING)</code> if the condition is true, else <code>None</code></li>
</ul>
<div class="example-wrap"><pre class="rust rust-example-rendered">
<span class="kw">extern</span> <span class="kw">crate</span> <span class="ident">syn</span>;
<span class="attribute">#[<span class="ident">macro_use</span>]</span> <span class="kw">extern</span> <span class="kw">crate</span> <span class="ident">synom</span>;
<span class="kw">use</span> <span class="ident">syn</span>::<span class="ident">parse</span>::<span class="ident">boolean</span>;
<span class="comment">// Parses a tuple of booleans like `(true, false, false)`, possibly with a</span>
<span class="comment">// dotdot indicating omitted values like `(true, true, .., true)`. Returns</span>
<span class="comment">// separate vectors for the booleans before and after the dotdot. The second</span>
<span class="comment">// vector is None if there was no dotdot.</span>
<span class="macro">named</span><span class="macro">!</span>(<span class="ident">bools_with_dotdot</span> <span class="op">-</span><span class="op">&gt;</span> (<span class="ident">Vec</span><span class="op">&lt;</span><span class="ident">bool</span><span class="op">&gt;</span>, <span class="prelude-ty">Option</span><span class="op">&lt;</span><span class="ident">Vec</span><span class="op">&lt;</span><span class="ident">bool</span><span class="op">&gt;</span><span class="op">&gt;</span>), <span class="macro">do_parse</span><span class="macro">!</span>(
<span class="macro">punct</span><span class="macro">!</span>(<span class="string">&quot;(&quot;</span>) <span class="op">&gt;</span><span class="op">&gt;</span>
<span class="ident">before</span>: <span class="macro">separated_list</span><span class="macro">!</span>(<span class="macro">punct</span><span class="macro">!</span>(<span class="string">&quot;,&quot;</span>), <span class="ident">boolean</span>) <span class="op">&gt;</span><span class="op">&gt;</span>
<span class="ident">after</span>: <span class="macro">option</span><span class="macro">!</span>(<span class="macro">do_parse</span><span class="macro">!</span>(
<span class="comment">// Only allow comma if there are elements before dotdot, i.e. cannot</span>
<span class="comment">// be `(, .., true)`.</span>
<span class="macro">cond</span><span class="macro">!</span>(<span class="op">!</span><span class="ident">before</span>.<span class="ident">is_empty</span>(), <span class="macro">punct</span><span class="macro">!</span>(<span class="string">&quot;,&quot;</span>)) <span class="op">&gt;</span><span class="op">&gt;</span>
<span class="macro">punct</span><span class="macro">!</span>(<span class="string">&quot;..&quot;</span>) <span class="op">&gt;</span><span class="op">&gt;</span>
<span class="ident">after</span>: <span class="macro">many0</span><span class="macro">!</span>(<span class="macro">preceded</span><span class="macro">!</span>(<span class="macro">punct</span><span class="macro">!</span>(<span class="string">&quot;,&quot;</span>), <span class="ident">boolean</span>)) <span class="op">&gt;</span><span class="op">&gt;</span>
<span class="comment">// Only allow trailing comma if there are elements after dotdot,</span>
<span class="comment">// i.e. cannot be `(true, .., )`.</span>
<span class="macro">cond</span><span class="macro">!</span>(<span class="op">!</span><span class="ident">after</span>.<span class="ident">is_empty</span>(), <span class="macro">option</span><span class="macro">!</span>(<span class="macro">punct</span><span class="macro">!</span>(<span class="string">&quot;,&quot;</span>))) <span class="op">&gt;</span><span class="op">&gt;</span>
(<span class="ident">after</span>)
)) <span class="op">&gt;</span><span class="op">&gt;</span>
<span class="comment">// Allow trailing comma if there is no dotdot but there are elements.</span>
<span class="macro">cond</span><span class="macro">!</span>(<span class="op">!</span><span class="ident">before</span>.<span class="ident">is_empty</span>() <span class="op">&amp;&amp;</span> <span class="ident">after</span>.<span class="ident">is_none</span>(), <span class="macro">option</span><span class="macro">!</span>(<span class="macro">punct</span><span class="macro">!</span>(<span class="string">&quot;,&quot;</span>))) <span class="op">&gt;</span><span class="op">&gt;</span>
<span class="macro">punct</span><span class="macro">!</span>(<span class="string">&quot;)&quot;</span>) <span class="op">&gt;</span><span class="op">&gt;</span>
(<span class="ident">before</span>, <span class="ident">after</span>)
));
<span class="kw">fn</span> <span class="ident">main</span>() {
<span class="kw">let</span> <span class="ident">input</span> <span class="op">=</span> <span class="string">&quot;(true, false, false)&quot;</span>;
<span class="kw">let</span> <span class="ident">parsed</span> <span class="op">=</span> <span class="ident">bools_with_dotdot</span>(<span class="ident">input</span>).<span class="ident">expect</span>(<span class="string">&quot;bools with dotdot&quot;</span>);
<span class="macro">assert_eq</span><span class="macro">!</span>(<span class="ident">parsed</span>, (<span class="macro">vec</span><span class="macro">!</span>[<span class="bool-val">true</span>, <span class="bool-val">false</span>, <span class="bool-val">false</span>], <span class="prelude-val">None</span>));
<span class="kw">let</span> <span class="ident">input</span> <span class="op">=</span> <span class="string">&quot;(true, true, .., true)&quot;</span>;
<span class="kw">let</span> <span class="ident">parsed</span> <span class="op">=</span> <span class="ident">bools_with_dotdot</span>(<span class="ident">input</span>).<span class="ident">expect</span>(<span class="string">&quot;bools with dotdot&quot;</span>);
<span class="macro">assert_eq</span><span class="macro">!</span>(<span class="ident">parsed</span>, (<span class="macro">vec</span><span class="macro">!</span>[<span class="bool-val">true</span>, <span class="bool-val">true</span>], <span class="prelude-val">Some</span>(<span class="macro">vec</span><span class="macro">!</span>[<span class="bool-val">true</span>])));
<span class="kw">let</span> <span class="ident">input</span> <span class="op">=</span> <span class="string">&quot;(.., true)&quot;</span>;
<span class="kw">let</span> <span class="ident">parsed</span> <span class="op">=</span> <span class="ident">bools_with_dotdot</span>(<span class="ident">input</span>).<span class="ident">expect</span>(<span class="string">&quot;bools with dotdot&quot;</span>);
<span class="macro">assert_eq</span><span class="macro">!</span>(<span class="ident">parsed</span>, (<span class="macro">vec</span><span class="macro">!</span>[], <span class="prelude-val">Some</span>(<span class="macro">vec</span><span class="macro">!</span>[<span class="bool-val">true</span>])));
<span class="kw">let</span> <span class="ident">input</span> <span class="op">=</span> <span class="string">&quot;(true, true, ..)&quot;</span>;
<span class="kw">let</span> <span class="ident">parsed</span> <span class="op">=</span> <span class="ident">bools_with_dotdot</span>(<span class="ident">input</span>).<span class="ident">expect</span>(<span class="string">&quot;bools with dotdot&quot;</span>);
<span class="macro">assert_eq</span><span class="macro">!</span>(<span class="ident">parsed</span>, (<span class="macro">vec</span><span class="macro">!</span>[<span class="bool-val">true</span>, <span class="bool-val">true</span>], <span class="prelude-val">Some</span>(<span class="macro">vec</span><span class="macro">!</span>[])));
<span class="kw">let</span> <span class="ident">input</span> <span class="op">=</span> <span class="string">&quot;(..)&quot;</span>;
<span class="kw">let</span> <span class="ident">parsed</span> <span class="op">=</span> <span class="ident">bools_with_dotdot</span>(<span class="ident">input</span>).<span class="ident">expect</span>(<span class="string">&quot;bools with dotdot&quot;</span>);
<span class="macro">assert_eq</span><span class="macro">!</span>(<span class="ident">parsed</span>, (<span class="macro">vec</span><span class="macro">!</span>[], <span class="prelude-val">Some</span>(<span class="macro">vec</span><span class="macro">!</span>[])));
}</pre></div>
</div></section><section id="search" class="content hidden"></section><section class="footer"></section><script>window.rootPath = "../";window.currentCrate = "synom";</script><script src="../main.js"></script><script defer src="../search-index.js"></script></body></html>
+10
View File
@@ -0,0 +1,10 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta http-equiv="refresh" content="0;URL=macro.cond_reduce.html">
</head>
<body>
<p>Redirecting to <a href="macro.cond_reduce.html">macro.cond_reduce.html</a>...</p>
<script>location.replace("macro.cond_reduce.html" + location.search + location.hash);</script>
</body>
</html>
+66
View File
@@ -0,0 +1,66 @@
<!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 `cond_reduce` macro in crate `synom`."><meta name="keywords" content="rust, rustlang, rust-lang, cond_reduce"><title>synom::cond_reduce - Rust</title><link rel="stylesheet" type="text/css" href="../normalize.css"><link rel="stylesheet" type="text/css" href="../rustdoc.css" id="mainThemeStyle"><link rel="stylesheet" type="text/css" href="../light.css" id="themeStyle"><link rel="stylesheet" type="text/css" href="../dark.css" disabled ><link rel="stylesheet" type="text/css" href="../ayu.css" disabled ><script id="default-settings"></script><script src="../storage.js"></script><noscript><link rel="stylesheet" href="../noscript.css"></noscript><link rel="icon" type="image/svg+xml" href="../favicon.svg">
<link rel="alternate icon" type="image/png" href="../favicon-16x16.png">
<link rel="alternate icon" type="image/png" href="../favicon-32x32.png"><style type="text/css">#crate-search{background-image:url("../down-arrow.svg");}</style></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"><div class="sidebar-menu">&#9776;</div><a href='../synom/index.html'><div class='logo-container rust-logo'><img src='../rust-logo.png' alt='logo'></div></a><div class="sidebar-elems"><p class="location"><a href="index.html">synom</a></p><script>window.sidebarCurrent = {name: "cond_reduce", ty: "macro", relpath: ""};</script><script defer src="sidebar-items.js"></script></div></nav><div class="theme-picker"><button id="theme-picker" aria-label="Pick another theme!" aria-haspopup="menu"><img src="../brush.svg" width="18" alt="Pick another theme!"></button><div id="theme-choices" role="menu"></div></div><script src="../theme.js"></script><nav class="sub"><form class="search-form"><div class="search-container"><div><select id="crate-search"><option value="All crates">All crates</option></select><input class="search-input" name="search" disabled autocomplete="off" spellcheck="false" placeholder="Click or press S to search, ? for more options…" type="search"></div><button type="button" class="help-button">?</button>
<a id="settings-menu" href="../settings.html"><img src="../wheel.svg" width="18" alt="Change settings"></a></div></form></nav><section id="main" class="content"><h1 class="fqn"><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">&#x2212;</span>]</a></span><a class="srclink" href="../src/synom/lib.rs.html#383-395" title="goto source code">[src]</a></span><span class="in-band">Macro <a href="index.html">synom</a>::<wbr><a class="macro" href="">cond_reduce</a></span></h1><div class="docblock type-decl hidden-by-usual-hider"><div class="example-wrap"><pre class="rust macro">
<span class="macro">macro_rules</span><span class="macro">!</span> <span class="ident">cond_reduce</span> {
(<span class="macro-nonterminal">$</span><span class="macro-nonterminal">i</span>:<span class="ident">expr</span>, <span class="macro-nonterminal">$</span><span class="macro-nonterminal">cond</span>:<span class="ident">expr</span>, <span class="macro-nonterminal">$</span><span class="macro-nonterminal">submac</span>:<span class="macro">ident</span><span class="macro">!</span>( $(<span class="macro-nonterminal">$</span><span class="macro-nonterminal">args</span>:<span class="ident">tt</span>)<span class="op">*</span> )) <span class="op">=</span><span class="op">&gt;</span> { ... };
(<span class="macro-nonterminal">$</span><span class="macro-nonterminal">i</span>:<span class="ident">expr</span>, <span class="macro-nonterminal">$</span><span class="macro-nonterminal">cond</span>:<span class="ident">expr</span>, <span class="macro-nonterminal">$</span><span class="macro-nonterminal">f</span>:<span class="ident">expr</span>) <span class="op">=</span><span class="op">&gt;</span> { ... };
}</pre></div>
</div><div class="docblock"><p>Fail to parse if condition is false, otherwise parse the given parser.</p>
<p>This is typically used inside of <code>option!</code> or <code>alt!</code>.</p>
<ul>
<li><strong>Syntax:</strong> <code>cond_reduce!(CONDITION, THING)</code></li>
<li><strong>Output:</strong> <code>THING</code></li>
</ul>
<div class="example-wrap"><pre class="rust rust-example-rendered">
<span class="kw">extern</span> <span class="kw">crate</span> <span class="ident">syn</span>;
<span class="attribute">#[<span class="ident">macro_use</span>]</span> <span class="kw">extern</span> <span class="kw">crate</span> <span class="ident">synom</span>;
<span class="kw">use</span> <span class="ident">syn</span>::<span class="ident">parse</span>::<span class="ident">boolean</span>;
<span class="attribute">#[<span class="ident">derive</span>(<span class="ident">Debug</span>, <span class="ident">PartialEq</span>)]</span>
<span class="kw">struct</span> <span class="ident">VariadicBools</span> {
<span class="ident">data</span>: <span class="ident">Vec</span><span class="op">&lt;</span><span class="ident">bool</span><span class="op">&gt;</span>,
<span class="ident">variadic</span>: <span class="ident">bool</span>,
}
<span class="comment">// Parse one or more comma-separated booleans, possibly ending in &quot;...&quot; to</span>
<span class="comment">// indicate there may be more.</span>
<span class="macro">named</span><span class="macro">!</span>(<span class="ident">variadic_bools</span> <span class="op">-</span><span class="op">&gt;</span> <span class="ident">VariadicBools</span>, <span class="macro">do_parse</span><span class="macro">!</span>(
<span class="ident">data</span>: <span class="macro">separated_nonempty_list</span><span class="macro">!</span>(<span class="macro">punct</span><span class="macro">!</span>(<span class="string">&quot;,&quot;</span>), <span class="ident">boolean</span>) <span class="op">&gt;</span><span class="op">&gt;</span>
<span class="ident">trailing_comma</span>: <span class="macro">option</span><span class="macro">!</span>(<span class="macro">punct</span><span class="macro">!</span>(<span class="string">&quot;,&quot;</span>)) <span class="op">&gt;</span><span class="op">&gt;</span>
<span class="comment">// Only allow &quot;...&quot; if there is a comma after the last boolean. Using</span>
<span class="comment">// `cond_reduce!` is more convenient here than using `cond!`. The</span>
<span class="comment">// alternatives are:</span>
<span class="comment">//</span>
<span class="comment">// - `cond!(c, option!(p))` or `option!(cond!(c, p))`</span>
<span class="comment">// Gives `Some(Some(&quot;...&quot;))` for variadic and `Some(None)` or `None`</span>
<span class="comment">// which both mean not variadic.</span>
<span class="comment">// - `cond_reduce!(c, option!(p))`</span>
<span class="comment">// Incorrect; would fail to parse if there is no trailing comma.</span>
<span class="comment">// - `option!(cond_reduce!(c, p))`</span>
<span class="comment">// Gives `Some(&quot;...&quot;)` for variadic and `None` otherwise. Perfect!</span>
<span class="ident">variadic</span>: <span class="macro">option</span><span class="macro">!</span>(<span class="macro">cond_reduce</span><span class="macro">!</span>(<span class="ident">trailing_comma</span>.<span class="ident">is_some</span>(), <span class="macro">punct</span><span class="macro">!</span>(<span class="string">&quot;...&quot;</span>))) <span class="op">&gt;</span><span class="op">&gt;</span>
(<span class="ident">VariadicBools</span> {
<span class="ident">data</span>: <span class="ident">data</span>,
<span class="ident">variadic</span>: <span class="ident">variadic</span>.<span class="ident">is_some</span>(),
})
));
<span class="kw">fn</span> <span class="ident">main</span>() {
<span class="kw">let</span> <span class="ident">input</span> <span class="op">=</span> <span class="string">&quot;true, true&quot;</span>;
<span class="kw">let</span> <span class="ident">parsed</span> <span class="op">=</span> <span class="ident">variadic_bools</span>(<span class="ident">input</span>).<span class="ident">expect</span>(<span class="string">&quot;variadic bools&quot;</span>);
<span class="macro">assert_eq</span><span class="macro">!</span>(<span class="ident">parsed</span>, <span class="ident">VariadicBools</span> {
<span class="ident">data</span>: <span class="macro">vec</span><span class="macro">!</span>[<span class="bool-val">true</span>, <span class="bool-val">true</span>],
<span class="ident">variadic</span>: <span class="bool-val">false</span>,
});
<span class="kw">let</span> <span class="ident">input</span> <span class="op">=</span> <span class="string">&quot;true, ...&quot;</span>;
<span class="kw">let</span> <span class="ident">parsed</span> <span class="op">=</span> <span class="ident">variadic_bools</span>(<span class="ident">input</span>).<span class="ident">expect</span>(<span class="string">&quot;variadic bools&quot;</span>);
<span class="macro">assert_eq</span><span class="macro">!</span>(<span class="ident">parsed</span>, <span class="ident">VariadicBools</span> {
<span class="ident">data</span>: <span class="macro">vec</span><span class="macro">!</span>[<span class="bool-val">true</span>],
<span class="ident">variadic</span>: <span class="bool-val">true</span>,
});
}</pre></div>
</div></section><section id="search" class="content hidden"></section><section class="footer"></section><script>window.rootPath = "../";window.currentCrate = "synom";</script><script src="../main.js"></script><script defer src="../search-index.js"></script></body></html>
+10
View File
@@ -0,0 +1,10 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta http-equiv="refresh" content="0;URL=macro.delimited.html">
</head>
<body>
<p>Redirecting to <a href="macro.delimited.html">macro.delimited.html</a>...</p>
<script>location.replace("macro.delimited.html" + location.search + location.hash);</script>
</body>
</html>
+34
View File
@@ -0,0 +1,34 @@
<!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 `delimited` macro in crate `synom`."><meta name="keywords" content="rust, rustlang, rust-lang, delimited"><title>synom::delimited - Rust</title><link rel="stylesheet" type="text/css" href="../normalize.css"><link rel="stylesheet" type="text/css" href="../rustdoc.css" id="mainThemeStyle"><link rel="stylesheet" type="text/css" href="../light.css" id="themeStyle"><link rel="stylesheet" type="text/css" href="../dark.css" disabled ><link rel="stylesheet" type="text/css" href="../ayu.css" disabled ><script id="default-settings"></script><script src="../storage.js"></script><noscript><link rel="stylesheet" href="../noscript.css"></noscript><link rel="icon" type="image/svg+xml" href="../favicon.svg">
<link rel="alternate icon" type="image/png" href="../favicon-16x16.png">
<link rel="alternate icon" type="image/png" href="../favicon-32x32.png"><style type="text/css">#crate-search{background-image:url("../down-arrow.svg");}</style></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"><div class="sidebar-menu">&#9776;</div><a href='../synom/index.html'><div class='logo-container rust-logo'><img src='../rust-logo.png' alt='logo'></div></a><div class="sidebar-elems"><p class="location"><a href="index.html">synom</a></p><script>window.sidebarCurrent = {name: "delimited", ty: "macro", relpath: ""};</script><script defer src="sidebar-items.js"></script></div></nav><div class="theme-picker"><button id="theme-picker" aria-label="Pick another theme!" aria-haspopup="menu"><img src="../brush.svg" width="18" alt="Pick another theme!"></button><div id="theme-choices" role="menu"></div></div><script src="../theme.js"></script><nav class="sub"><form class="search-form"><div class="search-container"><div><select id="crate-search"><option value="All crates">All crates</option></select><input class="search-input" name="search" disabled autocomplete="off" spellcheck="false" placeholder="Click or press S to search, ? for more options…" type="search"></div><button type="button" class="help-button">?</button>
<a id="settings-menu" href="../settings.html"><img src="../wheel.svg" width="18" alt="Change settings"></a></div></form></nav><section id="main" class="content"><h1 class="fqn"><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">&#x2212;</span>]</a></span><a class="srclink" href="../src/synom/lib.rs.html#903-914" title="goto source code">[src]</a></span><span class="in-band">Macro <a href="index.html">synom</a>::<wbr><a class="macro" href="">delimited</a></span></h1><div class="docblock type-decl hidden-by-usual-hider"><div class="example-wrap"><pre class="rust macro">
<span class="macro">macro_rules</span><span class="macro">!</span> <span class="ident">delimited</span> {
(<span class="macro-nonterminal">$</span><span class="macro-nonterminal">i</span>:<span class="ident">expr</span>, <span class="macro-nonterminal">$</span><span class="macro-nonterminal">submac</span>:<span class="macro">ident</span><span class="macro">!</span>( $(<span class="macro-nonterminal">$</span><span class="macro-nonterminal">args</span>:<span class="ident">tt</span>)<span class="op">*</span> ), $(<span class="macro-nonterminal">$</span><span class="macro-nonterminal">rest</span>:<span class="ident">tt</span>)<span class="op">+</span>) <span class="op">=</span><span class="op">&gt;</span> { ... };
(<span class="macro-nonterminal">$</span><span class="macro-nonterminal">i</span>:<span class="ident">expr</span>, <span class="macro-nonterminal">$</span><span class="macro-nonterminal">f</span>:<span class="ident">expr</span>, $(<span class="macro-nonterminal">$</span><span class="macro-nonterminal">rest</span>:<span class="ident">tt</span>)<span class="op">+</span>) <span class="op">=</span><span class="op">&gt;</span> { ... };
}</pre></div>
</div><div class="docblock"><p>Value surrounded by a pair of delimiters.</p>
<ul>
<li><strong>Syntax:</strong> <code>delimited!(OPEN, THING, CLOSE)</code></li>
<li><strong>Output:</strong> <code>THING</code></li>
</ul>
<div class="example-wrap"><pre class="rust rust-example-rendered">
<span class="kw">extern</span> <span class="kw">crate</span> <span class="ident">syn</span>;
<span class="attribute">#[<span class="ident">macro_use</span>]</span> <span class="kw">extern</span> <span class="kw">crate</span> <span class="ident">synom</span>;
<span class="kw">use</span> <span class="ident">syn</span>::<span class="ident">Expr</span>;
<span class="kw">use</span> <span class="ident">syn</span>::<span class="ident">parse</span>::<span class="ident">expr</span>;
<span class="comment">// An expression surrounded by [[ ... ]].</span>
<span class="macro">named</span><span class="macro">!</span>(<span class="ident">double_bracket_expr</span> <span class="op">-</span><span class="op">&gt;</span> <span class="ident">Expr</span>,
<span class="macro">delimited</span><span class="macro">!</span>(<span class="macro">punct</span><span class="macro">!</span>(<span class="string">&quot;[[&quot;</span>), <span class="ident">expr</span>, <span class="macro">punct</span><span class="macro">!</span>(<span class="string">&quot;]]&quot;</span>))
);
<span class="kw">fn</span> <span class="ident">main</span>() {
<span class="kw">let</span> <span class="ident">input</span> <span class="op">=</span> <span class="string">&quot;[[ 1 + 1 ]]&quot;</span>;
<span class="kw">let</span> <span class="ident">parsed</span> <span class="op">=</span> <span class="ident">double_bracket_expr</span>(<span class="ident">input</span>).<span class="ident">expect</span>(<span class="string">&quot;double bracket expr&quot;</span>);
<span class="macro">println</span><span class="macro">!</span>(<span class="string">&quot;{:?}&quot;</span>, <span class="ident">parsed</span>);
}</pre></div>
</div></section><section id="search" class="content hidden"></section><section class="footer"></section><script>window.rootPath = "../";window.currentCrate = "synom";</script><script src="../main.js"></script><script defer src="../search-index.js"></script></body></html>
+10
View File
@@ -0,0 +1,10 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta http-equiv="refresh" content="0;URL=macro.do_parse.html">
</head>
<body>
<p>Redirecting to <a href="macro.do_parse.html">macro.do_parse.html</a>...</p>
<script>location.replace("macro.do_parse.html" + location.search + location.hash);</script>
</body>
</html>
+44
View File
@@ -0,0 +1,44 @@
<!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 `do_parse` macro in crate `synom`."><meta name="keywords" content="rust, rustlang, rust-lang, do_parse"><title>synom::do_parse - Rust</title><link rel="stylesheet" type="text/css" href="../normalize.css"><link rel="stylesheet" type="text/css" href="../rustdoc.css" id="mainThemeStyle"><link rel="stylesheet" type="text/css" href="../light.css" id="themeStyle"><link rel="stylesheet" type="text/css" href="../dark.css" disabled ><link rel="stylesheet" type="text/css" href="../ayu.css" disabled ><script id="default-settings"></script><script src="../storage.js"></script><noscript><link rel="stylesheet" href="../noscript.css"></noscript><link rel="icon" type="image/svg+xml" href="../favicon.svg">
<link rel="alternate icon" type="image/png" href="../favicon-16x16.png">
<link rel="alternate icon" type="image/png" href="../favicon-32x32.png"><style type="text/css">#crate-search{background-image:url("../down-arrow.svg");}</style></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"><div class="sidebar-menu">&#9776;</div><a href='../synom/index.html'><div class='logo-container rust-logo'><img src='../rust-logo.png' alt='logo'></div></a><div class="sidebar-elems"><p class="location"><a href="index.html">synom</a></p><script>window.sidebarCurrent = {name: "do_parse", ty: "macro", relpath: ""};</script><script defer src="sidebar-items.js"></script></div></nav><div class="theme-picker"><button id="theme-picker" aria-label="Pick another theme!" aria-haspopup="menu"><img src="../brush.svg" width="18" alt="Pick another theme!"></button><div id="theme-choices" role="menu"></div></div><script src="../theme.js"></script><nav class="sub"><form class="search-form"><div class="search-container"><div><select id="crate-search"><option value="All crates">All crates</option></select><input class="search-input" name="search" disabled autocomplete="off" spellcheck="false" placeholder="Click or press S to search, ? for more options…" type="search"></div><button type="button" class="help-button">?</button>
<a id="settings-menu" href="../settings.html"><img src="../wheel.svg" width="18" alt="Change settings"></a></div></form></nav><section id="main" class="content"><h1 class="fqn"><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">&#x2212;</span>]</a></span><a class="srclink" href="../src/synom/lib.rs.html#1181-1225" title="goto source code">[src]</a></span><span class="in-band">Macro <a href="index.html">synom</a>::<wbr><a class="macro" href="">do_parse</a></span></h1><div class="docblock type-decl hidden-by-usual-hider"><div class="example-wrap"><pre class="rust macro">
<span class="macro">macro_rules</span><span class="macro">!</span> <span class="ident">do_parse</span> {
(<span class="macro-nonterminal">$</span><span class="macro-nonterminal">i</span>:<span class="ident">expr</span>, ( $(<span class="macro-nonterminal">$</span><span class="macro-nonterminal">rest</span>:<span class="ident">expr</span>),<span class="op">*</span> )) <span class="op">=</span><span class="op">&gt;</span> { ... };
(<span class="macro-nonterminal">$</span><span class="macro-nonterminal">i</span>:<span class="ident">expr</span>, <span class="macro-nonterminal">$</span><span class="macro-nonterminal">e</span>:<span class="ident">ident</span> <span class="op">&gt;</span><span class="op">&gt;</span> $(<span class="macro-nonterminal">$</span><span class="macro-nonterminal">rest</span>:<span class="ident">tt</span>)<span class="kw-2">*</span>) <span class="op">=</span><span class="op">&gt;</span> { ... };
(<span class="macro-nonterminal">$</span><span class="macro-nonterminal">i</span>:<span class="ident">expr</span>, <span class="macro-nonterminal">$</span><span class="macro-nonterminal">submac</span>:<span class="macro">ident</span><span class="macro">!</span>( $(<span class="macro-nonterminal">$</span><span class="macro-nonterminal">args</span>:<span class="ident">tt</span>)<span class="op">*</span> ) <span class="op">&gt;</span><span class="op">&gt;</span> $(<span class="macro-nonterminal">$</span><span class="macro-nonterminal">rest</span>:<span class="ident">tt</span>)<span class="kw-2">*</span>) <span class="op">=</span><span class="op">&gt;</span> { ... };
(<span class="macro-nonterminal">$</span><span class="macro-nonterminal">i</span>:<span class="ident">expr</span>, <span class="macro-nonterminal">$</span><span class="macro-nonterminal">field</span>:<span class="ident">ident</span> : <span class="macro-nonterminal">$</span><span class="macro-nonterminal">e</span>:<span class="ident">ident</span> <span class="op">&gt;</span><span class="op">&gt;</span> $(<span class="macro-nonterminal">$</span><span class="macro-nonterminal">rest</span>:<span class="ident">tt</span>)<span class="kw-2">*</span>) <span class="op">=</span><span class="op">&gt;</span> { ... };
(<span class="macro-nonterminal">$</span><span class="macro-nonterminal">i</span>:<span class="ident">expr</span>, <span class="macro-nonterminal">$</span><span class="macro-nonterminal">field</span>:<span class="ident">ident</span> : <span class="macro-nonterminal">$</span><span class="macro-nonterminal">submac</span>:<span class="macro">ident</span><span class="macro">!</span>( $(<span class="macro-nonterminal">$</span><span class="macro-nonterminal">args</span>:<span class="ident">tt</span>)<span class="op">*</span> ) <span class="op">&gt;</span><span class="op">&gt;</span> $(<span class="macro-nonterminal">$</span><span class="macro-nonterminal">rest</span>:<span class="ident">tt</span>)<span class="kw-2">*</span>) <span class="op">=</span><span class="op">&gt;</span> { ... };
(<span class="macro-nonterminal">$</span><span class="macro-nonterminal">i</span>:<span class="ident">expr</span>, <span class="kw-2">mut</span> <span class="macro-nonterminal">$</span><span class="macro-nonterminal">field</span>:<span class="ident">ident</span> : <span class="macro-nonterminal">$</span><span class="macro-nonterminal">e</span>:<span class="ident">ident</span> <span class="op">&gt;</span><span class="op">&gt;</span> $(<span class="macro-nonterminal">$</span><span class="macro-nonterminal">rest</span>:<span class="ident">tt</span>)<span class="kw-2">*</span>) <span class="op">=</span><span class="op">&gt;</span> { ... };
(<span class="macro-nonterminal">$</span><span class="macro-nonterminal">i</span>:<span class="ident">expr</span>, <span class="kw-2">mut</span> <span class="macro-nonterminal">$</span><span class="macro-nonterminal">field</span>:<span class="ident">ident</span> : <span class="macro-nonterminal">$</span><span class="macro-nonterminal">submac</span>:<span class="macro">ident</span><span class="macro">!</span>( $(<span class="macro-nonterminal">$</span><span class="macro-nonterminal">args</span>:<span class="ident">tt</span>)<span class="op">*</span> ) <span class="op">&gt;</span><span class="op">&gt;</span> $(<span class="macro-nonterminal">$</span><span class="macro-nonterminal">rest</span>:<span class="ident">tt</span>)<span class="kw-2">*</span>) <span class="op">=</span><span class="op">&gt;</span> { ... };
}</pre></div>
</div><div class="docblock"><p>Run a series of parsers, one after another, optionally assigning the results
a name. Fail if any of the parsers fails.</p>
<p>Produces the result of evaluating the final expression in parentheses with
all of the previously named results bound.</p>
<ul>
<li><strong>Syntax:</strong> <code>do_parse!(name: THING1 &gt;&gt; THING2 &gt;&gt; (RESULT))</code></li>
<li><strong>Output:</strong> <code>RESULT</code></li>
</ul>
<div class="example-wrap"><pre class="rust rust-example-rendered">
<span class="kw">extern</span> <span class="kw">crate</span> <span class="ident">syn</span>;
<span class="attribute">#[<span class="ident">macro_use</span>]</span> <span class="kw">extern</span> <span class="kw">crate</span> <span class="ident">synom</span>;
<span class="kw">use</span> <span class="ident">syn</span>::{<span class="ident">Ident</span>, <span class="ident">TokenTree</span>};
<span class="kw">use</span> <span class="ident">syn</span>::<span class="ident">parse</span>::{<span class="ident">ident</span>, <span class="ident">tt</span>};
<span class="comment">// Parse a macro invocation like `stringify!($args)`.</span>
<span class="macro">named</span><span class="macro">!</span>(<span class="ident">simple_mac</span> <span class="op">-</span><span class="op">&gt;</span> (<span class="ident">Ident</span>, <span class="ident">TokenTree</span>), <span class="macro">do_parse</span><span class="macro">!</span>(
<span class="ident">name</span>: <span class="ident">ident</span> <span class="op">&gt;</span><span class="op">&gt;</span>
<span class="macro">punct</span><span class="macro">!</span>(<span class="string">&quot;!&quot;</span>) <span class="op">&gt;</span><span class="op">&gt;</span>
<span class="ident">body</span>: <span class="ident">tt</span> <span class="op">&gt;</span><span class="op">&gt;</span>
(<span class="ident">name</span>, <span class="ident">body</span>)
));
<span class="kw">fn</span> <span class="ident">main</span>() {
<span class="kw">let</span> <span class="ident">input</span> <span class="op">=</span> <span class="string">&quot;stringify!($args)&quot;</span>;
<span class="kw">let</span> (<span class="ident">name</span>, <span class="ident">body</span>) <span class="op">=</span> <span class="ident">simple_mac</span>(<span class="ident">input</span>).<span class="ident">expect</span>(<span class="string">&quot;macro invocation&quot;</span>);
<span class="macro">println</span><span class="macro">!</span>(<span class="string">&quot;{:?}&quot;</span>, <span class="ident">name</span>);
<span class="macro">println</span><span class="macro">!</span>(<span class="string">&quot;{:?}&quot;</span>, <span class="ident">body</span>);
}</pre></div>
</div></section><section id="search" class="content hidden"></section><section class="footer"></section><script>window.rootPath = "../";window.currentCrate = "synom";</script><script src="../main.js"></script><script defer src="../search-index.js"></script></body></html>
+10
View File
@@ -0,0 +1,10 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta http-equiv="refresh" content="0;URL=macro.epsilon.html">
</head>
<body>
<p>Redirecting to <a href="macro.epsilon.html">macro.epsilon.html</a>...</p>
<script>location.replace("macro.epsilon.html" + location.search + location.hash);</script>
</body>
</html>
+36
View File
@@ -0,0 +1,36 @@
<!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 `epsilon` macro in crate `synom`."><meta name="keywords" content="rust, rustlang, rust-lang, epsilon"><title>synom::epsilon - Rust</title><link rel="stylesheet" type="text/css" href="../normalize.css"><link rel="stylesheet" type="text/css" href="../rustdoc.css" id="mainThemeStyle"><link rel="stylesheet" type="text/css" href="../light.css" id="themeStyle"><link rel="stylesheet" type="text/css" href="../dark.css" disabled ><link rel="stylesheet" type="text/css" href="../ayu.css" disabled ><script id="default-settings"></script><script src="../storage.js"></script><noscript><link rel="stylesheet" href="../noscript.css"></noscript><link rel="icon" type="image/svg+xml" href="../favicon.svg">
<link rel="alternate icon" type="image/png" href="../favicon-16x16.png">
<link rel="alternate icon" type="image/png" href="../favicon-32x32.png"><style type="text/css">#crate-search{background-image:url("../down-arrow.svg");}</style></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"><div class="sidebar-menu">&#9776;</div><a href='../synom/index.html'><div class='logo-container rust-logo'><img src='../rust-logo.png' alt='logo'></div></a><div class="sidebar-elems"><p class="location"><a href="index.html">synom</a></p><script>window.sidebarCurrent = {name: "epsilon", ty: "macro", relpath: ""};</script><script defer src="sidebar-items.js"></script></div></nav><div class="theme-picker"><button id="theme-picker" aria-label="Pick another theme!" aria-haspopup="menu"><img src="../brush.svg" width="18" alt="Pick another theme!"></button><div id="theme-choices" role="menu"></div></div><script src="../theme.js"></script><nav class="sub"><form class="search-form"><div class="search-container"><div><select id="crate-search"><option value="All crates">All crates</option></select><input class="search-input" name="search" disabled autocomplete="off" spellcheck="false" placeholder="Click or press S to search, ? for more options…" type="search"></div><button type="button" class="help-button">?</button>
<a id="settings-menu" href="../settings.html"><img src="../wheel.svg" width="18" alt="Change settings"></a></div></form></nav><section id="main" class="content"><h1 class="fqn"><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">&#x2212;</span>]</a></span><a class="srclink" href="../src/synom/helper.rs.html#212-216" title="goto source code">[src]</a></span><span class="in-band">Macro <a href="index.html">synom</a>::<wbr><a class="macro" href="">epsilon</a></span></h1><div class="docblock type-decl hidden-by-usual-hider"><div class="example-wrap"><pre class="rust macro">
<span class="macro">macro_rules</span><span class="macro">!</span> <span class="ident">epsilon</span> {
(<span class="macro-nonterminal">$</span><span class="macro-nonterminal">i</span>:<span class="ident">expr</span>,) <span class="op">=</span><span class="op">&gt;</span> { ... };
}</pre></div>
</div><div class="docblock"><p>Parses nothing and always succeeds.</p>
<p>This can be useful as a fallthrough case in <code>alt!</code>.</p>
<ul>
<li><strong>Syntax:</strong> <code>epsilon!()</code></li>
<li><strong>Output:</strong> <code>()</code></li>
</ul>
<div class="example-wrap"><pre class="rust rust-example-rendered">
<span class="kw">extern</span> <span class="kw">crate</span> <span class="ident">syn</span>;
<span class="attribute">#[<span class="ident">macro_use</span>]</span> <span class="kw">extern</span> <span class="kw">crate</span> <span class="ident">synom</span>;
<span class="kw">use</span> <span class="ident">syn</span>::<span class="ident">Mutability</span>;
<span class="macro">named</span><span class="macro">!</span>(<span class="ident">mutability</span> <span class="op">-</span><span class="op">&gt;</span> <span class="ident">Mutability</span>, <span class="macro">alt</span><span class="macro">!</span>(
<span class="macro">keyword</span><span class="macro">!</span>(<span class="string">&quot;mut&quot;</span>) <span class="op">=</span><span class="op">&gt;</span> { <span class="op">|</span><span class="kw">_</span><span class="op">|</span> <span class="ident">Mutability</span>::<span class="ident">Mutable</span> }
<span class="op">|</span>
<span class="macro">epsilon</span><span class="macro">!</span>() <span class="op">=</span><span class="op">&gt;</span> { <span class="op">|</span><span class="kw">_</span><span class="op">|</span> <span class="ident">Mutability</span>::<span class="ident">Immutable</span> }
));
<span class="kw">fn</span> <span class="ident">main</span>() {
<span class="kw">let</span> <span class="ident">input</span> <span class="op">=</span> <span class="string">&quot;mut&quot;</span>;
<span class="kw">let</span> <span class="ident">parsed</span> <span class="op">=</span> <span class="ident">mutability</span>(<span class="ident">input</span>).<span class="ident">expect</span>(<span class="string">&quot;mutability&quot;</span>);
<span class="macro">assert_eq</span><span class="macro">!</span>(<span class="ident">parsed</span>, <span class="ident">Mutability</span>::<span class="ident">Mutable</span>);
<span class="kw">let</span> <span class="ident">input</span> <span class="op">=</span> <span class="string">&quot;&quot;</span>;
<span class="kw">let</span> <span class="ident">parsed</span> <span class="op">=</span> <span class="ident">mutability</span>(<span class="ident">input</span>).<span class="ident">expect</span>(<span class="string">&quot;mutability&quot;</span>);
<span class="macro">assert_eq</span><span class="macro">!</span>(<span class="ident">parsed</span>, <span class="ident">Mutability</span>::<span class="ident">Immutable</span>);
}</pre></div>
</div></section><section id="search" class="content hidden"></section><section class="footer"></section><script>window.rootPath = "../";window.currentCrate = "synom";</script><script src="../main.js"></script><script defer src="../search-index.js"></script></body></html>
+10
View File
@@ -0,0 +1,10 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta http-equiv="refresh" content="0;URL=macro.keyword.html">
</head>
<body>
<p>Redirecting to <a href="macro.keyword.html">macro.keyword.html</a>...</p>
<script>location.replace("macro.keyword.html" + location.search + location.hash);</script>
</body>
</html>
+39
View File
@@ -0,0 +1,39 @@
<!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 `keyword` macro in crate `synom`."><meta name="keywords" content="rust, rustlang, rust-lang, keyword"><title>synom::keyword - Rust</title><link rel="stylesheet" type="text/css" href="../normalize.css"><link rel="stylesheet" type="text/css" href="../rustdoc.css" id="mainThemeStyle"><link rel="stylesheet" type="text/css" href="../light.css" id="themeStyle"><link rel="stylesheet" type="text/css" href="../dark.css" disabled ><link rel="stylesheet" type="text/css" href="../ayu.css" disabled ><script id="default-settings"></script><script src="../storage.js"></script><noscript><link rel="stylesheet" href="../noscript.css"></noscript><link rel="icon" type="image/svg+xml" href="../favicon.svg">
<link rel="alternate icon" type="image/png" href="../favicon-16x16.png">
<link rel="alternate icon" type="image/png" href="../favicon-32x32.png"><style type="text/css">#crate-search{background-image:url("../down-arrow.svg");}</style></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"><div class="sidebar-menu">&#9776;</div><a href='../synom/index.html'><div class='logo-container rust-logo'><img src='../rust-logo.png' alt='logo'></div></a><div class="sidebar-elems"><p class="location"><a href="index.html">synom</a></p><script>window.sidebarCurrent = {name: "keyword", ty: "macro", relpath: ""};</script><script defer src="sidebar-items.js"></script></div></nav><div class="theme-picker"><button id="theme-picker" aria-label="Pick another theme!" aria-haspopup="menu"><img src="../brush.svg" width="18" alt="Pick another theme!"></button><div id="theme-choices" role="menu"></div></div><script src="../theme.js"></script><nav class="sub"><form class="search-form"><div class="search-container"><div><select id="crate-search"><option value="All crates">All crates</option></select><input class="search-input" name="search" disabled autocomplete="off" spellcheck="false" placeholder="Click or press S to search, ? for more options…" type="search"></div><button type="button" class="help-button">?</button>
<a id="settings-menu" href="../settings.html"><img src="../wheel.svg" width="18" alt="Change settings"></a></div></form></nav><section id="main" class="content"><h1 class="fqn"><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">&#x2212;</span>]</a></span><a class="srclink" href="../src/synom/helper.rs.html#78-82" title="goto source code">[src]</a></span><span class="in-band">Macro <a href="index.html">synom</a>::<wbr><a class="macro" href="">keyword</a></span></h1><div class="docblock type-decl hidden-by-usual-hider"><div class="example-wrap"><pre class="rust macro">
<span class="macro">macro_rules</span><span class="macro">!</span> <span class="ident">keyword</span> {
(<span class="macro-nonterminal">$</span><span class="macro-nonterminal">i</span>:<span class="ident">expr</span>, <span class="macro-nonterminal">$</span><span class="macro-nonterminal">keyword</span>:<span class="ident">expr</span>) <span class="op">=</span><span class="op">&gt;</span> { ... };
}</pre></div>
</div><div class="docblock"><p>Parse a keyword like &quot;fn&quot; or &quot;struct&quot;.</p>
<p>See also <code>punct!</code> for parsing punctuation, which are subtly different from
keywords.</p>
<ul>
<li><strong>Syntax:</strong> <code>keyword!(&quot;...&quot;)</code></li>
<li><strong>Output:</strong> <code>&amp;str</code></li>
</ul>
<div class="example-wrap"><pre class="rust rust-example-rendered">
<span class="kw">extern</span> <span class="kw">crate</span> <span class="ident">syn</span>;
<span class="attribute">#[<span class="ident">macro_use</span>]</span> <span class="kw">extern</span> <span class="kw">crate</span> <span class="ident">synom</span>;
<span class="kw">use</span> <span class="ident">synom</span>::<span class="ident">IResult</span>;
<span class="comment">// Parse zero or more &quot;bang&quot; keywords.</span>
<span class="macro">named</span><span class="macro">!</span>(<span class="ident">many_bangs</span> <span class="op">-</span><span class="op">&gt;</span> <span class="ident">Vec</span><span class="op">&lt;</span><span class="kw-2">&amp;</span><span class="ident">str</span><span class="op">&gt;</span>,
<span class="macro">terminated</span><span class="macro">!</span>(
<span class="macro">many0</span><span class="macro">!</span>(<span class="macro">keyword</span><span class="macro">!</span>(<span class="string">&quot;bang&quot;</span>)),
<span class="macro">punct</span><span class="macro">!</span>(<span class="string">&quot;;&quot;</span>)
)
);
<span class="kw">fn</span> <span class="ident">main</span>() {
<span class="kw">let</span> <span class="ident">input</span> <span class="op">=</span> <span class="string">&quot;bang bang bang;&quot;</span>;
<span class="kw">let</span> <span class="ident">parsed</span> <span class="op">=</span> <span class="ident">many_bangs</span>(<span class="ident">input</span>).<span class="ident">expect</span>(<span class="string">&quot;bangs&quot;</span>);
<span class="macro">assert_eq</span><span class="macro">!</span>(<span class="ident">parsed</span>, [<span class="string">&quot;bang&quot;</span>, <span class="string">&quot;bang&quot;</span>, <span class="string">&quot;bang&quot;</span>]);
<span class="kw">let</span> <span class="ident">input</span> <span class="op">=</span> <span class="string">&quot;bangbang;&quot;</span>;
<span class="kw">let</span> <span class="ident">err</span> <span class="op">=</span> <span class="ident">many_bangs</span>(<span class="ident">input</span>);
<span class="macro">assert_eq</span><span class="macro">!</span>(<span class="ident">err</span>, <span class="ident">IResult</span>::<span class="ident">Error</span>);
}</pre></div>
</div></section><section id="search" class="content hidden"></section><section class="footer"></section><script>window.rootPath = "../";window.currentCrate = "synom";</script><script src="../main.js"></script><script defer src="../search-index.js"></script></body></html>
+10
View File
@@ -0,0 +1,10 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta http-equiv="refresh" content="0;URL=macro.many0.html">
</head>
<body>
<p>Redirecting to <a href="macro.many0.html">macro.many0.html</a>...</p>
<script>location.replace("macro.many0.html" + location.search + location.hash);</script>
</body>
</html>
+41
View File
@@ -0,0 +1,41 @@
<!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 `many0` macro in crate `synom`."><meta name="keywords" content="rust, rustlang, rust-lang, many0"><title>synom::many0 - Rust</title><link rel="stylesheet" type="text/css" href="../normalize.css"><link rel="stylesheet" type="text/css" href="../rustdoc.css" id="mainThemeStyle"><link rel="stylesheet" type="text/css" href="../light.css" id="themeStyle"><link rel="stylesheet" type="text/css" href="../dark.css" disabled ><link rel="stylesheet" type="text/css" href="../ayu.css" disabled ><script id="default-settings"></script><script src="../storage.js"></script><noscript><link rel="stylesheet" href="../noscript.css"></noscript><link rel="icon" type="image/svg+xml" href="../favicon.svg">
<link rel="alternate icon" type="image/png" href="../favicon-16x16.png">
<link rel="alternate icon" type="image/png" href="../favicon-32x32.png"><style type="text/css">#crate-search{background-image:url("../down-arrow.svg");}</style></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"><div class="sidebar-menu">&#9776;</div><a href='../synom/index.html'><div class='logo-container rust-logo'><img src='../rust-logo.png' alt='logo'></div></a><div class="sidebar-elems"><p class="location"><a href="index.html">synom</a></p><script>window.sidebarCurrent = {name: "many0", ty: "macro", relpath: ""};</script><script defer src="sidebar-items.js"></script></div></nav><div class="theme-picker"><button id="theme-picker" aria-label="Pick another theme!" aria-haspopup="menu"><img src="../brush.svg" width="18" alt="Pick another theme!"></button><div id="theme-choices" role="menu"></div></div><script src="../theme.js"></script><nav class="sub"><form class="search-form"><div class="search-container"><div><select id="crate-search"><option value="All crates">All crates</option></select><input class="search-input" name="search" disabled autocomplete="off" spellcheck="false" placeholder="Click or press S to search, ? for more options…" type="search"></div><button type="button" class="help-button">?</button>
<a id="settings-menu" href="../settings.html"><img src="../wheel.svg" width="18" alt="Change settings"></a></div></form></nav><section id="main" class="content"><h1 class="fqn"><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">&#x2212;</span>]</a></span><a class="srclink" href="../src/synom/lib.rs.html#524-560" title="goto source code">[src]</a></span><span class="in-band">Macro <a href="index.html">synom</a>::<wbr><a class="macro" href="">many0</a></span></h1><div class="docblock type-decl hidden-by-usual-hider"><div class="example-wrap"><pre class="rust macro">
<span class="macro">macro_rules</span><span class="macro">!</span> <span class="ident">many0</span> {
(<span class="macro-nonterminal">$</span><span class="macro-nonterminal">i</span>:<span class="ident">expr</span>, <span class="macro-nonterminal">$</span><span class="macro-nonterminal">submac</span>:<span class="macro">ident</span><span class="macro">!</span>( $(<span class="macro-nonterminal">$</span><span class="macro-nonterminal">args</span>:<span class="ident">tt</span>)<span class="op">*</span> )) <span class="op">=</span><span class="op">&gt;</span> { ... };
(<span class="macro-nonterminal">$</span><span class="macro-nonterminal">i</span>:<span class="ident">expr</span>, <span class="macro-nonterminal">$</span><span class="macro-nonterminal">f</span>:<span class="ident">expr</span>) <span class="op">=</span><span class="op">&gt;</span> { ... };
}</pre></div>
</div><div class="docblock"><p>Parse zero or more values using the given parser.</p>
<ul>
<li><strong>Syntax:</strong> <code>many0!(THING)</code></li>
<li><strong>Output:</strong> <code>Vec&lt;THING&gt;</code></li>
</ul>
<p>You may also be looking for:</p>
<ul>
<li><code>separated_list!</code> - zero or more values with separator</li>
<li><code>separated_nonempty_list!</code> - one or more values</li>
<li><code>terminated_list!</code> - zero or more, allows trailing separator</li>
</ul>
<div class="example-wrap"><pre class="rust rust-example-rendered">
<span class="kw">extern</span> <span class="kw">crate</span> <span class="ident">syn</span>;
<span class="attribute">#[<span class="ident">macro_use</span>]</span> <span class="kw">extern</span> <span class="kw">crate</span> <span class="ident">synom</span>;
<span class="kw">use</span> <span class="ident">syn</span>::<span class="ident">Item</span>;
<span class="kw">use</span> <span class="ident">syn</span>::<span class="ident">parse</span>::<span class="ident">item</span>;
<span class="macro">named</span><span class="macro">!</span>(<span class="ident">items</span> <span class="op">-</span><span class="op">&gt;</span> <span class="ident">Vec</span><span class="op">&lt;</span><span class="ident">Item</span><span class="op">&gt;</span>, <span class="macro">many0</span><span class="macro">!</span>(<span class="ident">item</span>));
<span class="kw">fn</span> <span class="ident">main</span>() {
<span class="kw">let</span> <span class="ident">input</span> <span class="op">=</span> <span class="string">&quot;
fn a() {}
fn b() {}
&quot;</span>;
<span class="kw">let</span> <span class="ident">parsed</span> <span class="op">=</span> <span class="ident">items</span>(<span class="ident">input</span>).<span class="ident">expect</span>(<span class="string">&quot;items&quot;</span>);
<span class="macro">assert_eq</span><span class="macro">!</span>(<span class="ident">parsed</span>.<span class="ident">len</span>(), <span class="number">2</span>);
<span class="macro">println</span><span class="macro">!</span>(<span class="string">&quot;{:?}&quot;</span>, <span class="ident">parsed</span>);
}</pre></div>
</div></section><section id="search" class="content hidden"></section><section class="footer"></section><script>window.rootPath = "../";window.currentCrate = "synom";</script><script src="../main.js"></script><script defer src="../search-index.js"></script></body></html>
+10
View File
@@ -0,0 +1,10 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta http-equiv="refresh" content="0;URL=macro.map.html">
</head>
<body>
<p>Redirecting to <a href="macro.map.html">macro.map.html</a>...</p>
<script>location.replace("macro.map.html" + location.search + location.hash);</script>
</body>
</html>
+43
View File
@@ -0,0 +1,43 @@
<!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 `map` macro in crate `synom`."><meta name="keywords" content="rust, rustlang, rust-lang, map"><title>synom::map - Rust</title><link rel="stylesheet" type="text/css" href="../normalize.css"><link rel="stylesheet" type="text/css" href="../rustdoc.css" id="mainThemeStyle"><link rel="stylesheet" type="text/css" href="../light.css" id="themeStyle"><link rel="stylesheet" type="text/css" href="../dark.css" disabled ><link rel="stylesheet" type="text/css" href="../ayu.css" disabled ><script id="default-settings"></script><script src="../storage.js"></script><noscript><link rel="stylesheet" href="../noscript.css"></noscript><link rel="icon" type="image/svg+xml" href="../favicon.svg">
<link rel="alternate icon" type="image/png" href="../favicon-16x16.png">
<link rel="alternate icon" type="image/png" href="../favicon-32x32.png"><style type="text/css">#crate-search{background-image:url("../down-arrow.svg");}</style></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"><div class="sidebar-menu">&#9776;</div><a href='../synom/index.html'><div class='logo-container rust-logo'><img src='../rust-logo.png' alt='logo'></div></a><div class="sidebar-elems"><p class="location"><a href="index.html">synom</a></p><script>window.sidebarCurrent = {name: "map", ty: "macro", relpath: ""};</script><script defer src="sidebar-items.js"></script></div></nav><div class="theme-picker"><button id="theme-picker" aria-label="Pick another theme!" aria-haspopup="menu"><img src="../brush.svg" width="18" alt="Pick another theme!"></button><div id="theme-choices" role="menu"></div></div><script src="../theme.js"></script><nav class="sub"><form class="search-form"><div class="search-container"><div><select id="crate-search"><option value="All crates">All crates</option></select><input class="search-input" name="search" disabled autocomplete="off" spellcheck="false" placeholder="Click or press S to search, ? for more options…" type="search"></div><button type="button" class="help-button">?</button>
<a id="settings-menu" href="../settings.html"><img src="../wheel.svg" width="18" alt="Change settings"></a></div></form></nav><section id="main" class="content"><h1 class="fqn"><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">&#x2212;</span>]</a></span><a class="srclink" href="../src/synom/lib.rs.html#193-206" title="goto source code">[src]</a></span><span class="in-band">Macro <a href="index.html">synom</a>::<wbr><a class="macro" href="">map</a></span></h1><div class="docblock type-decl hidden-by-usual-hider"><div class="example-wrap"><pre class="rust macro">
<span class="macro">macro_rules</span><span class="macro">!</span> <span class="ident">map</span> {
(<span class="macro-nonterminal">$</span><span class="macro-nonterminal">i</span>:<span class="ident">expr</span>, <span class="macro-nonterminal">$</span><span class="macro-nonterminal">submac</span>:<span class="macro">ident</span><span class="macro">!</span>( $(<span class="macro-nonterminal">$</span><span class="macro-nonterminal">args</span>:<span class="ident">tt</span>)<span class="op">*</span> ), <span class="macro-nonterminal">$</span><span class="macro-nonterminal">g</span>:<span class="ident">expr</span>) <span class="op">=</span><span class="op">&gt;</span> { ... };
(<span class="macro-nonterminal">$</span><span class="macro-nonterminal">i</span>:<span class="ident">expr</span>, <span class="macro-nonterminal">$</span><span class="macro-nonterminal">f</span>:<span class="ident">expr</span>, <span class="macro-nonterminal">$</span><span class="macro-nonterminal">g</span>:<span class="ident">expr</span>) <span class="op">=</span><span class="op">&gt;</span> { ... };
}</pre></div>
</div><div class="docblock"><p>Transform the result of a parser by applying a function or closure.</p>
<ul>
<li><strong>Syntax:</strong> <code>map!(THING, FN)</code></li>
<li><strong>Output:</strong> the return type of function FN applied to THING</li>
</ul>
<div class="example-wrap"><pre class="rust rust-example-rendered">
<span class="kw">extern</span> <span class="kw">crate</span> <span class="ident">syn</span>;
<span class="attribute">#[<span class="ident">macro_use</span>]</span> <span class="kw">extern</span> <span class="kw">crate</span> <span class="ident">synom</span>;
<span class="kw">use</span> <span class="ident">syn</span>::{<span class="ident">Item</span>, <span class="ident">Ident</span>};
<span class="kw">use</span> <span class="ident">syn</span>::<span class="ident">parse</span>::<span class="ident">item</span>;
<span class="kw">fn</span> <span class="ident">get_item_ident</span>(<span class="ident">item</span>: <span class="ident">Item</span>) <span class="op">-</span><span class="op">&gt;</span> <span class="ident">Ident</span> {
<span class="ident">item</span>.<span class="ident">ident</span>
}
<span class="comment">// Parses an item and returns the name (identifier) of the item only.</span>
<span class="macro">named</span><span class="macro">!</span>(<span class="ident">item_ident</span> <span class="op">-</span><span class="op">&gt;</span> <span class="ident">Ident</span>,
<span class="macro">map</span><span class="macro">!</span>(<span class="ident">item</span>, <span class="ident">get_item_ident</span>)
);
<span class="comment">// Or equivalently:</span>
<span class="macro">named</span><span class="macro">!</span>(<span class="ident">item_ident2</span> <span class="op">-</span><span class="op">&gt;</span> <span class="ident">Ident</span>,
<span class="macro">map</span><span class="macro">!</span>(<span class="ident">item</span>, <span class="op">|</span><span class="ident">i</span>: <span class="ident">Item</span><span class="op">|</span> <span class="ident">i</span>.<span class="ident">ident</span>)
);
<span class="kw">fn</span> <span class="ident">main</span>() {
<span class="kw">let</span> <span class="ident">input</span> <span class="op">=</span> <span class="string">&quot;fn foo() {}&quot;</span>;
<span class="kw">let</span> <span class="ident">parsed</span> <span class="op">=</span> <span class="ident">item_ident</span>(<span class="ident">input</span>).<span class="ident">expect</span>(<span class="string">&quot;item&quot;</span>);
<span class="macro">assert_eq</span><span class="macro">!</span>(<span class="ident">parsed</span>, <span class="string">&quot;foo&quot;</span>);
}</pre></div>
</div></section><section id="search" class="content hidden"></section><section class="footer"></section><script>window.rootPath = "../";window.currentCrate = "synom";</script><script src="../main.js"></script><script defer src="../search-index.js"></script></body></html>
+10
View File
@@ -0,0 +1,10 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta http-equiv="refresh" content="0;URL=macro.named.html">
</head>
<body>
<p>Redirecting to <a href="macro.named.html">macro.named.html</a>...</p>
<script>location.replace("macro.named.html" + location.search + location.hash);</script>
</body>
</html>
+19
View File
@@ -0,0 +1,19 @@
<!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 `named` macro in crate `synom`."><meta name="keywords" content="rust, rustlang, rust-lang, named"><title>synom::named - Rust</title><link rel="stylesheet" type="text/css" href="../normalize.css"><link rel="stylesheet" type="text/css" href="../rustdoc.css" id="mainThemeStyle"><link rel="stylesheet" type="text/css" href="../light.css" id="themeStyle"><link rel="stylesheet" type="text/css" href="../dark.css" disabled ><link rel="stylesheet" type="text/css" href="../ayu.css" disabled ><script id="default-settings"></script><script src="../storage.js"></script><noscript><link rel="stylesheet" href="../noscript.css"></noscript><link rel="icon" type="image/svg+xml" href="../favicon.svg">
<link rel="alternate icon" type="image/png" href="../favicon-16x16.png">
<link rel="alternate icon" type="image/png" href="../favicon-32x32.png"><style type="text/css">#crate-search{background-image:url("../down-arrow.svg");}</style></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"><div class="sidebar-menu">&#9776;</div><a href='../synom/index.html'><div class='logo-container rust-logo'><img src='../rust-logo.png' alt='logo'></div></a><div class="sidebar-elems"><p class="location"><a href="index.html">synom</a></p><script>window.sidebarCurrent = {name: "named", ty: "macro", relpath: ""};</script><script defer src="sidebar-items.js"></script></div></nav><div class="theme-picker"><button id="theme-picker" aria-label="Pick another theme!" aria-haspopup="menu"><img src="../brush.svg" width="18" alt="Pick another theme!"></button><div id="theme-choices" role="menu"></div></div><script src="../theme.js"></script><nav class="sub"><form class="search-form"><div class="search-container"><div><select id="crate-search"><option value="All crates">All crates</option></select><input class="search-input" name="search" disabled autocomplete="off" spellcheck="false" placeholder="Click or press S to search, ? for more options…" type="search"></div><button type="button" class="help-button">?</button>
<a id="settings-menu" href="../settings.html"><img src="../wheel.svg" width="18" alt="Change settings"></a></div></form></nav><section id="main" class="content"><h1 class="fqn"><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">&#x2212;</span>]</a></span><a class="srclink" href="../src/synom/lib.rs.html#98-110" title="goto source code">[src]</a></span><span class="in-band">Macro <a href="index.html">synom</a>::<wbr><a class="macro" href="">named</a></span></h1><div class="docblock type-decl hidden-by-usual-hider"><div class="example-wrap"><pre class="rust macro">
<span class="macro">macro_rules</span><span class="macro">!</span> <span class="ident">named</span> {
(<span class="macro-nonterminal">$</span><span class="macro-nonterminal">name</span>:<span class="ident">ident</span> <span class="op">-</span><span class="op">&gt;</span> <span class="macro-nonterminal">$</span><span class="macro-nonterminal">o</span>:<span class="ident">ty</span>, <span class="macro-nonterminal">$</span><span class="macro-nonterminal">submac</span>:<span class="macro">ident</span><span class="macro">!</span>( $(<span class="macro-nonterminal">$</span><span class="macro-nonterminal">args</span>:<span class="ident">tt</span>)<span class="op">*</span> )) <span class="op">=</span><span class="op">&gt;</span> { ... };
(<span class="kw">pub</span> <span class="macro-nonterminal">$</span><span class="macro-nonterminal">name</span>:<span class="ident">ident</span> <span class="op">-</span><span class="op">&gt;</span> <span class="macro-nonterminal">$</span><span class="macro-nonterminal">o</span>:<span class="ident">ty</span>, <span class="macro-nonterminal">$</span><span class="macro-nonterminal">submac</span>:<span class="macro">ident</span><span class="macro">!</span>( $(<span class="macro-nonterminal">$</span><span class="macro-nonterminal">args</span>:<span class="ident">tt</span>)<span class="op">*</span> )) <span class="op">=</span><span class="op">&gt;</span> { ... };
}</pre></div>
</div><div class="docblock"><p>Define a function from a parser combination.</p>
<ul>
<li><strong>Syntax:</strong> <code>named!(NAME -&gt; TYPE, PARSER)</code> or <code>named!(pub NAME -&gt; TYPE, PARSER)</code></li>
</ul>
<div class="example-wrap"><pre class="rust rust-example-rendered">
<span class="comment">// One or more Rust types separated by commas.</span>
<span class="macro">named</span><span class="macro">!</span>(<span class="kw">pub</span> <span class="ident">comma_separated_types</span> <span class="op">-</span><span class="op">&gt;</span> <span class="ident">Vec</span><span class="op">&lt;</span><span class="ident">Ty</span><span class="op">&gt;</span>,
<span class="macro">separated_nonempty_list</span><span class="macro">!</span>(<span class="macro">punct</span><span class="macro">!</span>(<span class="string">&quot;,&quot;</span>), <span class="ident">ty</span>)
);</pre></div>
</div></section><section id="search" class="content hidden"></section><section class="footer"></section><script>window.rootPath = "../";window.currentCrate = "synom";</script><script src="../main.js"></script><script defer src="../search-index.js"></script></body></html>
+10
View File
@@ -0,0 +1,10 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta http-equiv="refresh" content="0;URL=macro.not.html">
</head>
<body>
<p>Redirecting to <a href="macro.not.html">macro.not.html</a>...</p>
<script>location.replace("macro.not.html" + location.search + location.hash);</script>
</body>
</html>
+37
View File
@@ -0,0 +1,37 @@
<!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 `not` macro in crate `synom`."><meta name="keywords" content="rust, rustlang, rust-lang, not"><title>synom::not - Rust</title><link rel="stylesheet" type="text/css" href="../normalize.css"><link rel="stylesheet" type="text/css" href="../rustdoc.css" id="mainThemeStyle"><link rel="stylesheet" type="text/css" href="../light.css" id="themeStyle"><link rel="stylesheet" type="text/css" href="../dark.css" disabled ><link rel="stylesheet" type="text/css" href="../ayu.css" disabled ><script id="default-settings"></script><script src="../storage.js"></script><noscript><link rel="stylesheet" href="../noscript.css"></noscript><link rel="icon" type="image/svg+xml" href="../favicon.svg">
<link rel="alternate icon" type="image/png" href="../favicon-16x16.png">
<link rel="alternate icon" type="image/png" href="../favicon-32x32.png"><style type="text/css">#crate-search{background-image:url("../down-arrow.svg");}</style></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"><div class="sidebar-menu">&#9776;</div><a href='../synom/index.html'><div class='logo-container rust-logo'><img src='../rust-logo.png' alt='logo'></div></a><div class="sidebar-elems"><p class="location"><a href="index.html">synom</a></p><script>window.sidebarCurrent = {name: "not", ty: "macro", relpath: ""};</script><script defer src="sidebar-items.js"></script></div></nav><div class="theme-picker"><button id="theme-picker" aria-label="Pick another theme!" aria-haspopup="menu"><img src="../brush.svg" width="18" alt="Pick another theme!"></button><div id="theme-choices" role="menu"></div></div><script src="../theme.js"></script><nav class="sub"><form class="search-form"><div class="search-container"><div><select id="crate-search"><option value="All crates">All crates</option></select><input class="search-input" name="search" disabled autocomplete="off" spellcheck="false" placeholder="Click or press S to search, ? for more options…" type="search"></div><button type="button" class="help-button">?</button>
<a id="settings-menu" href="../settings.html"><img src="../wheel.svg" width="18" alt="Change settings"></a></div></form></nav><section id="main" class="content"><h1 class="fqn"><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">&#x2212;</span>]</a></span><a class="srclink" href="../src/synom/lib.rs.html#238-245" title="goto source code">[src]</a></span><span class="in-band">Macro <a href="index.html">synom</a>::<wbr><a class="macro" href="">not</a></span></h1><div class="docblock type-decl hidden-by-usual-hider"><div class="example-wrap"><pre class="rust macro">
<span class="macro">macro_rules</span><span class="macro">!</span> <span class="ident">not</span> {
(<span class="macro-nonterminal">$</span><span class="macro-nonterminal">i</span>:<span class="ident">expr</span>, <span class="macro-nonterminal">$</span><span class="macro-nonterminal">submac</span>:<span class="macro">ident</span><span class="macro">!</span>( $(<span class="macro-nonterminal">$</span><span class="macro-nonterminal">args</span>:<span class="ident">tt</span>)<span class="op">*</span> )) <span class="op">=</span><span class="op">&gt;</span> { ... };
}</pre></div>
</div><div class="docblock"><p>Parses successfully if the given parser fails to parse. Does not consume any
of the input.</p>
<ul>
<li><strong>Syntax:</strong> <code>not!(THING)</code></li>
<li><strong>Output:</strong> <code>()</code></li>
</ul>
<div class="example-wrap"><pre class="rust rust-example-rendered">
<span class="kw">extern</span> <span class="kw">crate</span> <span class="ident">syn</span>;
<span class="attribute">#[<span class="ident">macro_use</span>]</span> <span class="kw">extern</span> <span class="kw">crate</span> <span class="ident">synom</span>;
<span class="kw">use</span> <span class="ident">synom</span>::<span class="ident">IResult</span>;
<span class="comment">// Parses a shebang line like `#!/bin/bash` and returns the part after `#!`.</span>
<span class="comment">// Note that a line starting with `#![` is an inner attribute, not a</span>
<span class="comment">// shebang.</span>
<span class="macro">named</span><span class="macro">!</span>(<span class="ident">shebang</span> <span class="op">-</span><span class="op">&gt;</span> <span class="kw-2">&amp;</span><span class="ident">str</span>, <span class="macro">preceded</span><span class="macro">!</span>(
<span class="macro">tuple</span><span class="macro">!</span>(<span class="macro">tag</span><span class="macro">!</span>(<span class="string">&quot;#!&quot;</span>), <span class="macro">not</span><span class="macro">!</span>(<span class="macro">tag</span><span class="macro">!</span>(<span class="string">&quot;[&quot;</span>))),
<span class="macro">take_until</span><span class="macro">!</span>(<span class="string">&quot;\n&quot;</span>)
));
<span class="kw">fn</span> <span class="ident">main</span>() {
<span class="kw">let</span> <span class="ident">bin_bash</span> <span class="op">=</span> <span class="string">&quot;#!/bin/bash\n&quot;</span>;
<span class="kw">let</span> <span class="ident">parsed</span> <span class="op">=</span> <span class="ident">shebang</span>(<span class="ident">bin_bash</span>).<span class="ident">expect</span>(<span class="string">&quot;shebang&quot;</span>);
<span class="macro">assert_eq</span><span class="macro">!</span>(<span class="ident">parsed</span>, <span class="string">&quot;/bin/bash&quot;</span>);
<span class="kw">let</span> <span class="ident">inner_attr</span> <span class="op">=</span> <span class="string">&quot;#![feature(specialization)]\n&quot;</span>;
<span class="kw">let</span> <span class="ident">err</span> <span class="op">=</span> <span class="ident">shebang</span>(<span class="ident">inner_attr</span>);
<span class="macro">assert_eq</span><span class="macro">!</span>(<span class="ident">err</span>, <span class="ident">IResult</span>::<span class="ident">Error</span>);
}</pre></div>
</div></section><section id="search" class="content hidden"></section><section class="footer"></section><script>window.rootPath = "../";window.currentCrate = "synom";</script><script src="../main.js"></script><script defer src="../search-index.js"></script></body></html>
+10
View File
@@ -0,0 +1,10 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta http-equiv="refresh" content="0;URL=macro.opt_vec.html">
</head>
<body>
<p>Redirecting to <a href="macro.opt_vec.html">macro.opt_vec.html</a>...</p>
<script>location.replace("macro.opt_vec.html" + location.search + location.hash);</script>
</body>
</html>
+46
View File
@@ -0,0 +1,46 @@
<!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 `opt_vec` macro in crate `synom`."><meta name="keywords" content="rust, rustlang, rust-lang, opt_vec"><title>synom::opt_vec - Rust</title><link rel="stylesheet" type="text/css" href="../normalize.css"><link rel="stylesheet" type="text/css" href="../rustdoc.css" id="mainThemeStyle"><link rel="stylesheet" type="text/css" href="../light.css" id="themeStyle"><link rel="stylesheet" type="text/css" href="../dark.css" disabled ><link rel="stylesheet" type="text/css" href="../ayu.css" disabled ><script id="default-settings"></script><script src="../storage.js"></script><noscript><link rel="stylesheet" href="../noscript.css"></noscript><link rel="icon" type="image/svg+xml" href="../favicon.svg">
<link rel="alternate icon" type="image/png" href="../favicon-16x16.png">
<link rel="alternate icon" type="image/png" href="../favicon-32x32.png"><style type="text/css">#crate-search{background-image:url("../down-arrow.svg");}</style></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"><div class="sidebar-menu">&#9776;</div><a href='../synom/index.html'><div class='logo-container rust-logo'><img src='../rust-logo.png' alt='logo'></div></a><div class="sidebar-elems"><p class="location"><a href="index.html">synom</a></p><script>window.sidebarCurrent = {name: "opt_vec", ty: "macro", relpath: ""};</script><script defer src="sidebar-items.js"></script></div></nav><div class="theme-picker"><button id="theme-picker" aria-label="Pick another theme!" aria-haspopup="menu"><img src="../brush.svg" width="18" alt="Pick another theme!"></button><div id="theme-choices" role="menu"></div></div><script src="../theme.js"></script><nav class="sub"><form class="search-form"><div class="search-container"><div><select id="crate-search"><option value="All crates">All crates</option></select><input class="search-input" name="search" disabled autocomplete="off" spellcheck="false" placeholder="Click or press S to search, ? for more options…" type="search"></div><button type="button" class="help-button">?</button>
<a id="settings-menu" href="../settings.html"><img src="../wheel.svg" width="18" alt="Change settings"></a></div></form></nav><section id="main" class="content"><h1 class="fqn"><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">&#x2212;</span>]</a></span><a class="srclink" href="../src/synom/helper.rs.html#173-180" title="goto source code">[src]</a></span><span class="in-band">Macro <a href="index.html">synom</a>::<wbr><a class="macro" href="">opt_vec</a></span></h1><div class="docblock type-decl hidden-by-usual-hider"><div class="example-wrap"><pre class="rust macro">
<span class="macro">macro_rules</span><span class="macro">!</span> <span class="ident">opt_vec</span> {
(<span class="macro-nonterminal">$</span><span class="macro-nonterminal">i</span>:<span class="ident">expr</span>, <span class="macro-nonterminal">$</span><span class="macro-nonterminal">submac</span>:<span class="macro">ident</span><span class="macro">!</span>( $(<span class="macro-nonterminal">$</span><span class="macro-nonterminal">args</span>:<span class="ident">tt</span>)<span class="op">*</span> )) <span class="op">=</span><span class="op">&gt;</span> { ... };
}</pre></div>
</div><div class="docblock"><p>Turn a failed parse into an empty vector. The argument parser must itself
return a vector.</p>
<p>This is often more convenient than <code>option!(...)</code> when the argument produces
a vector.</p>
<ul>
<li><strong>Syntax:</strong> <code>opt_vec!(THING)</code></li>
<li><strong>Output:</strong> <code>THING</code>, which must be <code>Vec&lt;T&gt;</code></li>
</ul>
<div class="example-wrap"><pre class="rust rust-example-rendered">
<span class="kw">extern</span> <span class="kw">crate</span> <span class="ident">syn</span>;
<span class="attribute">#[<span class="ident">macro_use</span>]</span> <span class="kw">extern</span> <span class="kw">crate</span> <span class="ident">synom</span>;
<span class="kw">use</span> <span class="ident">syn</span>::{<span class="ident">Lifetime</span>, <span class="ident">Ty</span>};
<span class="kw">use</span> <span class="ident">syn</span>::<span class="ident">parse</span>::{<span class="ident">lifetime</span>, <span class="ident">ty</span>};
<span class="macro">named</span><span class="macro">!</span>(<span class="ident">bound_lifetimes</span> <span class="op">-</span><span class="op">&gt;</span> (<span class="ident">Vec</span><span class="op">&lt;</span><span class="ident">Lifetime</span><span class="op">&gt;</span>, <span class="ident">Ty</span>), <span class="macro">tuple</span><span class="macro">!</span>(
<span class="macro">opt_vec</span><span class="macro">!</span>(<span class="macro">do_parse</span><span class="macro">!</span>(
<span class="macro">keyword</span><span class="macro">!</span>(<span class="string">&quot;for&quot;</span>) <span class="op">&gt;</span><span class="op">&gt;</span>
<span class="macro">punct</span><span class="macro">!</span>(<span class="string">&quot;&lt;&quot;</span>) <span class="op">&gt;</span><span class="op">&gt;</span>
<span class="ident">lifetimes</span>: <span class="macro">terminated_list</span><span class="macro">!</span>(<span class="macro">punct</span><span class="macro">!</span>(<span class="string">&quot;,&quot;</span>), <span class="ident">lifetime</span>) <span class="op">&gt;</span><span class="op">&gt;</span>
<span class="macro">punct</span><span class="macro">!</span>(<span class="string">&quot;&gt;&quot;</span>) <span class="op">&gt;</span><span class="op">&gt;</span>
(<span class="ident">lifetimes</span>)
)),
<span class="ident">ty</span>
));
<span class="kw">fn</span> <span class="ident">main</span>() {
<span class="kw">let</span> <span class="ident">input</span> <span class="op">=</span> <span class="string">&quot;for&lt;&#39;a, &#39;b&gt; fn(&amp;&#39;a A) -&gt; &amp;&#39;b B&quot;</span>;
<span class="kw">let</span> <span class="ident">parsed</span> <span class="op">=</span> <span class="ident">bound_lifetimes</span>(<span class="ident">input</span>).<span class="ident">expect</span>(<span class="string">&quot;bound lifetimes&quot;</span>);
<span class="macro">assert_eq</span><span class="macro">!</span>(<span class="ident">parsed</span>.<span class="number">0</span>, [<span class="ident">Lifetime</span>::<span class="ident">new</span>(<span class="string">&quot;&#39;a&quot;</span>), <span class="ident">Lifetime</span>::<span class="ident">new</span>(<span class="string">&quot;&#39;b&quot;</span>)]);
<span class="macro">println</span><span class="macro">!</span>(<span class="string">&quot;{:?}&quot;</span>, <span class="ident">parsed</span>);
<span class="kw">let</span> <span class="ident">input</span> <span class="op">=</span> <span class="string">&quot;From&lt;String&gt;&quot;</span>;
<span class="kw">let</span> <span class="ident">parsed</span> <span class="op">=</span> <span class="ident">bound_lifetimes</span>(<span class="ident">input</span>).<span class="ident">expect</span>(<span class="string">&quot;bound lifetimes&quot;</span>);
<span class="macro">assert</span><span class="macro">!</span>(<span class="ident">parsed</span>.<span class="number">0</span>.<span class="ident">is_empty</span>());
<span class="macro">println</span><span class="macro">!</span>(<span class="string">&quot;{:?}&quot;</span>, <span class="ident">parsed</span>);
}</pre></div>
</div></section><section id="search" class="content hidden"></section><section class="footer"></section><script>window.rootPath = "../";window.currentCrate = "synom";</script><script src="../main.js"></script><script defer src="../search-index.js"></script></body></html>
+10
View File
@@ -0,0 +1,10 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta http-equiv="refresh" content="0;URL=macro.option.html">
</head>
<body>
<p>Redirecting to <a href="macro.option.html">macro.option.html</a>...</p>
<script>location.replace("macro.option.html" + location.search + location.hash);</script>
</body>
</html>
+30
View File
@@ -0,0 +1,30 @@
<!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 `option` macro in crate `synom`."><meta name="keywords" content="rust, rustlang, rust-lang, option"><title>synom::option - Rust</title><link rel="stylesheet" type="text/css" href="../normalize.css"><link rel="stylesheet" type="text/css" href="../rustdoc.css" id="mainThemeStyle"><link rel="stylesheet" type="text/css" href="../light.css" id="themeStyle"><link rel="stylesheet" type="text/css" href="../dark.css" disabled ><link rel="stylesheet" type="text/css" href="../ayu.css" disabled ><script id="default-settings"></script><script src="../storage.js"></script><noscript><link rel="stylesheet" href="../noscript.css"></noscript><link rel="icon" type="image/svg+xml" href="../favicon.svg">
<link rel="alternate icon" type="image/png" href="../favicon-16x16.png">
<link rel="alternate icon" type="image/png" href="../favicon-32x32.png"><style type="text/css">#crate-search{background-image:url("../down-arrow.svg");}</style></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"><div class="sidebar-menu">&#9776;</div><a href='../synom/index.html'><div class='logo-container rust-logo'><img src='../rust-logo.png' alt='logo'></div></a><div class="sidebar-elems"><p class="location"><a href="index.html">synom</a></p><script>window.sidebarCurrent = {name: "option", ty: "macro", relpath: ""};</script><script defer src="sidebar-items.js"></script></div></nav><div class="theme-picker"><button id="theme-picker" aria-label="Pick another theme!" aria-haspopup="menu"><img src="../brush.svg" width="18" alt="Pick another theme!"></button><div id="theme-choices" role="menu"></div></div><script src="../theme.js"></script><nav class="sub"><form class="search-form"><div class="search-container"><div><select id="crate-search"><option value="All crates">All crates</option></select><input class="search-input" name="search" disabled autocomplete="off" spellcheck="false" placeholder="Click or press S to search, ? for more options…" type="search"></div><button type="button" class="help-button">?</button>
<a id="settings-menu" href="../settings.html"><img src="../wheel.svg" width="18" alt="Change settings"></a></div></form></nav><section id="main" class="content"><h1 class="fqn"><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">&#x2212;</span>]</a></span><a class="srclink" href="../src/synom/helper.rs.html#120-131" title="goto source code">[src]</a></span><span class="in-band">Macro <a href="index.html">synom</a>::<wbr><a class="macro" href="">option</a></span></h1><div class="docblock type-decl hidden-by-usual-hider"><div class="example-wrap"><pre class="rust macro">
<span class="macro">macro_rules</span><span class="macro">!</span> <span class="ident">option</span> {
(<span class="macro-nonterminal">$</span><span class="macro-nonterminal">i</span>:<span class="ident">expr</span>, <span class="macro-nonterminal">$</span><span class="macro-nonterminal">submac</span>:<span class="macro">ident</span><span class="macro">!</span>( $(<span class="macro-nonterminal">$</span><span class="macro-nonterminal">args</span>:<span class="ident">tt</span>)<span class="op">*</span> )) <span class="op">=</span><span class="op">&gt;</span> { ... };
(<span class="macro-nonterminal">$</span><span class="macro-nonterminal">i</span>:<span class="ident">expr</span>, <span class="macro-nonterminal">$</span><span class="macro-nonterminal">f</span>:<span class="ident">expr</span>) <span class="op">=</span><span class="op">&gt;</span> { ... };
}</pre></div>
</div><div class="docblock"><p>Turn a failed parse into <code>None</code> and a successful parse into <code>Some</code>.</p>
<ul>
<li><strong>Syntax:</strong> <code>option!(THING)</code></li>
<li><strong>Output:</strong> <code>Option&lt;THING&gt;</code></li>
</ul>
<div class="example-wrap"><pre class="rust rust-example-rendered">
<span class="kw">extern</span> <span class="kw">crate</span> <span class="ident">syn</span>;
<span class="attribute">#[<span class="ident">macro_use</span>]</span> <span class="kw">extern</span> <span class="kw">crate</span> <span class="ident">synom</span>;
<span class="macro">named</span><span class="macro">!</span>(<span class="ident">maybe_bang</span> <span class="op">-</span><span class="op">&gt;</span> <span class="prelude-ty">Option</span><span class="op">&lt;</span><span class="kw-2">&amp;</span><span class="ident">str</span><span class="op">&gt;</span>, <span class="macro">option</span><span class="macro">!</span>(<span class="macro">punct</span><span class="macro">!</span>(<span class="string">&quot;!&quot;</span>)));
<span class="kw">fn</span> <span class="ident">main</span>() {
<span class="kw">let</span> <span class="ident">input</span> <span class="op">=</span> <span class="string">&quot;!&quot;</span>;
<span class="kw">let</span> <span class="ident">parsed</span> <span class="op">=</span> <span class="ident">maybe_bang</span>(<span class="ident">input</span>).<span class="ident">expect</span>(<span class="string">&quot;maybe bang&quot;</span>);
<span class="macro">assert_eq</span><span class="macro">!</span>(<span class="ident">parsed</span>, <span class="prelude-val">Some</span>(<span class="string">&quot;!&quot;</span>));
<span class="kw">let</span> <span class="ident">input</span> <span class="op">=</span> <span class="string">&quot;&quot;</span>;
<span class="kw">let</span> <span class="ident">parsed</span> <span class="op">=</span> <span class="ident">maybe_bang</span>(<span class="ident">input</span>).<span class="ident">expect</span>(<span class="string">&quot;maybe bang&quot;</span>);
<span class="macro">assert_eq</span><span class="macro">!</span>(<span class="ident">parsed</span>, <span class="prelude-val">None</span>);
}</pre></div>
</div></section><section id="search" class="content hidden"></section><section class="footer"></section><script>window.rootPath = "../";window.currentCrate = "synom";</script><script src="../main.js"></script><script defer src="../search-index.js"></script></body></html>
+10
View File
@@ -0,0 +1,10 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta http-equiv="refresh" content="0;URL=macro.peek.html">
</head>
<body>
<p>Redirecting to <a href="macro.peek.html">macro.peek.html</a>...</p>
<script>location.replace("macro.peek.html" + location.search + location.hash);</script>
</body>
</html>
+39
View File
@@ -0,0 +1,39 @@
<!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 `peek` macro in crate `synom`."><meta name="keywords" content="rust, rustlang, rust-lang, peek"><title>synom::peek - Rust</title><link rel="stylesheet" type="text/css" href="../normalize.css"><link rel="stylesheet" type="text/css" href="../rustdoc.css" id="mainThemeStyle"><link rel="stylesheet" type="text/css" href="../light.css" id="themeStyle"><link rel="stylesheet" type="text/css" href="../dark.css" disabled ><link rel="stylesheet" type="text/css" href="../ayu.css" disabled ><script id="default-settings"></script><script src="../storage.js"></script><noscript><link rel="stylesheet" href="../noscript.css"></noscript><link rel="icon" type="image/svg+xml" href="../favicon.svg">
<link rel="alternate icon" type="image/png" href="../favicon-16x16.png">
<link rel="alternate icon" type="image/png" href="../favicon-32x32.png"><style type="text/css">#crate-search{background-image:url("../down-arrow.svg");}</style></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"><div class="sidebar-menu">&#9776;</div><a href='../synom/index.html'><div class='logo-container rust-logo'><img src='../rust-logo.png' alt='logo'></div></a><div class="sidebar-elems"><p class="location"><a href="index.html">synom</a></p><script>window.sidebarCurrent = {name: "peek", ty: "macro", relpath: ""};</script><script defer src="sidebar-items.js"></script></div></nav><div class="theme-picker"><button id="theme-picker" aria-label="Pick another theme!" aria-haspopup="menu"><img src="../brush.svg" width="18" alt="Pick another theme!"></button><div id="theme-choices" role="menu"></div></div><script src="../theme.js"></script><nav class="sub"><form class="search-form"><div class="search-container"><div><select id="crate-search"><option value="All crates">All crates</option></select><input class="search-input" name="search" disabled autocomplete="off" spellcheck="false" placeholder="Click or press S to search, ? for more options…" type="search"></div><button type="button" class="help-button">?</button>
<a id="settings-menu" href="../settings.html"><img src="../wheel.svg" width="18" alt="Change settings"></a></div></form></nav><section id="main" class="content"><h1 class="fqn"><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">&#x2212;</span>]</a></span><a class="srclink" href="../src/synom/lib.rs.html#625-636" title="goto source code">[src]</a></span><span class="in-band">Macro <a href="index.html">synom</a>::<wbr><a class="macro" href="">peek</a></span></h1><div class="docblock type-decl hidden-by-usual-hider"><div class="example-wrap"><pre class="rust macro">
<span class="macro">macro_rules</span><span class="macro">!</span> <span class="ident">peek</span> {
(<span class="macro-nonterminal">$</span><span class="macro-nonterminal">i</span>:<span class="ident">expr</span>, <span class="macro-nonterminal">$</span><span class="macro-nonterminal">submac</span>:<span class="macro">ident</span><span class="macro">!</span>( $(<span class="macro-nonterminal">$</span><span class="macro-nonterminal">args</span>:<span class="ident">tt</span>)<span class="op">*</span> )) <span class="op">=</span><span class="op">&gt;</span> { ... };
(<span class="macro-nonterminal">$</span><span class="macro-nonterminal">i</span>:<span class="ident">expr</span>, <span class="macro-nonterminal">$</span><span class="macro-nonterminal">f</span>:<span class="ident">expr</span>) <span class="op">=</span><span class="op">&gt;</span> { ... };
}</pre></div>
</div><div class="docblock"><p>Parse a value without consuming it from the input data.</p>
<ul>
<li><strong>Syntax:</strong> <code>peek!(THING)</code></li>
<li><strong>Output:</strong> <code>THING</code></li>
</ul>
<div class="example-wrap"><pre class="rust rust-example-rendered">
<span class="kw">extern</span> <span class="kw">crate</span> <span class="ident">syn</span>;
<span class="attribute">#[<span class="ident">macro_use</span>]</span> <span class="kw">extern</span> <span class="kw">crate</span> <span class="ident">synom</span>;
<span class="kw">use</span> <span class="ident">syn</span>::<span class="ident">Expr</span>;
<span class="kw">use</span> <span class="ident">syn</span>::<span class="ident">parse</span>::{<span class="ident">ident</span>, <span class="ident">expr</span>};
<span class="kw">use</span> <span class="ident">synom</span>::<span class="ident">IResult</span>;
<span class="comment">// Parse an expression that begins with an identifier.</span>
<span class="macro">named</span><span class="macro">!</span>(<span class="ident">ident_expr</span> <span class="op">-</span><span class="op">&gt;</span> <span class="ident">Expr</span>,
<span class="macro">preceded</span><span class="macro">!</span>(<span class="macro">peek</span><span class="macro">!</span>(<span class="ident">ident</span>), <span class="ident">expr</span>)
);
<span class="kw">fn</span> <span class="ident">main</span>() {
<span class="comment">// begins with an identifier</span>
<span class="kw">let</span> <span class="ident">input</span> <span class="op">=</span> <span class="string">&quot;banana + 1&quot;</span>;
<span class="kw">let</span> <span class="ident">parsed</span> <span class="op">=</span> <span class="ident">ident_expr</span>(<span class="ident">input</span>).<span class="ident">expect</span>(<span class="string">&quot;ident&quot;</span>);
<span class="macro">println</span><span class="macro">!</span>(<span class="string">&quot;{:?}&quot;</span>, <span class="ident">parsed</span>);
<span class="comment">// does not begin with an identifier</span>
<span class="kw">let</span> <span class="ident">input</span> <span class="op">=</span> <span class="string">&quot;1 + banana&quot;</span>;
<span class="kw">let</span> <span class="ident">err</span> <span class="op">=</span> <span class="ident">ident_expr</span>(<span class="ident">input</span>);
<span class="macro">assert_eq</span><span class="macro">!</span>(<span class="ident">err</span>, <span class="ident">IResult</span>::<span class="ident">Error</span>);
}</pre></div>
</div></section><section id="search" class="content hidden"></section><section class="footer"></section><script>window.rootPath = "../";window.currentCrate = "synom";</script><script src="../main.js"></script><script defer src="../search-index.js"></script></body></html>
+10
View File
@@ -0,0 +1,10 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta http-equiv="refresh" content="0;URL=macro.preceded.html">
</head>
<body>
<p>Redirecting to <a href="macro.preceded.html">macro.preceded.html</a>...</p>
<script>location.replace("macro.preceded.html" + location.search + location.hash);</script>
</body>
</html>
+36
View File
@@ -0,0 +1,36 @@
<!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 `preceded` macro in crate `synom`."><meta name="keywords" content="rust, rustlang, rust-lang, preceded"><title>synom::preceded - Rust</title><link rel="stylesheet" type="text/css" href="../normalize.css"><link rel="stylesheet" type="text/css" href="../rustdoc.css" id="mainThemeStyle"><link rel="stylesheet" type="text/css" href="../light.css" id="themeStyle"><link rel="stylesheet" type="text/css" href="../dark.css" disabled ><link rel="stylesheet" type="text/css" href="../ayu.css" disabled ><script id="default-settings"></script><script src="../storage.js"></script><noscript><link rel="stylesheet" href="../noscript.css"></noscript><link rel="icon" type="image/svg+xml" href="../favicon.svg">
<link rel="alternate icon" type="image/png" href="../favicon-16x16.png">
<link rel="alternate icon" type="image/png" href="../favicon-32x32.png"><style type="text/css">#crate-search{background-image:url("../down-arrow.svg");}</style></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"><div class="sidebar-menu">&#9776;</div><a href='../synom/index.html'><div class='logo-container rust-logo'><img src='../rust-logo.png' alt='logo'></div></a><div class="sidebar-elems"><p class="location"><a href="index.html">synom</a></p><script>window.sidebarCurrent = {name: "preceded", ty: "macro", relpath: ""};</script><script defer src="sidebar-items.js"></script></div></nav><div class="theme-picker"><button id="theme-picker" aria-label="Pick another theme!" aria-haspopup="menu"><img src="../brush.svg" width="18" alt="Pick another theme!"></button><div id="theme-choices" role="menu"></div></div><script src="../theme.js"></script><nav class="sub"><form class="search-form"><div class="search-container"><div><select id="crate-search"><option value="All crates">All crates</option></select><input class="search-input" name="search" disabled autocomplete="off" spellcheck="false" placeholder="Click or press S to search, ? for more options…" type="search"></div><button type="button" class="help-button">?</button>
<a id="settings-menu" href="../settings.html"><img src="../wheel.svg" width="18" alt="Change settings"></a></div></form></nav><section id="main" class="content"><h1 class="fqn"><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">&#x2212;</span>]</a></span><a class="srclink" href="../src/synom/lib.rs.html#423-442" title="goto source code">[src]</a></span><span class="in-band">Macro <a href="index.html">synom</a>::<wbr><a class="macro" href="">preceded</a></span></h1><div class="docblock type-decl hidden-by-usual-hider"><div class="example-wrap"><pre class="rust macro">
<span class="macro">macro_rules</span><span class="macro">!</span> <span class="ident">preceded</span> {
(<span class="macro-nonterminal">$</span><span class="macro-nonterminal">i</span>:<span class="ident">expr</span>, <span class="macro-nonterminal">$</span><span class="macro-nonterminal">submac</span>:<span class="macro">ident</span><span class="macro">!</span>( $(<span class="macro-nonterminal">$</span><span class="macro-nonterminal">args</span>:<span class="ident">tt</span>)<span class="op">*</span> ), <span class="macro-nonterminal">$</span><span class="macro-nonterminal">submac2</span>:<span class="macro">ident</span><span class="macro">!</span>( $(<span class="macro-nonterminal">$</span><span class="macro-nonterminal">args2</span>:<span class="ident">tt</span>)<span class="op">*</span> )) <span class="op">=</span><span class="op">&gt;</span> { ... };
(<span class="macro-nonterminal">$</span><span class="macro-nonterminal">i</span>:<span class="ident">expr</span>, <span class="macro-nonterminal">$</span><span class="macro-nonterminal">submac</span>:<span class="macro">ident</span><span class="macro">!</span>( $(<span class="macro-nonterminal">$</span><span class="macro-nonterminal">args</span>:<span class="ident">tt</span>)<span class="op">*</span> ), <span class="macro-nonterminal">$</span><span class="macro-nonterminal">g</span>:<span class="ident">expr</span>) <span class="op">=</span><span class="op">&gt;</span> { ... };
(<span class="macro-nonterminal">$</span><span class="macro-nonterminal">i</span>:<span class="ident">expr</span>, <span class="macro-nonterminal">$</span><span class="macro-nonterminal">f</span>:<span class="ident">expr</span>, <span class="macro-nonterminal">$</span><span class="macro-nonterminal">submac</span>:<span class="macro">ident</span><span class="macro">!</span>( $(<span class="macro-nonterminal">$</span><span class="macro-nonterminal">args</span>:<span class="ident">tt</span>)<span class="op">*</span> )) <span class="op">=</span><span class="op">&gt;</span> { ... };
(<span class="macro-nonterminal">$</span><span class="macro-nonterminal">i</span>:<span class="ident">expr</span>, <span class="macro-nonterminal">$</span><span class="macro-nonterminal">f</span>:<span class="ident">expr</span>, <span class="macro-nonterminal">$</span><span class="macro-nonterminal">g</span>:<span class="ident">expr</span>) <span class="op">=</span><span class="op">&gt;</span> { ... };
}</pre></div>
</div><div class="docblock"><p>Parse two things, returning the value of the second.</p>
<ul>
<li><strong>Syntax:</strong> <code>preceded!(BEFORE, THING)</code></li>
<li><strong>Output:</strong> <code>THING</code></li>
</ul>
<div class="example-wrap"><pre class="rust rust-example-rendered">
<span class="kw">extern</span> <span class="kw">crate</span> <span class="ident">syn</span>;
<span class="attribute">#[<span class="ident">macro_use</span>]</span> <span class="kw">extern</span> <span class="kw">crate</span> <span class="ident">synom</span>;
<span class="kw">use</span> <span class="ident">syn</span>::<span class="ident">Expr</span>;
<span class="kw">use</span> <span class="ident">syn</span>::<span class="ident">parse</span>::<span class="ident">expr</span>;
<span class="comment">// An expression preceded by ##.</span>
<span class="macro">named</span><span class="macro">!</span>(<span class="ident">pound_pound_expr</span> <span class="op">-</span><span class="op">&gt;</span> <span class="ident">Expr</span>,
<span class="macro">preceded</span><span class="macro">!</span>(<span class="macro">punct</span><span class="macro">!</span>(<span class="string">&quot;##&quot;</span>), <span class="ident">expr</span>)
);
<span class="kw">fn</span> <span class="ident">main</span>() {
<span class="kw">let</span> <span class="ident">input</span> <span class="op">=</span> <span class="string">&quot;## 1 + 1&quot;</span>;
<span class="kw">let</span> <span class="ident">parsed</span> <span class="op">=</span> <span class="ident">pound_pound_expr</span>(<span class="ident">input</span>).<span class="ident">expect</span>(<span class="string">&quot;pound pound expr&quot;</span>);
<span class="macro">println</span><span class="macro">!</span>(<span class="string">&quot;{:?}&quot;</span>, <span class="ident">parsed</span>);
}</pre></div>
</div></section><section id="search" class="content hidden"></section><section class="footer"></section><script>window.rootPath = "../";window.currentCrate = "synom";</script><script src="../main.js"></script><script defer src="../search-index.js"></script></body></html>
+10
View File
@@ -0,0 +1,10 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta http-equiv="refresh" content="0;URL=macro.punct.html">
</head>
<body>
<p>Redirecting to <a href="macro.punct.html">macro.punct.html</a>...</p>
<script>location.replace("macro.punct.html" + location.search + location.hash);</script>
</body>
</html>
+30
View File
@@ -0,0 +1,30 @@
<!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 `punct` macro in crate `synom`."><meta name="keywords" content="rust, rustlang, rust-lang, punct"><title>synom::punct - Rust</title><link rel="stylesheet" type="text/css" href="../normalize.css"><link rel="stylesheet" type="text/css" href="../rustdoc.css" id="mainThemeStyle"><link rel="stylesheet" type="text/css" href="../light.css" id="themeStyle"><link rel="stylesheet" type="text/css" href="../dark.css" disabled ><link rel="stylesheet" type="text/css" href="../ayu.css" disabled ><script id="default-settings"></script><script src="../storage.js"></script><noscript><link rel="stylesheet" href="../noscript.css"></noscript><link rel="icon" type="image/svg+xml" href="../favicon.svg">
<link rel="alternate icon" type="image/png" href="../favicon-16x16.png">
<link rel="alternate icon" type="image/png" href="../favicon-32x32.png"><style type="text/css">#crate-search{background-image:url("../down-arrow.svg");}</style></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"><div class="sidebar-menu">&#9776;</div><a href='../synom/index.html'><div class='logo-container rust-logo'><img src='../rust-logo.png' alt='logo'></div></a><div class="sidebar-elems"><p class="location"><a href="index.html">synom</a></p><script>window.sidebarCurrent = {name: "punct", ty: "macro", relpath: ""};</script><script defer src="sidebar-items.js"></script></div></nav><div class="theme-picker"><button id="theme-picker" aria-label="Pick another theme!" aria-haspopup="menu"><img src="../brush.svg" width="18" alt="Pick another theme!"></button><div id="theme-choices" role="menu"></div></div><script src="../theme.js"></script><nav class="sub"><form class="search-form"><div class="search-container"><div><select id="crate-search"><option value="All crates">All crates</option></select><input class="search-input" name="search" disabled autocomplete="off" spellcheck="false" placeholder="Click or press S to search, ? for more options…" type="search"></div><button type="button" class="help-button">?</button>
<a id="settings-menu" href="../settings.html"><img src="../wheel.svg" width="18" alt="Change settings"></a></div></form></nav><section id="main" class="content"><h1 class="fqn"><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">&#x2212;</span>]</a></span><a class="srclink" href="../src/synom/helper.rs.html#28-32" title="goto source code">[src]</a></span><span class="in-band">Macro <a href="index.html">synom</a>::<wbr><a class="macro" href="">punct</a></span></h1><div class="docblock type-decl hidden-by-usual-hider"><div class="example-wrap"><pre class="rust macro">
<span class="macro">macro_rules</span><span class="macro">!</span> <span class="ident">punct</span> {
(<span class="macro-nonterminal">$</span><span class="macro-nonterminal">i</span>:<span class="ident">expr</span>, <span class="macro-nonterminal">$</span><span class="macro-nonterminal">punct</span>:<span class="ident">expr</span>) <span class="op">=</span><span class="op">&gt;</span> { ... };
}</pre></div>
</div><div class="docblock"><p>Parse a piece of punctuation like &quot;+&quot; or &quot;+=&quot;.</p>
<p>See also <code>keyword!</code> for parsing keywords, which are subtly different from
punctuation.</p>
<ul>
<li><strong>Syntax:</strong> <code>punct!(&quot;...&quot;)</code></li>
<li><strong>Output:</strong> <code>&amp;str</code></li>
</ul>
<div class="example-wrap"><pre class="rust rust-example-rendered">
<span class="kw">extern</span> <span class="kw">crate</span> <span class="ident">syn</span>;
<span class="attribute">#[<span class="ident">macro_use</span>]</span> <span class="kw">extern</span> <span class="kw">crate</span> <span class="ident">synom</span>;
<span class="comment">// Parse zero or more bangs.</span>
<span class="macro">named</span><span class="macro">!</span>(<span class="ident">many_bangs</span> <span class="op">-</span><span class="op">&gt;</span> <span class="ident">Vec</span><span class="op">&lt;</span><span class="kw-2">&amp;</span><span class="ident">str</span><span class="op">&gt;</span>,
<span class="macro">many0</span><span class="macro">!</span>(<span class="macro">punct</span><span class="macro">!</span>(<span class="string">&quot;!&quot;</span>))
);
<span class="kw">fn</span> <span class="ident">main</span>() {
<span class="kw">let</span> <span class="ident">input</span> <span class="op">=</span> <span class="string">&quot;!! !&quot;</span>;
<span class="kw">let</span> <span class="ident">parsed</span> <span class="op">=</span> <span class="ident">many_bangs</span>(<span class="ident">input</span>).<span class="ident">expect</span>(<span class="string">&quot;bangs&quot;</span>);
<span class="macro">assert_eq</span><span class="macro">!</span>(<span class="ident">parsed</span>, [<span class="string">&quot;!&quot;</span>, <span class="string">&quot;!&quot;</span>, <span class="string">&quot;!&quot;</span>]);
}</pre></div>
</div></section><section id="search" class="content hidden"></section><section class="footer"></section><script>window.rootPath = "../";window.currentCrate = "synom";</script><script src="../main.js"></script><script defer src="../search-index.js"></script></body></html>
+10
View File
@@ -0,0 +1,10 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta http-equiv="refresh" content="0;URL=macro.separated_list.html">
</head>
<body>
<p>Redirecting to <a href="macro.separated_list.html">macro.separated_list.html</a>...</p>
<script>location.replace("macro.separated_list.html" + location.search + location.hash);</script>
</body>
</html>
+66
View File
@@ -0,0 +1,66 @@
<!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 `separated_list` macro in crate `synom`."><meta name="keywords" content="rust, rustlang, rust-lang, separated_list"><title>synom::separated_list - Rust</title><link rel="stylesheet" type="text/css" href="../normalize.css"><link rel="stylesheet" type="text/css" href="../rustdoc.css" id="mainThemeStyle"><link rel="stylesheet" type="text/css" href="../light.css" id="themeStyle"><link rel="stylesheet" type="text/css" href="../dark.css" disabled ><link rel="stylesheet" type="text/css" href="../ayu.css" disabled ><script id="default-settings"></script><script src="../storage.js"></script><noscript><link rel="stylesheet" href="../noscript.css"></noscript><link rel="icon" type="image/svg+xml" href="../favicon.svg">
<link rel="alternate icon" type="image/png" href="../favicon-16x16.png">
<link rel="alternate icon" type="image/png" href="../favicon-32x32.png"><style type="text/css">#crate-search{background-image:url("../down-arrow.svg");}</style></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"><div class="sidebar-menu">&#9776;</div><a href='../synom/index.html'><div class='logo-container rust-logo'><img src='../rust-logo.png' alt='logo'></div></a><div class="sidebar-elems"><p class="location"><a href="index.html">synom</a></p><script>window.sidebarCurrent = {name: "separated_list", ty: "macro", relpath: ""};</script><script defer src="sidebar-items.js"></script></div></nav><div class="theme-picker"><button id="theme-picker" aria-label="Pick another theme!" aria-haspopup="menu"><img src="../brush.svg" width="18" alt="Pick another theme!"></button><div id="theme-choices" role="menu"></div></div><script src="../theme.js"></script><nav class="sub"><form class="search-form"><div class="search-container"><div><select id="crate-search"><option value="All crates">All crates</option></select><input class="search-input" name="search" disabled autocomplete="off" spellcheck="false" placeholder="Click or press S to search, ? for more options…" type="search"></div><button type="button" class="help-button">?</button>
<a id="settings-menu" href="../settings.html"><img src="../wheel.svg" width="18" alt="Change settings"></a></div></form></nav><section id="main" class="content"><h1 class="fqn"><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">&#x2212;</span>]</a></span><a class="srclink" href="../src/synom/helper.rs.html#327-381" title="goto source code">[src]</a></span><span class="in-band">Macro <a href="index.html">synom</a>::<wbr><a class="macro" href="">separated_list</a></span></h1><div class="docblock type-decl hidden-by-usual-hider"><div class="example-wrap"><pre class="rust macro">
<span class="macro">macro_rules</span><span class="macro">!</span> <span class="ident">separated_list</span> {
(<span class="macro-nonterminal">$</span><span class="macro-nonterminal">i</span>:<span class="ident">expr</span>, <span class="macro">punct</span><span class="macro">!</span>(<span class="macro-nonterminal">$</span><span class="macro-nonterminal">sep</span>:<span class="ident">expr</span>), <span class="macro-nonterminal">$</span><span class="macro-nonterminal">f</span>:<span class="ident">ident</span>) <span class="op">=</span><span class="op">&gt;</span> { ... };
(<span class="macro-nonterminal">$</span><span class="macro-nonterminal">i</span>:<span class="ident">expr</span>, <span class="macro-nonterminal">$</span><span class="macro-nonterminal">sepmac</span>:<span class="macro">ident</span><span class="macro">!</span>( $(<span class="macro-nonterminal">$</span><span class="macro-nonterminal">separgs</span>:<span class="ident">tt</span>)<span class="op">*</span> ), <span class="macro-nonterminal">$</span><span class="macro-nonterminal">fmac</span>:<span class="macro">ident</span><span class="macro">!</span>( $(<span class="macro-nonterminal">$</span><span class="macro-nonterminal">fargs</span>:<span class="ident">tt</span>)<span class="op">*</span> )) <span class="op">=</span><span class="op">&gt;</span> { ... };
(<span class="macro-nonterminal">$</span><span class="macro-nonterminal">i</span>:<span class="ident">expr</span>, <span class="macro-nonterminal">$</span><span class="macro-nonterminal">sepmac</span>:<span class="macro">ident</span><span class="macro">!</span>( $(<span class="macro-nonterminal">$</span><span class="macro-nonterminal">separgs</span>:<span class="ident">tt</span>)<span class="op">*</span> ), <span class="macro-nonterminal">$</span><span class="macro-nonterminal">f</span>:<span class="ident">expr</span>) <span class="op">=</span><span class="op">&gt;</span> { ... };
(<span class="macro-nonterminal">$</span><span class="macro-nonterminal">i</span>:<span class="ident">expr</span>, <span class="macro-nonterminal">$</span><span class="macro-nonterminal">sep</span>:<span class="ident">expr</span>, <span class="macro-nonterminal">$</span><span class="macro-nonterminal">fmac</span>:<span class="macro">ident</span><span class="macro">!</span>( $(<span class="macro-nonterminal">$</span><span class="macro-nonterminal">fargs</span>:<span class="ident">tt</span>)<span class="op">*</span> )) <span class="op">=</span><span class="op">&gt;</span> { ... };
(<span class="macro-nonterminal">$</span><span class="macro-nonterminal">i</span>:<span class="ident">expr</span>, <span class="macro-nonterminal">$</span><span class="macro-nonterminal">sep</span>:<span class="ident">expr</span>, <span class="macro-nonterminal">$</span><span class="macro-nonterminal">f</span>:<span class="ident">expr</span>) <span class="op">=</span><span class="op">&gt;</span> { ... };
}</pre></div>
</div><div class="docblock"><p>Zero or more values separated by some separator. Does not allow a trailing
seperator.</p>
<ul>
<li><strong>Syntax:</strong> <code>separated_list!(punct!(&quot;...&quot;), THING)</code></li>
<li><strong>Output:</strong> <code>Vec&lt;THING&gt;</code></li>
</ul>
<p>You may also be looking for:</p>
<ul>
<li><code>separated_nonempty_list!</code> - one or more values</li>
<li><code>terminated_list!</code> - zero or more, allows trailing separator</li>
<li><code>many0!</code> - zero or more, no separator</li>
</ul>
<div class="example-wrap"><pre class="rust rust-example-rendered">
<span class="kw">extern</span> <span class="kw">crate</span> <span class="ident">syn</span>;
<span class="attribute">#[<span class="ident">macro_use</span>]</span> <span class="kw">extern</span> <span class="kw">crate</span> <span class="ident">synom</span>;
<span class="kw">use</span> <span class="ident">syn</span>::<span class="ident">Expr</span>;
<span class="kw">use</span> <span class="ident">syn</span>::<span class="ident">parse</span>::<span class="ident">expr</span>;
<span class="macro">named</span><span class="macro">!</span>(<span class="ident">expr_list</span> <span class="op">-</span><span class="op">&gt;</span> <span class="ident">Vec</span><span class="op">&lt;</span><span class="ident">Expr</span><span class="op">&gt;</span>,
<span class="macro">separated_list</span><span class="macro">!</span>(<span class="macro">punct</span><span class="macro">!</span>(<span class="string">&quot;,&quot;</span>), <span class="ident">expr</span>)
);
<span class="kw">fn</span> <span class="ident">main</span>() {
<span class="kw">let</span> <span class="ident">input</span> <span class="op">=</span> <span class="string">&quot;1 + 1, things, Construct { this: thing }&quot;</span>;
<span class="kw">let</span> <span class="ident">parsed</span> <span class="op">=</span> <span class="ident">expr_list</span>(<span class="ident">input</span>).<span class="ident">expect</span>(<span class="string">&quot;expr list&quot;</span>);
<span class="macro">assert_eq</span><span class="macro">!</span>(<span class="ident">parsed</span>.<span class="ident">len</span>(), <span class="number">3</span>);
}</pre></div>
<div class="example-wrap"><pre class="rust rust-example-rendered">
<span class="kw">extern</span> <span class="kw">crate</span> <span class="ident">syn</span>;
<span class="attribute">#[<span class="ident">macro_use</span>]</span> <span class="kw">extern</span> <span class="kw">crate</span> <span class="ident">synom</span>;
<span class="kw">use</span> <span class="ident">syn</span>::<span class="ident">Ident</span>;
<span class="kw">use</span> <span class="ident">syn</span>::<span class="ident">parse</span>::<span class="ident">ident</span>;
<span class="macro">named</span><span class="macro">!</span>(<span class="ident">run_on</span> <span class="op">-</span><span class="op">&gt;</span> <span class="ident">Vec</span><span class="op">&lt;</span><span class="ident">Ident</span><span class="op">&gt;</span>,
<span class="macro">terminated</span><span class="macro">!</span>(
<span class="macro">separated_list</span><span class="macro">!</span>(<span class="macro">keyword</span><span class="macro">!</span>(<span class="string">&quot;and&quot;</span>), <span class="macro">preceded</span><span class="macro">!</span>(<span class="macro">punct</span><span class="macro">!</span>(<span class="string">&quot;$&quot;</span>), <span class="ident">ident</span>)),
<span class="macro">punct</span><span class="macro">!</span>(<span class="string">&quot;...&quot;</span>)
)
);
<span class="kw">fn</span> <span class="ident">main</span>() {
<span class="kw">let</span> <span class="ident">input</span> <span class="op">=</span> <span class="string">&quot;$expr and $ident and $pat ...&quot;</span>;
<span class="kw">let</span> <span class="ident">parsed</span> <span class="op">=</span> <span class="ident">run_on</span>(<span class="ident">input</span>).<span class="ident">expect</span>(<span class="string">&quot;run-on sentence&quot;</span>);
<span class="macro">assert_eq</span><span class="macro">!</span>(<span class="ident">parsed</span>.<span class="ident">len</span>(), <span class="number">3</span>);
<span class="macro">assert_eq</span><span class="macro">!</span>(<span class="ident">parsed</span>[<span class="number">0</span>], <span class="string">&quot;expr&quot;</span>);
<span class="macro">assert_eq</span><span class="macro">!</span>(<span class="ident">parsed</span>[<span class="number">1</span>], <span class="string">&quot;ident&quot;</span>);
<span class="macro">assert_eq</span><span class="macro">!</span>(<span class="ident">parsed</span>[<span class="number">2</span>], <span class="string">&quot;pat&quot;</span>);
}</pre></div>
</div></section><section id="search" class="content hidden"></section><section class="footer"></section><script>window.rootPath = "../";window.currentCrate = "synom";</script><script src="../main.js"></script><script defer src="../search-index.js"></script></body></html>
@@ -0,0 +1,10 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta http-equiv="refresh" content="0;URL=macro.separated_nonempty_list.html">
</head>
<body>
<p>Redirecting to <a href="macro.separated_nonempty_list.html">macro.separated_nonempty_list.html</a>...</p>
<script>location.replace("macro.separated_nonempty_list.html" + location.search + location.hash);</script>
</body>
</html>
@@ -0,0 +1,44 @@
<!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 `separated_nonempty_list` macro in crate `synom`."><meta name="keywords" content="rust, rustlang, rust-lang, separated_nonempty_list"><title>synom::separated_nonempty_list - Rust</title><link rel="stylesheet" type="text/css" href="../normalize.css"><link rel="stylesheet" type="text/css" href="../rustdoc.css" id="mainThemeStyle"><link rel="stylesheet" type="text/css" href="../light.css" id="themeStyle"><link rel="stylesheet" type="text/css" href="../dark.css" disabled ><link rel="stylesheet" type="text/css" href="../ayu.css" disabled ><script id="default-settings"></script><script src="../storage.js"></script><noscript><link rel="stylesheet" href="../noscript.css"></noscript><link rel="icon" type="image/svg+xml" href="../favicon.svg">
<link rel="alternate icon" type="image/png" href="../favicon-16x16.png">
<link rel="alternate icon" type="image/png" href="../favicon-32x32.png"><style type="text/css">#crate-search{background-image:url("../down-arrow.svg");}</style></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"><div class="sidebar-menu">&#9776;</div><a href='../synom/index.html'><div class='logo-container rust-logo'><img src='../rust-logo.png' alt='logo'></div></a><div class="sidebar-elems"><p class="location"><a href="index.html">synom</a></p><script>window.sidebarCurrent = {name: "separated_nonempty_list", ty: "macro", relpath: ""};</script><script defer src="sidebar-items.js"></script></div></nav><div class="theme-picker"><button id="theme-picker" aria-label="Pick another theme!" aria-haspopup="menu"><img src="../brush.svg" width="18" alt="Pick another theme!"></button><div id="theme-choices" role="menu"></div></div><script src="../theme.js"></script><nav class="sub"><form class="search-form"><div class="search-container"><div><select id="crate-search"><option value="All crates">All crates</option></select><input class="search-input" name="search" disabled autocomplete="off" spellcheck="false" placeholder="Click or press S to search, ? for more options…" type="search"></div><button type="button" class="help-button">?</button>
<a id="settings-menu" href="../settings.html"><img src="../wheel.svg" width="18" alt="Change settings"></a></div></form></nav><section id="main" class="content"><h1 class="fqn"><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">&#x2212;</span>]</a></span><a class="srclink" href="../src/synom/lib.rs.html#950-997" title="goto source code">[src]</a></span><span class="in-band">Macro <a href="index.html">synom</a>::<wbr><a class="macro" href="">separated_nonempty_list</a></span></h1><div class="docblock type-decl hidden-by-usual-hider"><div class="example-wrap"><pre class="rust macro">
<span class="macro">macro_rules</span><span class="macro">!</span> <span class="ident">separated_nonempty_list</span> {
(<span class="macro-nonterminal">$</span><span class="macro-nonterminal">i</span>:<span class="ident">expr</span>, <span class="macro-nonterminal">$</span><span class="macro-nonterminal">sep</span>:<span class="macro">ident</span><span class="macro">!</span>( $(<span class="macro-nonterminal">$</span><span class="macro-nonterminal">args</span>:<span class="ident">tt</span>)<span class="op">*</span> ), <span class="macro-nonterminal">$</span><span class="macro-nonterminal">submac</span>:<span class="macro">ident</span><span class="macro">!</span>( $(<span class="macro-nonterminal">$</span><span class="macro-nonterminal">args2</span>:<span class="ident">tt</span>)<span class="op">*</span> )) <span class="op">=</span><span class="op">&gt;</span> { ... };
(<span class="macro-nonterminal">$</span><span class="macro-nonterminal">i</span>:<span class="ident">expr</span>, <span class="macro-nonterminal">$</span><span class="macro-nonterminal">submac</span>:<span class="macro">ident</span><span class="macro">!</span>( $(<span class="macro-nonterminal">$</span><span class="macro-nonterminal">args</span>:<span class="ident">tt</span>)<span class="op">*</span> ), <span class="macro-nonterminal">$</span><span class="macro-nonterminal">g</span>:<span class="ident">expr</span>) <span class="op">=</span><span class="op">&gt;</span> { ... };
(<span class="macro-nonterminal">$</span><span class="macro-nonterminal">i</span>:<span class="ident">expr</span>, <span class="macro-nonterminal">$</span><span class="macro-nonterminal">f</span>:<span class="ident">expr</span>, <span class="macro-nonterminal">$</span><span class="macro-nonterminal">submac</span>:<span class="macro">ident</span><span class="macro">!</span>( $(<span class="macro-nonterminal">$</span><span class="macro-nonterminal">args</span>:<span class="ident">tt</span>)<span class="op">*</span> )) <span class="op">=</span><span class="op">&gt;</span> { ... };
(<span class="macro-nonterminal">$</span><span class="macro-nonterminal">i</span>:<span class="ident">expr</span>, <span class="macro-nonterminal">$</span><span class="macro-nonterminal">f</span>:<span class="ident">expr</span>, <span class="macro-nonterminal">$</span><span class="macro-nonterminal">g</span>:<span class="ident">expr</span>) <span class="op">=</span><span class="op">&gt;</span> { ... };
}</pre></div>
</div><div class="docblock"><p>One or more values separated by some separator. Does not allow a trailing
separator.</p>
<ul>
<li><strong>Syntax:</strong> <code>separated_nonempty_list!(SEPARATOR, THING)</code></li>
<li><strong>Output:</strong> <code>Vec&lt;THING&gt;</code></li>
</ul>
<p>You may also be looking for:</p>
<ul>
<li><code>separated_list!</code> - one or more values</li>
<li><code>terminated_list!</code> - zero or more, allows trailing separator</li>
<li><code>many0!</code> - zero or more, no separator</li>
</ul>
<div class="example-wrap"><pre class="rust rust-example-rendered">
<span class="kw">extern</span> <span class="kw">crate</span> <span class="ident">syn</span>;
<span class="attribute">#[<span class="ident">macro_use</span>]</span> <span class="kw">extern</span> <span class="kw">crate</span> <span class="ident">synom</span>;
<span class="kw">use</span> <span class="ident">syn</span>::<span class="ident">Ty</span>;
<span class="kw">use</span> <span class="ident">syn</span>::<span class="ident">parse</span>::<span class="ident">ty</span>;
<span class="comment">// One or more Rust types separated by commas.</span>
<span class="macro">named</span><span class="macro">!</span>(<span class="ident">comma_separated_types</span> <span class="op">-</span><span class="op">&gt;</span> <span class="ident">Vec</span><span class="op">&lt;</span><span class="ident">Ty</span><span class="op">&gt;</span>,
<span class="macro">separated_nonempty_list</span><span class="macro">!</span>(<span class="macro">punct</span><span class="macro">!</span>(<span class="string">&quot;,&quot;</span>), <span class="ident">ty</span>)
);
<span class="kw">fn</span> <span class="ident">main</span>() {
<span class="kw">let</span> <span class="ident">input</span> <span class="op">=</span> <span class="string">&quot;&amp;str, Map&lt;K, V&gt;, String&quot;</span>;
<span class="kw">let</span> <span class="ident">parsed</span> <span class="op">=</span> <span class="ident">comma_separated_types</span>(<span class="ident">input</span>).<span class="ident">expect</span>(<span class="string">&quot;comma-separated types&quot;</span>);
<span class="macro">assert_eq</span><span class="macro">!</span>(<span class="ident">parsed</span>.<span class="ident">len</span>(), <span class="number">3</span>);
<span class="macro">println</span><span class="macro">!</span>(<span class="string">&quot;{:?}&quot;</span>, <span class="ident">parsed</span>);
}</pre></div>
</div></section><section id="search" class="content hidden"></section><section class="footer"></section><script>window.rootPath = "../";window.currentCrate = "synom";</script><script src="../main.js"></script><script defer src="../search-index.js"></script></body></html>
+10
View File
@@ -0,0 +1,10 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta http-equiv="refresh" content="0;URL=macro.switch.html">
</head>
<body>
<p>Redirecting to <a href="macro.switch.html">macro.switch.html</a>...</p>
<script>location.replace("macro.switch.html" + location.search + location.hash);</script>
</body>
</html>
+64
View File
@@ -0,0 +1,64 @@
<!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 `switch` macro in crate `synom`."><meta name="keywords" content="rust, rustlang, rust-lang, switch"><title>synom::switch - Rust</title><link rel="stylesheet" type="text/css" href="../normalize.css"><link rel="stylesheet" type="text/css" href="../rustdoc.css" id="mainThemeStyle"><link rel="stylesheet" type="text/css" href="../light.css" id="themeStyle"><link rel="stylesheet" type="text/css" href="../dark.css" disabled ><link rel="stylesheet" type="text/css" href="../ayu.css" disabled ><script id="default-settings"></script><script src="../storage.js"></script><noscript><link rel="stylesheet" href="../noscript.css"></noscript><link rel="icon" type="image/svg+xml" href="../favicon.svg">
<link rel="alternate icon" type="image/png" href="../favicon-16x16.png">
<link rel="alternate icon" type="image/png" href="../favicon-32x32.png"><style type="text/css">#crate-search{background-image:url("../down-arrow.svg");}</style></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"><div class="sidebar-menu">&#9776;</div><a href='../synom/index.html'><div class='logo-container rust-logo'><img src='../rust-logo.png' alt='logo'></div></a><div class="sidebar-elems"><p class="location"><a href="index.html">synom</a></p><script>window.sidebarCurrent = {name: "switch", ty: "macro", relpath: ""};</script><script defer src="sidebar-items.js"></script></div></nav><div class="theme-picker"><button id="theme-picker" aria-label="Pick another theme!" aria-haspopup="menu"><img src="../brush.svg" width="18" alt="Pick another theme!"></button><div id="theme-choices" role="menu"></div></div><script src="../theme.js"></script><nav class="sub"><form class="search-form"><div class="search-container"><div><select id="crate-search"><option value="All crates">All crates</option></select><input class="search-input" name="search" disabled autocomplete="off" spellcheck="false" placeholder="Click or press S to search, ? for more options…" type="search"></div><button type="button" class="help-button">?</button>
<a id="settings-menu" href="../settings.html"><img src="../wheel.svg" width="18" alt="Change settings"></a></div></form></nav><section id="main" class="content"><h1 class="fqn"><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">&#x2212;</span>]</a></span><a class="srclink" href="../src/synom/lib.rs.html#799-811" title="goto source code">[src]</a></span><span class="in-band">Macro <a href="index.html">synom</a>::<wbr><a class="macro" href="">switch</a></span></h1><div class="docblock type-decl hidden-by-usual-hider"><div class="example-wrap"><pre class="rust macro">
<span class="macro">macro_rules</span><span class="macro">!</span> <span class="ident">switch</span> {
(<span class="macro-nonterminal">$</span><span class="macro-nonterminal">i</span>:<span class="ident">expr</span>, <span class="macro-nonterminal">$</span><span class="macro-nonterminal">submac</span>:<span class="macro">ident</span><span class="macro">!</span>( $(<span class="macro-nonterminal">$</span><span class="macro-nonterminal">args</span>:<span class="ident">tt</span>)<span class="op">*</span> ), $(<span class="macro-nonterminal">$</span><span class="macro-nonterminal">p</span>:<span class="ident">pat</span> <span class="op">=</span><span class="op">&gt;</span> <span class="macro-nonterminal">$</span><span class="macro-nonterminal">subrule</span>:<span class="macro">ident</span><span class="macro">!</span>( $(<span class="macro-nonterminal">$</span><span class="macro-nonterminal">args2</span>:<span class="ident">tt</span>)<span class="op">*</span> ))<span class="op">|</span><span class="op">*</span> ) <span class="op">=</span><span class="op">&gt;</span> { ... };
}</pre></div>
</div><div class="docblock"><p>Pattern-match the result of a parser to select which other parser to run.</p>
<ul>
<li><strong>Syntax:</strong> <code>switch!(TARGET, PAT1 =&gt; THEN1 | PAT2 =&gt; THEN2 | ...)</code></li>
<li><strong>Output:</strong> <code>T</code>, the return type of <code>THEN1</code> and <code>THEN2</code> and ...</li>
</ul>
<div class="example-wrap"><pre class="rust rust-example-rendered">
<span class="kw">extern</span> <span class="kw">crate</span> <span class="ident">syn</span>;
<span class="attribute">#[<span class="ident">macro_use</span>]</span> <span class="kw">extern</span> <span class="kw">crate</span> <span class="ident">synom</span>;
<span class="kw">use</span> <span class="ident">syn</span>::{<span class="ident">Ident</span>, <span class="ident">Ty</span>};
<span class="kw">use</span> <span class="ident">syn</span>::<span class="ident">parse</span>::{<span class="ident">ident</span>, <span class="ident">ty</span>};
<span class="attribute">#[<span class="ident">derive</span>(<span class="ident">Debug</span>)]</span>
<span class="kw">enum</span> <span class="ident">UnitType</span> {
<span class="ident">Struct</span> {
<span class="ident">name</span>: <span class="ident">Ident</span>,
},
<span class="ident">Enum</span> {
<span class="ident">name</span>: <span class="ident">Ident</span>,
<span class="ident">variant</span>: <span class="ident">Ident</span>,
},
}
<span class="comment">// Parse a unit struct or enum: either `struct S;` or `enum E { V }`.</span>
<span class="macro">named</span><span class="macro">!</span>(<span class="ident">unit_type</span> <span class="op">-</span><span class="op">&gt;</span> <span class="ident">UnitType</span>, <span class="macro">do_parse</span><span class="macro">!</span>(
<span class="ident">which</span>: <span class="macro">alt</span><span class="macro">!</span>(<span class="macro">keyword</span><span class="macro">!</span>(<span class="string">&quot;struct&quot;</span>) <span class="op">|</span> <span class="macro">keyword</span><span class="macro">!</span>(<span class="string">&quot;enum&quot;</span>)) <span class="op">&gt;</span><span class="op">&gt;</span>
<span class="ident">id</span>: <span class="ident">ident</span> <span class="op">&gt;</span><span class="op">&gt;</span>
<span class="ident">item</span>: <span class="macro">switch</span><span class="macro">!</span>(<span class="macro">value</span><span class="macro">!</span>(<span class="ident">which</span>),
<span class="string">&quot;struct&quot;</span> <span class="op">=</span><span class="op">&gt;</span> <span class="macro">map</span><span class="macro">!</span>(
<span class="macro">punct</span><span class="macro">!</span>(<span class="string">&quot;;&quot;</span>),
<span class="kw">move</span> <span class="op">|</span><span class="kw">_</span><span class="op">|</span> <span class="ident">UnitType</span>::<span class="ident">Struct</span> {
<span class="ident">name</span>: <span class="ident">id</span>,
}
)
<span class="op">|</span>
<span class="string">&quot;enum&quot;</span> <span class="op">=</span><span class="op">&gt;</span> <span class="macro">map</span><span class="macro">!</span>(
<span class="macro">delimited</span><span class="macro">!</span>(<span class="macro">punct</span><span class="macro">!</span>(<span class="string">&quot;{&quot;</span>), <span class="ident">ident</span>, <span class="macro">punct</span><span class="macro">!</span>(<span class="string">&quot;}&quot;</span>)),
<span class="kw">move</span> <span class="op">|</span><span class="ident">variant</span><span class="op">|</span> <span class="ident">UnitType</span>::<span class="ident">Enum</span> {
<span class="ident">name</span>: <span class="ident">id</span>,
<span class="ident">variant</span>: <span class="ident">variant</span>,
}
)
) <span class="op">&gt;</span><span class="op">&gt;</span>
(<span class="ident">item</span>)
));
<span class="kw">fn</span> <span class="ident">main</span>() {
<span class="kw">let</span> <span class="ident">input</span> <span class="op">=</span> <span class="string">&quot;struct S;&quot;</span>;
<span class="kw">let</span> <span class="ident">parsed</span> <span class="op">=</span> <span class="ident">unit_type</span>(<span class="ident">input</span>).<span class="ident">expect</span>(<span class="string">&quot;unit struct or enum&quot;</span>);
<span class="macro">println</span><span class="macro">!</span>(<span class="string">&quot;{:?}&quot;</span>, <span class="ident">parsed</span>);
<span class="kw">let</span> <span class="ident">input</span> <span class="op">=</span> <span class="string">&quot;enum E { V }&quot;</span>;
<span class="kw">let</span> <span class="ident">parsed</span> <span class="op">=</span> <span class="ident">unit_type</span>(<span class="ident">input</span>).<span class="ident">expect</span>(<span class="string">&quot;unit struct or enum&quot;</span>);
<span class="macro">println</span><span class="macro">!</span>(<span class="string">&quot;{:?}&quot;</span>, <span class="ident">parsed</span>);
}</pre></div>
</div></section><section id="search" class="content hidden"></section><section class="footer"></section><script>window.rootPath = "../";window.currentCrate = "synom";</script><script src="../main.js"></script><script defer src="../search-index.js"></script></body></html>
+10
View File
@@ -0,0 +1,10 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta http-equiv="refresh" content="0;URL=macro.tag.html">
</head>
<body>
<p>Redirecting to <a href="macro.tag.html">macro.tag.html</a>...</p>
<script>location.replace("macro.tag.html" + location.search + location.hash);</script>
</body>
</html>
+44
View File
@@ -0,0 +1,44 @@
<!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 `tag` macro in crate `synom`."><meta name="keywords" content="rust, rustlang, rust-lang, tag"><title>synom::tag - Rust</title><link rel="stylesheet" type="text/css" href="../normalize.css"><link rel="stylesheet" type="text/css" href="../rustdoc.css" id="mainThemeStyle"><link rel="stylesheet" type="text/css" href="../light.css" id="themeStyle"><link rel="stylesheet" type="text/css" href="../dark.css" disabled ><link rel="stylesheet" type="text/css" href="../ayu.css" disabled ><script id="default-settings"></script><script src="../storage.js"></script><noscript><link rel="stylesheet" href="../noscript.css"></noscript><link rel="icon" type="image/svg+xml" href="../favicon.svg">
<link rel="alternate icon" type="image/png" href="../favicon-16x16.png">
<link rel="alternate icon" type="image/png" href="../favicon-32x32.png"><style type="text/css">#crate-search{background-image:url("../down-arrow.svg");}</style></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"><div class="sidebar-menu">&#9776;</div><a href='../synom/index.html'><div class='logo-container rust-logo'><img src='../rust-logo.png' alt='logo'></div></a><div class="sidebar-elems"><p class="location"><a href="index.html">synom</a></p><script>window.sidebarCurrent = {name: "tag", ty: "macro", relpath: ""};</script><script defer src="sidebar-items.js"></script></div></nav><div class="theme-picker"><button id="theme-picker" aria-label="Pick another theme!" aria-haspopup="menu"><img src="../brush.svg" width="18" alt="Pick another theme!"></button><div id="theme-choices" role="menu"></div></div><script src="../theme.js"></script><nav class="sub"><form class="search-form"><div class="search-container"><div><select id="crate-search"><option value="All crates">All crates</option></select><input class="search-input" name="search" disabled autocomplete="off" spellcheck="false" placeholder="Click or press S to search, ? for more options…" type="search"></div><button type="button" class="help-button">?</button>
<a id="settings-menu" href="../settings.html"><img src="../wheel.svg" width="18" alt="Change settings"></a></div></form></nav><section id="main" class="content"><h1 class="fqn"><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">&#x2212;</span>]</a></span><a class="srclink" href="../src/synom/lib.rs.html#732-740" title="goto source code">[src]</a></span><span class="in-band">Macro <a href="index.html">synom</a>::<wbr><a class="macro" href="">tag</a></span></h1><div class="docblock type-decl hidden-by-usual-hider"><div class="example-wrap"><pre class="rust macro">
<span class="macro">macro_rules</span><span class="macro">!</span> <span class="ident">tag</span> {
(<span class="macro-nonterminal">$</span><span class="macro-nonterminal">i</span>:<span class="ident">expr</span>, <span class="macro-nonterminal">$</span><span class="macro-nonterminal">tag</span>:<span class="ident">expr</span>) <span class="op">=</span><span class="op">&gt;</span> { ... };
}</pre></div>
</div><div class="docblock"><p>Parse the given string from exactly the current position in the input. You
almost always want <code>punct!</code> or <code>keyword!</code> instead of this.</p>
<p>The <code>tag!</code> parser is equivalent to <code>punct!</code> but does not ignore leading
whitespace. Both <code>punct!</code> and <code>keyword!</code> skip over leading whitespace. See
an explanation of synom's whitespace handling strategy in the top-level
crate documentation.</p>
<ul>
<li><strong>Syntax:</strong> <code>tag!(&quot;...&quot;)</code></li>
<li><strong>Output:</strong> <code>&quot;...&quot;</code></li>
</ul>
<div class="example-wrap"><pre class="rust rust-example-rendered">
<span class="kw">extern</span> <span class="kw">crate</span> <span class="ident">syn</span>;
<span class="attribute">#[<span class="ident">macro_use</span>]</span> <span class="kw">extern</span> <span class="kw">crate</span> <span class="ident">synom</span>;
<span class="kw">use</span> <span class="ident">syn</span>::<span class="ident">StrLit</span>;
<span class="kw">use</span> <span class="ident">syn</span>::<span class="ident">parse</span>::<span class="ident">string</span>;
<span class="kw">use</span> <span class="ident">synom</span>::<span class="ident">IResult</span>;
<span class="comment">// Parse a proposed syntax for an owned string literal: &quot;abc&quot;s</span>
<span class="macro">named</span><span class="macro">!</span>(<span class="ident">owned_string</span> <span class="op">-</span><span class="op">&gt;</span> <span class="ident">String</span>,
<span class="macro">map</span><span class="macro">!</span>(
<span class="macro">terminated</span><span class="macro">!</span>(<span class="ident">string</span>, <span class="macro">tag</span><span class="macro">!</span>(<span class="string">&quot;s&quot;</span>)),
<span class="op">|</span><span class="ident">lit</span>: <span class="ident">StrLit</span><span class="op">|</span> <span class="ident">lit</span>.<span class="ident">value</span>
)
);
<span class="kw">fn</span> <span class="ident">main</span>() {
<span class="kw">let</span> <span class="ident">input</span> <span class="op">=</span> <span class="string">r#&quot; &quot;abc&quot;s &quot;#</span>;
<span class="kw">let</span> <span class="ident">parsed</span> <span class="op">=</span> <span class="ident">owned_string</span>(<span class="ident">input</span>).<span class="ident">expect</span>(<span class="string">&quot;owned string literal&quot;</span>);
<span class="macro">println</span><span class="macro">!</span>(<span class="string">&quot;{:?}&quot;</span>, <span class="ident">parsed</span>);
<span class="kw">let</span> <span class="ident">input</span> <span class="op">=</span> <span class="string">r#&quot; &quot;abc&quot; s &quot;#</span>;
<span class="kw">let</span> <span class="ident">err</span> <span class="op">=</span> <span class="ident">owned_string</span>(<span class="ident">input</span>);
<span class="macro">assert_eq</span><span class="macro">!</span>(<span class="ident">err</span>, <span class="ident">IResult</span>::<span class="ident">Error</span>);
}</pre></div>
</div></section><section id="search" class="content hidden"></section><section class="footer"></section><script>window.rootPath = "../";window.currentCrate = "synom";</script><script src="../main.js"></script><script defer src="../search-index.js"></script></body></html>
+10
View File
@@ -0,0 +1,10 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta http-equiv="refresh" content="0;URL=macro.take_until.html">
</head>
<body>
<p>Redirecting to <a href="macro.take_until.html">macro.take_until.html</a>...</p>
<script>location.replace("macro.take_until.html" + location.search + location.hash);</script>
</body>
</html>
+30
View File
@@ -0,0 +1,30 @@
<!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 `take_until` macro in crate `synom`."><meta name="keywords" content="rust, rustlang, rust-lang, take_until"><title>synom::take_until - Rust</title><link rel="stylesheet" type="text/css" href="../normalize.css"><link rel="stylesheet" type="text/css" href="../rustdoc.css" id="mainThemeStyle"><link rel="stylesheet" type="text/css" href="../light.css" id="themeStyle"><link rel="stylesheet" type="text/css" href="../dark.css" disabled ><link rel="stylesheet" type="text/css" href="../ayu.css" disabled ><script id="default-settings"></script><script src="../storage.js"></script><noscript><link rel="stylesheet" href="../noscript.css"></noscript><link rel="icon" type="image/svg+xml" href="../favicon.svg">
<link rel="alternate icon" type="image/png" href="../favicon-16x16.png">
<link rel="alternate icon" type="image/png" href="../favicon-32x32.png"><style type="text/css">#crate-search{background-image:url("../down-arrow.svg");}</style></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"><div class="sidebar-menu">&#9776;</div><a href='../synom/index.html'><div class='logo-container rust-logo'><img src='../rust-logo.png' alt='logo'></div></a><div class="sidebar-elems"><p class="location"><a href="index.html">synom</a></p><script>window.sidebarCurrent = {name: "take_until", ty: "macro", relpath: ""};</script><script defer src="sidebar-items.js"></script></div></nav><div class="theme-picker"><button id="theme-picker" aria-label="Pick another theme!" aria-haspopup="menu"><img src="../brush.svg" width="18" alt="Pick another theme!"></button><div id="theme-choices" role="menu"></div></div><script src="../theme.js"></script><nav class="sub"><form class="search-form"><div class="search-container"><div><select id="crate-search"><option value="All crates">All crates</option></select><input class="search-input" name="search" disabled autocomplete="off" spellcheck="false" placeholder="Click or press S to search, ? for more options…" type="search"></div><button type="button" class="help-button">?</button>
<a id="settings-menu" href="../settings.html"><img src="../wheel.svg" width="18" alt="Change settings"></a></div></form></nav><section id="main" class="content"><h1 class="fqn"><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">&#x2212;</span>]</a></span><a class="srclink" href="../src/synom/lib.rs.html#661-692" title="goto source code">[src]</a></span><span class="in-band">Macro <a href="index.html">synom</a>::<wbr><a class="macro" href="">take_until</a></span></h1><div class="docblock type-decl hidden-by-usual-hider"><div class="example-wrap"><pre class="rust macro">
<span class="macro">macro_rules</span><span class="macro">!</span> <span class="ident">take_until</span> {
(<span class="macro-nonterminal">$</span><span class="macro-nonterminal">i</span>:<span class="ident">expr</span>, <span class="macro-nonterminal">$</span><span class="macro-nonterminal">substr</span>:<span class="ident">expr</span>) <span class="op">=</span><span class="op">&gt;</span> { ... };
}</pre></div>
</div><div class="docblock"><p>Parse the part of the input up to but not including the given string. Fail
to parse if the given string is not present in the input.</p>
<ul>
<li><strong>Syntax:</strong> <code>take_until!(&quot;...&quot;)</code></li>
<li><strong>Output:</strong> <code>&amp;str</code></li>
</ul>
<div class="example-wrap"><pre class="rust rust-example-rendered">
<span class="kw">extern</span> <span class="kw">crate</span> <span class="ident">syn</span>;
<span class="attribute">#[<span class="ident">macro_use</span>]</span> <span class="kw">extern</span> <span class="kw">crate</span> <span class="ident">synom</span>;
<span class="kw">use</span> <span class="ident">synom</span>::<span class="ident">IResult</span>;
<span class="comment">// Parse a single line doc comment: /// ...</span>
<span class="macro">named</span><span class="macro">!</span>(<span class="ident">single_line_doc</span> <span class="op">-</span><span class="op">&gt;</span> <span class="kw-2">&amp;</span><span class="ident">str</span>,
<span class="macro">preceded</span><span class="macro">!</span>(<span class="macro">punct</span><span class="macro">!</span>(<span class="string">&quot;///&quot;</span>), <span class="macro">take_until</span><span class="macro">!</span>(<span class="string">&quot;\n&quot;</span>))
);
<span class="kw">fn</span> <span class="ident">main</span>() {
<span class="kw">let</span> <span class="ident">comment</span> <span class="op">=</span> <span class="string">&quot;/// comment\n&quot;</span>;
<span class="kw">let</span> <span class="ident">parsed</span> <span class="op">=</span> <span class="ident">single_line_doc</span>(<span class="ident">comment</span>).<span class="ident">expect</span>(<span class="string">&quot;single line doc comment&quot;</span>);
<span class="macro">assert_eq</span><span class="macro">!</span>(<span class="ident">parsed</span>, <span class="string">&quot; comment&quot;</span>);
}</pre></div>
</div></section><section id="search" class="content hidden"></section><section class="footer"></section><script>window.rootPath = "../";window.currentCrate = "synom";</script><script src="../main.js"></script><script defer src="../search-index.js"></script></body></html>
+10
View File
@@ -0,0 +1,10 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta http-equiv="refresh" content="0;URL=macro.terminated.html">
</head>
<body>
<p>Redirecting to <a href="macro.terminated.html">macro.terminated.html</a>...</p>
<script>location.replace("macro.terminated.html" + location.search + location.hash);</script>
</body>
</html>
+36
View File
@@ -0,0 +1,36 @@
<!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 `terminated` macro in crate `synom`."><meta name="keywords" content="rust, rustlang, rust-lang, terminated"><title>synom::terminated - Rust</title><link rel="stylesheet" type="text/css" href="../normalize.css"><link rel="stylesheet" type="text/css" href="../rustdoc.css" id="mainThemeStyle"><link rel="stylesheet" type="text/css" href="../light.css" id="themeStyle"><link rel="stylesheet" type="text/css" href="../dark.css" disabled ><link rel="stylesheet" type="text/css" href="../ayu.css" disabled ><script id="default-settings"></script><script src="../storage.js"></script><noscript><link rel="stylesheet" href="../noscript.css"></noscript><link rel="icon" type="image/svg+xml" href="../favicon.svg">
<link rel="alternate icon" type="image/png" href="../favicon-16x16.png">
<link rel="alternate icon" type="image/png" href="../favicon-32x32.png"><style type="text/css">#crate-search{background-image:url("../down-arrow.svg");}</style></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"><div class="sidebar-menu">&#9776;</div><a href='../synom/index.html'><div class='logo-container rust-logo'><img src='../rust-logo.png' alt='logo'></div></a><div class="sidebar-elems"><p class="location"><a href="index.html">synom</a></p><script>window.sidebarCurrent = {name: "terminated", ty: "macro", relpath: ""};</script><script defer src="sidebar-items.js"></script></div></nav><div class="theme-picker"><button id="theme-picker" aria-label="Pick another theme!" aria-haspopup="menu"><img src="../brush.svg" width="18" alt="Pick another theme!"></button><div id="theme-choices" role="menu"></div></div><script src="../theme.js"></script><nav class="sub"><form class="search-form"><div class="search-container"><div><select id="crate-search"><option value="All crates">All crates</option></select><input class="search-input" name="search" disabled autocomplete="off" spellcheck="false" placeholder="Click or press S to search, ? for more options…" type="search"></div><button type="button" class="help-button">?</button>
<a id="settings-menu" href="../settings.html"><img src="../wheel.svg" width="18" alt="Change settings"></a></div></form></nav><section id="main" class="content"><h1 class="fqn"><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">&#x2212;</span>]</a></span><a class="srclink" href="../src/synom/lib.rs.html#470-489" title="goto source code">[src]</a></span><span class="in-band">Macro <a href="index.html">synom</a>::<wbr><a class="macro" href="">terminated</a></span></h1><div class="docblock type-decl hidden-by-usual-hider"><div class="example-wrap"><pre class="rust macro">
<span class="macro">macro_rules</span><span class="macro">!</span> <span class="ident">terminated</span> {
(<span class="macro-nonterminal">$</span><span class="macro-nonterminal">i</span>:<span class="ident">expr</span>, <span class="macro-nonterminal">$</span><span class="macro-nonterminal">submac</span>:<span class="macro">ident</span><span class="macro">!</span>( $(<span class="macro-nonterminal">$</span><span class="macro-nonterminal">args</span>:<span class="ident">tt</span>)<span class="op">*</span> ), <span class="macro-nonterminal">$</span><span class="macro-nonterminal">submac2</span>:<span class="macro">ident</span><span class="macro">!</span>( $(<span class="macro-nonterminal">$</span><span class="macro-nonterminal">args2</span>:<span class="ident">tt</span>)<span class="op">*</span> )) <span class="op">=</span><span class="op">&gt;</span> { ... };
(<span class="macro-nonterminal">$</span><span class="macro-nonterminal">i</span>:<span class="ident">expr</span>, <span class="macro-nonterminal">$</span><span class="macro-nonterminal">submac</span>:<span class="macro">ident</span><span class="macro">!</span>( $(<span class="macro-nonterminal">$</span><span class="macro-nonterminal">args</span>:<span class="ident">tt</span>)<span class="op">*</span> ), <span class="macro-nonterminal">$</span><span class="macro-nonterminal">g</span>:<span class="ident">expr</span>) <span class="op">=</span><span class="op">&gt;</span> { ... };
(<span class="macro-nonterminal">$</span><span class="macro-nonterminal">i</span>:<span class="ident">expr</span>, <span class="macro-nonterminal">$</span><span class="macro-nonterminal">f</span>:<span class="ident">expr</span>, <span class="macro-nonterminal">$</span><span class="macro-nonterminal">submac</span>:<span class="macro">ident</span><span class="macro">!</span>( $(<span class="macro-nonterminal">$</span><span class="macro-nonterminal">args</span>:<span class="ident">tt</span>)<span class="op">*</span> )) <span class="op">=</span><span class="op">&gt;</span> { ... };
(<span class="macro-nonterminal">$</span><span class="macro-nonterminal">i</span>:<span class="ident">expr</span>, <span class="macro-nonterminal">$</span><span class="macro-nonterminal">f</span>:<span class="ident">expr</span>, <span class="macro-nonterminal">$</span><span class="macro-nonterminal">g</span>:<span class="ident">expr</span>) <span class="op">=</span><span class="op">&gt;</span> { ... };
}</pre></div>
</div><div class="docblock"><p>Parse two things, returning the value of the first.</p>
<ul>
<li><strong>Syntax:</strong> <code>terminated!(THING, AFTER)</code></li>
<li><strong>Output:</strong> <code>THING</code></li>
</ul>
<div class="example-wrap"><pre class="rust rust-example-rendered">
<span class="kw">extern</span> <span class="kw">crate</span> <span class="ident">syn</span>;
<span class="attribute">#[<span class="ident">macro_use</span>]</span> <span class="kw">extern</span> <span class="kw">crate</span> <span class="ident">synom</span>;
<span class="kw">use</span> <span class="ident">syn</span>::<span class="ident">Expr</span>;
<span class="kw">use</span> <span class="ident">syn</span>::<span class="ident">parse</span>::<span class="ident">expr</span>;
<span class="comment">// An expression terminated by ##.</span>
<span class="macro">named</span><span class="macro">!</span>(<span class="ident">expr_pound_pound</span> <span class="op">-</span><span class="op">&gt;</span> <span class="ident">Expr</span>,
<span class="macro">terminated</span><span class="macro">!</span>(<span class="ident">expr</span>, <span class="macro">punct</span><span class="macro">!</span>(<span class="string">&quot;##&quot;</span>))
);
<span class="kw">fn</span> <span class="ident">main</span>() {
<span class="kw">let</span> <span class="ident">input</span> <span class="op">=</span> <span class="string">&quot;1 + 1 ##&quot;</span>;
<span class="kw">let</span> <span class="ident">parsed</span> <span class="op">=</span> <span class="ident">expr_pound_pound</span>(<span class="ident">input</span>).<span class="ident">expect</span>(<span class="string">&quot;expr pound pound&quot;</span>);
<span class="macro">println</span><span class="macro">!</span>(<span class="string">&quot;{:?}&quot;</span>, <span class="ident">parsed</span>);
}</pre></div>
</div></section><section id="search" class="content hidden"></section><section class="footer"></section><script>window.rootPath = "../";window.currentCrate = "synom";</script><script src="../main.js"></script><script defer src="../search-index.js"></script></body></html>
+10
View File
@@ -0,0 +1,10 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta http-equiv="refresh" content="0;URL=macro.terminated_list.html">
</head>
<body>
<p>Redirecting to <a href="macro.terminated_list.html">macro.terminated_list.html</a>...</p>
<script>location.replace("macro.terminated_list.html" + location.search + location.hash);</script>
</body>
</html>
+66
View File
@@ -0,0 +1,66 @@
<!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 `terminated_list` macro in crate `synom`."><meta name="keywords" content="rust, rustlang, rust-lang, terminated_list"><title>synom::terminated_list - Rust</title><link rel="stylesheet" type="text/css" href="../normalize.css"><link rel="stylesheet" type="text/css" href="../rustdoc.css" id="mainThemeStyle"><link rel="stylesheet" type="text/css" href="../light.css" id="themeStyle"><link rel="stylesheet" type="text/css" href="../dark.css" disabled ><link rel="stylesheet" type="text/css" href="../ayu.css" disabled ><script id="default-settings"></script><script src="../storage.js"></script><noscript><link rel="stylesheet" href="../noscript.css"></noscript><link rel="icon" type="image/svg+xml" href="../favicon.svg">
<link rel="alternate icon" type="image/png" href="../favicon-16x16.png">
<link rel="alternate icon" type="image/png" href="../favicon-32x32.png"><style type="text/css">#crate-search{background-image:url("../down-arrow.svg");}</style></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"><div class="sidebar-menu">&#9776;</div><a href='../synom/index.html'><div class='logo-container rust-logo'><img src='../rust-logo.png' alt='logo'></div></a><div class="sidebar-elems"><p class="location"><a href="index.html">synom</a></p><script>window.sidebarCurrent = {name: "terminated_list", ty: "macro", relpath: ""};</script><script defer src="sidebar-items.js"></script></div></nav><div class="theme-picker"><button id="theme-picker" aria-label="Pick another theme!" aria-haspopup="menu"><img src="../brush.svg" width="18" alt="Pick another theme!"></button><div id="theme-choices" role="menu"></div></div><script src="../theme.js"></script><nav class="sub"><form class="search-form"><div class="search-container"><div><select id="crate-search"><option value="All crates">All crates</option></select><input class="search-input" name="search" disabled autocomplete="off" spellcheck="false" placeholder="Click or press S to search, ? for more options…" type="search"></div><button type="button" class="help-button">?</button>
<a id="settings-menu" href="../settings.html"><img src="../wheel.svg" width="18" alt="Change settings"></a></div></form></nav><section id="main" class="content"><h1 class="fqn"><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">&#x2212;</span>]</a></span><a class="srclink" href="../src/synom/helper.rs.html#439-496" title="goto source code">[src]</a></span><span class="in-band">Macro <a href="index.html">synom</a>::<wbr><a class="macro" href="">terminated_list</a></span></h1><div class="docblock type-decl hidden-by-usual-hider"><div class="example-wrap"><pre class="rust macro">
<span class="macro">macro_rules</span><span class="macro">!</span> <span class="ident">terminated_list</span> {
(<span class="macro-nonterminal">$</span><span class="macro-nonterminal">i</span>:<span class="ident">expr</span>, <span class="macro">punct</span><span class="macro">!</span>(<span class="macro-nonterminal">$</span><span class="macro-nonterminal">sep</span>:<span class="ident">expr</span>), <span class="macro-nonterminal">$</span><span class="macro-nonterminal">f</span>:<span class="ident">ident</span>) <span class="op">=</span><span class="op">&gt;</span> { ... };
(<span class="macro-nonterminal">$</span><span class="macro-nonterminal">i</span>:<span class="ident">expr</span>, <span class="macro-nonterminal">$</span><span class="macro-nonterminal">sepmac</span>:<span class="macro">ident</span><span class="macro">!</span>( $(<span class="macro-nonterminal">$</span><span class="macro-nonterminal">separgs</span>:<span class="ident">tt</span>)<span class="op">*</span> ), <span class="macro-nonterminal">$</span><span class="macro-nonterminal">fmac</span>:<span class="macro">ident</span><span class="macro">!</span>( $(<span class="macro-nonterminal">$</span><span class="macro-nonterminal">fargs</span>:<span class="ident">tt</span>)<span class="op">*</span> )) <span class="op">=</span><span class="op">&gt;</span> { ... };
(<span class="macro-nonterminal">$</span><span class="macro-nonterminal">i</span>:<span class="ident">expr</span>, <span class="macro-nonterminal">$</span><span class="macro-nonterminal">sepmac</span>:<span class="macro">ident</span><span class="macro">!</span>( $(<span class="macro-nonterminal">$</span><span class="macro-nonterminal">separgs</span>:<span class="ident">tt</span>)<span class="op">*</span> ), <span class="macro-nonterminal">$</span><span class="macro-nonterminal">f</span>:<span class="ident">expr</span>) <span class="op">=</span><span class="op">&gt;</span> { ... };
(<span class="macro-nonterminal">$</span><span class="macro-nonterminal">i</span>:<span class="ident">expr</span>, <span class="macro-nonterminal">$</span><span class="macro-nonterminal">sep</span>:<span class="ident">expr</span>, <span class="macro-nonterminal">$</span><span class="macro-nonterminal">fmac</span>:<span class="macro">ident</span><span class="macro">!</span>( $(<span class="macro-nonterminal">$</span><span class="macro-nonterminal">fargs</span>:<span class="ident">tt</span>)<span class="op">*</span> )) <span class="op">=</span><span class="op">&gt;</span> { ... };
(<span class="macro-nonterminal">$</span><span class="macro-nonterminal">i</span>:<span class="ident">expr</span>, <span class="macro-nonterminal">$</span><span class="macro-nonterminal">sep</span>:<span class="ident">expr</span>, <span class="macro-nonterminal">$</span><span class="macro-nonterminal">f</span>:<span class="ident">expr</span>) <span class="op">=</span><span class="op">&gt;</span> { ... };
}</pre></div>
</div><div class="docblock"><p>Zero or more values separated by some separator. A trailing separator is
allowed.</p>
<ul>
<li><strong>Syntax:</strong> <code>terminated_list!(punct!(&quot;...&quot;), THING)</code></li>
<li><strong>Output:</strong> <code>Vec&lt;THING&gt;</code></li>
</ul>
<p>You may also be looking for:</p>
<ul>
<li><code>separated_list!</code> - zero or more, allows trailing separator</li>
<li><code>separated_nonempty_list!</code> - one or more values</li>
<li><code>many0!</code> - zero or more, no separator</li>
</ul>
<div class="example-wrap"><pre class="rust rust-example-rendered">
<span class="kw">extern</span> <span class="kw">crate</span> <span class="ident">syn</span>;
<span class="attribute">#[<span class="ident">macro_use</span>]</span> <span class="kw">extern</span> <span class="kw">crate</span> <span class="ident">synom</span>;
<span class="kw">use</span> <span class="ident">syn</span>::<span class="ident">Expr</span>;
<span class="kw">use</span> <span class="ident">syn</span>::<span class="ident">parse</span>::<span class="ident">expr</span>;
<span class="macro">named</span><span class="macro">!</span>(<span class="ident">expr_list</span> <span class="op">-</span><span class="op">&gt;</span> <span class="ident">Vec</span><span class="op">&lt;</span><span class="ident">Expr</span><span class="op">&gt;</span>,
<span class="macro">terminated_list</span><span class="macro">!</span>(<span class="macro">punct</span><span class="macro">!</span>(<span class="string">&quot;,&quot;</span>), <span class="ident">expr</span>)
);
<span class="kw">fn</span> <span class="ident">main</span>() {
<span class="kw">let</span> <span class="ident">input</span> <span class="op">=</span> <span class="string">&quot;1 + 1, things, Construct { this: thing },&quot;</span>;
<span class="kw">let</span> <span class="ident">parsed</span> <span class="op">=</span> <span class="ident">expr_list</span>(<span class="ident">input</span>).<span class="ident">expect</span>(<span class="string">&quot;expr list&quot;</span>);
<span class="macro">assert_eq</span><span class="macro">!</span>(<span class="ident">parsed</span>.<span class="ident">len</span>(), <span class="number">3</span>);
}</pre></div>
<div class="example-wrap"><pre class="rust rust-example-rendered">
<span class="kw">extern</span> <span class="kw">crate</span> <span class="ident">syn</span>;
<span class="attribute">#[<span class="ident">macro_use</span>]</span> <span class="kw">extern</span> <span class="kw">crate</span> <span class="ident">synom</span>;
<span class="kw">use</span> <span class="ident">syn</span>::<span class="ident">Ident</span>;
<span class="kw">use</span> <span class="ident">syn</span>::<span class="ident">parse</span>::<span class="ident">ident</span>;
<span class="macro">named</span><span class="macro">!</span>(<span class="ident">run_on</span> <span class="op">-</span><span class="op">&gt;</span> <span class="ident">Vec</span><span class="op">&lt;</span><span class="ident">Ident</span><span class="op">&gt;</span>,
<span class="macro">terminated</span><span class="macro">!</span>(
<span class="macro">terminated_list</span><span class="macro">!</span>(<span class="macro">keyword</span><span class="macro">!</span>(<span class="string">&quot;and&quot;</span>), <span class="macro">preceded</span><span class="macro">!</span>(<span class="macro">punct</span><span class="macro">!</span>(<span class="string">&quot;$&quot;</span>), <span class="ident">ident</span>)),
<span class="macro">punct</span><span class="macro">!</span>(<span class="string">&quot;...&quot;</span>)
)
);
<span class="kw">fn</span> <span class="ident">main</span>() {
<span class="kw">let</span> <span class="ident">input</span> <span class="op">=</span> <span class="string">&quot;$expr and $ident and $pat and ...&quot;</span>;
<span class="kw">let</span> <span class="ident">parsed</span> <span class="op">=</span> <span class="ident">run_on</span>(<span class="ident">input</span>).<span class="ident">expect</span>(<span class="string">&quot;run-on sentence&quot;</span>);
<span class="macro">assert_eq</span><span class="macro">!</span>(<span class="ident">parsed</span>.<span class="ident">len</span>(), <span class="number">3</span>);
<span class="macro">assert_eq</span><span class="macro">!</span>(<span class="ident">parsed</span>[<span class="number">0</span>], <span class="string">&quot;expr&quot;</span>);
<span class="macro">assert_eq</span><span class="macro">!</span>(<span class="ident">parsed</span>[<span class="number">1</span>], <span class="string">&quot;ident&quot;</span>);
<span class="macro">assert_eq</span><span class="macro">!</span>(<span class="ident">parsed</span>[<span class="number">2</span>], <span class="string">&quot;pat&quot;</span>);
}</pre></div>
</div></section><section id="search" class="content hidden"></section><section class="footer"></section><script>window.rootPath = "../";window.currentCrate = "synom";</script><script src="../main.js"></script><script defer src="../search-index.js"></script></body></html>
+10
View File
@@ -0,0 +1,10 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta http-equiv="refresh" content="0;URL=macro.tuple.html">
</head>
<body>
<p>Redirecting to <a href="macro.tuple.html">macro.tuple.html</a>...</p>
<script>location.replace("macro.tuple.html" + location.search + location.hash);</script>
</body>
</html>
+30
View File
@@ -0,0 +1,30 @@
<!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 `tuple` macro in crate `synom`."><meta name="keywords" content="rust, rustlang, rust-lang, tuple"><title>synom::tuple - Rust</title><link rel="stylesheet" type="text/css" href="../normalize.css"><link rel="stylesheet" type="text/css" href="../rustdoc.css" id="mainThemeStyle"><link rel="stylesheet" type="text/css" href="../light.css" id="themeStyle"><link rel="stylesheet" type="text/css" href="../dark.css" disabled ><link rel="stylesheet" type="text/css" href="../ayu.css" disabled ><script id="default-settings"></script><script src="../storage.js"></script><noscript><link rel="stylesheet" href="../noscript.css"></noscript><link rel="icon" type="image/svg+xml" href="../favicon.svg">
<link rel="alternate icon" type="image/png" href="../favicon-16x16.png">
<link rel="alternate icon" type="image/png" href="../favicon-32x32.png"><style type="text/css">#crate-search{background-image:url("../down-arrow.svg");}</style></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"><div class="sidebar-menu">&#9776;</div><a href='../synom/index.html'><div class='logo-container rust-logo'><img src='../rust-logo.png' alt='logo'></div></a><div class="sidebar-elems"><p class="location"><a href="index.html">synom</a></p><script>window.sidebarCurrent = {name: "tuple", ty: "macro", relpath: ""};</script><script defer src="sidebar-items.js"></script></div></nav><div class="theme-picker"><button id="theme-picker" aria-label="Pick another theme!" aria-haspopup="menu"><img src="../brush.svg" width="18" alt="Pick another theme!"></button><div id="theme-choices" role="menu"></div></div><script src="../theme.js"></script><nav class="sub"><form class="search-form"><div class="search-container"><div><select id="crate-search"><option value="All crates">All crates</option></select><input class="search-input" name="search" disabled autocomplete="off" spellcheck="false" placeholder="Click or press S to search, ? for more options…" type="search"></div><button type="button" class="help-button">?</button>
<a id="settings-menu" href="../settings.html"><img src="../wheel.svg" width="18" alt="Change settings"></a></div></form></nav><section id="main" class="content"><h1 class="fqn"><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">&#x2212;</span>]</a></span><a class="srclink" href="../src/synom/lib.rs.html#1022-1026" title="goto source code">[src]</a></span><span class="in-band">Macro <a href="index.html">synom</a>::<wbr><a class="macro" href="">tuple</a></span></h1><div class="docblock type-decl hidden-by-usual-hider"><div class="example-wrap"><pre class="rust macro">
<span class="macro">macro_rules</span><span class="macro">!</span> <span class="ident">tuple</span> {
(<span class="macro-nonterminal">$</span><span class="macro-nonterminal">i</span>:<span class="ident">expr</span>, $(<span class="macro-nonterminal">$</span><span class="macro-nonterminal">rest</span>:<span class="ident">tt</span>)<span class="kw-2">*</span>) <span class="op">=</span><span class="op">&gt;</span> { ... };
}</pre></div>
</div><div class="docblock"><p>Run a series of parsers and produce all of the results in a tuple.</p>
<ul>
<li><strong>Syntax:</strong> <code>tuple!(A, B, C, ...)</code></li>
<li><strong>Output:</strong> <code>(A, B, C, ...)</code></li>
</ul>
<div class="example-wrap"><pre class="rust rust-example-rendered">
<span class="kw">extern</span> <span class="kw">crate</span> <span class="ident">syn</span>;
<span class="attribute">#[<span class="ident">macro_use</span>]</span> <span class="kw">extern</span> <span class="kw">crate</span> <span class="ident">synom</span>;
<span class="kw">use</span> <span class="ident">syn</span>::<span class="ident">Ty</span>;
<span class="kw">use</span> <span class="ident">syn</span>::<span class="ident">parse</span>::<span class="ident">ty</span>;
<span class="macro">named</span><span class="macro">!</span>(<span class="ident">two_types</span> <span class="op">-</span><span class="op">&gt;</span> (<span class="ident">Ty</span>, <span class="ident">Ty</span>), <span class="macro">tuple</span><span class="macro">!</span>(<span class="ident">ty</span>, <span class="ident">ty</span>));
<span class="kw">fn</span> <span class="ident">main</span>() {
<span class="kw">let</span> <span class="ident">input</span> <span class="op">=</span> <span class="string">&quot;&amp;str Map&lt;K, V&gt;&quot;</span>;
<span class="kw">let</span> <span class="ident">parsed</span> <span class="op">=</span> <span class="ident">two_types</span>(<span class="ident">input</span>).<span class="ident">expect</span>(<span class="string">&quot;two types&quot;</span>);
<span class="macro">println</span><span class="macro">!</span>(<span class="string">&quot;{:?}&quot;</span>, <span class="ident">parsed</span>);
}</pre></div>
</div></section><section id="search" class="content hidden"></section><section class="footer"></section><script>window.rootPath = "../";window.currentCrate = "synom";</script><script src="../main.js"></script><script defer src="../search-index.js"></script></body></html>
+10
View File
@@ -0,0 +1,10 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta http-equiv="refresh" content="0;URL=macro.value.html">
</head>
<body>
<p>Redirecting to <a href="macro.value.html">macro.value.html</a>...</p>
<script>location.replace("macro.value.html" + location.search + location.hash);</script>
</body>
</html>
+65
View File
@@ -0,0 +1,65 @@
<!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 `value` macro in crate `synom`."><meta name="keywords" content="rust, rustlang, rust-lang, value"><title>synom::value - Rust</title><link rel="stylesheet" type="text/css" href="../normalize.css"><link rel="stylesheet" type="text/css" href="../rustdoc.css" id="mainThemeStyle"><link rel="stylesheet" type="text/css" href="../light.css" id="themeStyle"><link rel="stylesheet" type="text/css" href="../dark.css" disabled ><link rel="stylesheet" type="text/css" href="../ayu.css" disabled ><script id="default-settings"></script><script src="../storage.js"></script><noscript><link rel="stylesheet" href="../noscript.css"></noscript><link rel="icon" type="image/svg+xml" href="../favicon.svg">
<link rel="alternate icon" type="image/png" href="../favicon-16x16.png">
<link rel="alternate icon" type="image/png" href="../favicon-32x32.png"><style type="text/css">#crate-search{background-image:url("../down-arrow.svg");}</style></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"><div class="sidebar-menu">&#9776;</div><a href='../synom/index.html'><div class='logo-container rust-logo'><img src='../rust-logo.png' alt='logo'></div></a><div class="sidebar-elems"><p class="location"><a href="index.html">synom</a></p><script>window.sidebarCurrent = {name: "value", ty: "macro", relpath: ""};</script><script defer src="sidebar-items.js"></script></div></nav><div class="theme-picker"><button id="theme-picker" aria-label="Pick another theme!" aria-haspopup="menu"><img src="../brush.svg" width="18" alt="Pick another theme!"></button><div id="theme-choices" role="menu"></div></div><script src="../theme.js"></script><nav class="sub"><form class="search-form"><div class="search-container"><div><select id="crate-search"><option value="All crates">All crates</option></select><input class="search-input" name="search" disabled autocomplete="off" spellcheck="false" placeholder="Click or press S to search, ? for more options…" type="search"></div><button type="button" class="help-button">?</button>
<a id="settings-menu" href="../settings.html"><img src="../wheel.svg" width="18" alt="Change settings"></a></div></form></nav><section id="main" class="content"><h1 class="fqn"><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">&#x2212;</span>]</a></span><a class="srclink" href="../src/synom/lib.rs.html#871-875" title="goto source code">[src]</a></span><span class="in-band">Macro <a href="index.html">synom</a>::<wbr><a class="macro" href="">value</a></span></h1><div class="docblock type-decl hidden-by-usual-hider"><div class="example-wrap"><pre class="rust macro">
<span class="macro">macro_rules</span><span class="macro">!</span> <span class="ident">value</span> {
(<span class="macro-nonterminal">$</span><span class="macro-nonterminal">i</span>:<span class="ident">expr</span>, <span class="macro-nonterminal">$</span><span class="macro-nonterminal">res</span>:<span class="ident">expr</span>) <span class="op">=</span><span class="op">&gt;</span> { ... };
}</pre></div>
</div><div class="docblock"><p>Produce the given value without parsing anything. Useful as an argument to
<code>switch!</code>.</p>
<ul>
<li><strong>Syntax:</strong> <code>value!(VALUE)</code></li>
<li><strong>Output:</strong> <code>VALUE</code></li>
</ul>
<div class="example-wrap"><pre class="rust rust-example-rendered">
<span class="kw">extern</span> <span class="kw">crate</span> <span class="ident">syn</span>;
<span class="attribute">#[<span class="ident">macro_use</span>]</span> <span class="kw">extern</span> <span class="kw">crate</span> <span class="ident">synom</span>;
<span class="kw">use</span> <span class="ident">syn</span>::{<span class="ident">Ident</span>, <span class="ident">Ty</span>};
<span class="kw">use</span> <span class="ident">syn</span>::<span class="ident">parse</span>::{<span class="ident">ident</span>, <span class="ident">ty</span>};
<span class="attribute">#[<span class="ident">derive</span>(<span class="ident">Debug</span>)]</span>
<span class="kw">enum</span> <span class="ident">UnitType</span> {
<span class="ident">Struct</span> {
<span class="ident">name</span>: <span class="ident">Ident</span>,
},
<span class="ident">Enum</span> {
<span class="ident">name</span>: <span class="ident">Ident</span>,
<span class="ident">variant</span>: <span class="ident">Ident</span>,
},
}
<span class="comment">// Parse a unit struct or enum: either `struct S;` or `enum E { V }`.</span>
<span class="macro">named</span><span class="macro">!</span>(<span class="ident">unit_type</span> <span class="op">-</span><span class="op">&gt;</span> <span class="ident">UnitType</span>, <span class="macro">do_parse</span><span class="macro">!</span>(
<span class="ident">which</span>: <span class="macro">alt</span><span class="macro">!</span>(<span class="macro">keyword</span><span class="macro">!</span>(<span class="string">&quot;struct&quot;</span>) <span class="op">|</span> <span class="macro">keyword</span><span class="macro">!</span>(<span class="string">&quot;enum&quot;</span>)) <span class="op">&gt;</span><span class="op">&gt;</span>
<span class="ident">id</span>: <span class="ident">ident</span> <span class="op">&gt;</span><span class="op">&gt;</span>
<span class="ident">item</span>: <span class="macro">switch</span><span class="macro">!</span>(<span class="macro">value</span><span class="macro">!</span>(<span class="ident">which</span>),
<span class="string">&quot;struct&quot;</span> <span class="op">=</span><span class="op">&gt;</span> <span class="macro">map</span><span class="macro">!</span>(
<span class="macro">punct</span><span class="macro">!</span>(<span class="string">&quot;;&quot;</span>),
<span class="kw">move</span> <span class="op">|</span><span class="kw">_</span><span class="op">|</span> <span class="ident">UnitType</span>::<span class="ident">Struct</span> {
<span class="ident">name</span>: <span class="ident">id</span>,
}
)
<span class="op">|</span>
<span class="string">&quot;enum&quot;</span> <span class="op">=</span><span class="op">&gt;</span> <span class="macro">map</span><span class="macro">!</span>(
<span class="macro">delimited</span><span class="macro">!</span>(<span class="macro">punct</span><span class="macro">!</span>(<span class="string">&quot;{&quot;</span>), <span class="ident">ident</span>, <span class="macro">punct</span><span class="macro">!</span>(<span class="string">&quot;}&quot;</span>)),
<span class="kw">move</span> <span class="op">|</span><span class="ident">variant</span><span class="op">|</span> <span class="ident">UnitType</span>::<span class="ident">Enum</span> {
<span class="ident">name</span>: <span class="ident">id</span>,
<span class="ident">variant</span>: <span class="ident">variant</span>,
}
)
) <span class="op">&gt;</span><span class="op">&gt;</span>
(<span class="ident">item</span>)
));
<span class="kw">fn</span> <span class="ident">main</span>() {
<span class="kw">let</span> <span class="ident">input</span> <span class="op">=</span> <span class="string">&quot;struct S;&quot;</span>;
<span class="kw">let</span> <span class="ident">parsed</span> <span class="op">=</span> <span class="ident">unit_type</span>(<span class="ident">input</span>).<span class="ident">expect</span>(<span class="string">&quot;unit struct or enum&quot;</span>);
<span class="macro">println</span><span class="macro">!</span>(<span class="string">&quot;{:?}&quot;</span>, <span class="ident">parsed</span>);
<span class="kw">let</span> <span class="ident">input</span> <span class="op">=</span> <span class="string">&quot;enum E { V }&quot;</span>;
<span class="kw">let</span> <span class="ident">parsed</span> <span class="op">=</span> <span class="ident">unit_type</span>(<span class="ident">input</span>).<span class="ident">expect</span>(<span class="string">&quot;unit struct or enum&quot;</span>);
<span class="macro">println</span><span class="macro">!</span>(<span class="string">&quot;{:?}&quot;</span>, <span class="ident">parsed</span>);
}</pre></div>
</div></section><section id="search" class="content hidden"></section><section class="footer"></section><script>window.rootPath = "../";window.currentCrate = "synom";</script><script src="../main.js"></script><script defer src="../search-index.js"></script></body></html>
+1
View File
@@ -0,0 +1 @@
initSidebarItems({"enum":[["IResult","The result of a parser."]],"macro":[["alt","Run a series of parsers, returning the result of the first one which succeeds."],["call","Invoke the given parser function with the passed in arguments."],["cond","Conditionally execute the given parser."],["cond_reduce","Fail to parse if condition is false, otherwise parse the given parser."],["delimited","Value surrounded by a pair of delimiters."],["do_parse","Run a series of parsers, one after another, optionally assigning the results a name. Fail if any of the parsers fails."],["epsilon","Parses nothing and always succeeds."],["keyword","Parse a keyword like \"fn\" or \"struct\"."],["many0","Parse zero or more values using the given parser."],["map","Transform the result of a parser by applying a function or closure."],["named","Define a function from a parser combination."],["not","Parses successfully if the given parser fails to parse. Does not consume any of the input."],["opt_vec","Turn a failed parse into an empty vector. The argument parser must itself return a vector."],["option","Turn a failed parse into `None` and a successful parse into `Some`."],["peek","Parse a value without consuming it from the input data."],["preceded","Parse two things, returning the value of the second."],["punct","Parse a piece of punctuation like \"+\" or \"+=\"."],["separated_list","Zero or more values separated by some separator. Does not allow a trailing seperator."],["separated_nonempty_list","One or more values separated by some separator. Does not allow a trailing separator."],["switch","Pattern-match the result of a parser to select which other parser to run."],["tag","Parse the given string from exactly the current position in the input. You almost always want `punct!` or `keyword!` instead of this."],["take_until","Parse the part of the input up to but not including the given string. Fail to parse if the given string is not present in the input."],["terminated","Parse two things, returning the value of the first."],["terminated_list","Zero or more values separated by some separator. A trailing separator is allowed."],["tuple","Run a series of parsers and produce all of the results in a tuple."],["value","Produce the given value without parsing anything. Useful as an argument to `switch!`."]]});