<!DOCTYPE html><htmllang="en"><head><metacharset="utf-8"><metaname="viewport"content="width=device-width, initial-scale=1.0"><metaname="generator"content="rustdoc"><metaname="description"content="A high-level intermediate representation (HIR) for a regular expression."><title>Hir in regex_syntax::hir - Rust</title><linkrel="preload"as="font"type="font/woff2"crossoriginhref="../../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><linkrel="preload"as="font"type="font/woff2"crossoriginhref="../../static.files/FiraSans-Regular-018c141bf0843ffd.woff2"><linkrel="preload"as="font"type="font/woff2"crossoriginhref="../../static.files/FiraSans-Medium-8f9a781e4970d388.woff2"><linkrel="preload"as="font"type="font/woff2"crossoriginhref="../../static.files/SourceCodePro-Regular-562dcc5011b6de7d.ttf.woff2"><linkrel="preload"as="font"type="font/woff2"crossoriginhref="../../static.files/SourceCodePro-Semibold-d899c5a5c4aeb14a.ttf.woff2"><linkrel="stylesheet"href="../../static.files/normalize-76eba96aa4d2e634.css"><linkrel="stylesheet"href="../../static.files/rustdoc-ac92e1bbe349e143.css"><metaname="rustdoc-vars"data-root-path="../../"data-static-root-path="../../static.files/"data-current-crate="regex_syntax"data-themes=""data-resource-suffix=""data-rustdoc-version="1.76.0 (07dca489a 2024-02-04)"data-channel="1.76.0"data-search-js="search-2b6ce74ff89ae146.js"data-settings-js="settings-4313503d2e1961c2.js"><scriptsrc="../../static.files/storage-f2adc0d6ca4d09fb.js"></script><scriptdefersrc="sidebar-items.js"></script><scriptdefersrc="../../static.files/main-305769736d49e732.js"></script><noscript><linkrel="stylesheet"href="../../static.files/noscript-feafe1bb7466e4bd.css"></noscript><linkrel="alternate icon"type="image/png"href="../../static.files/favicon-16x16-8b506e7a72182f1c.png"><linkrel="alternate icon"type="image/png"href="../../static.files/favicon-32x32-422f7d1d52889060.png"><linkrel="icon"type="image/svg+xml"href="../../static.files/favicon-2c020d218678b618.svg"></head><bodyclass="rustdoc struct"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><navclass="mobile-topbar"><buttonclass="sidebar-menu-toggle">☰</button></nav><navclass="sidebar"><divclass="sidebar-crate"><h2><ahref="../../regex_syntax/index.html">regex_syntax</a><spanclass="version">0.8.2</span></h2></div><h2class="location"><ahref="#">Hir</a></h2><divclass="sidebar-elems"><section><h3><ahref="#implementations">Methods</a></h3><ulclass="block method"><li><ahref="#method.alternation">alternation</a></li><li><ahref="#method.capture">capture</a></li><li><ahref="#method.class">class</a></li><li><ahref="#method.concat">concat</a></li><li><ahref="#method.dot">dot</a></li><li><ahref="#method.empty">empty</a></li><li><ahref="#method.fail">fail</a></li><li><ahref="#method.into_kind">into_kind</a></li><li><ahref="#method.kind">kind</a></li><li><ahref="#method.literal">literal</a></li><li><ahref="#method.look">look</a></li><li><ahref="#method.properties">properties</a></li><li><ahref="#method.repetition">repetition</a></li></ul><h3><ahref="#trait-implementations">Trait Implementations</a></h3><ulclass="block trait-implementation"><li><ahref="#impl-Clone-for-Hir">Clone</a></li><li><ahref="#impl-Debug-for-Hir">Debug</a></li><li><ahref="#impl-Display-for-Hir">Display</a></li><li><ahref="#impl-Drop-for-Hir">Drop</a></li><li><ahref="#impl-Eq-for-Hir">Eq</a></li><li><ahref="#impl-PartialEq-for-Hir">PartialEq</a></li><li><ahref="#impl-StructuralEq-for-Hir">StructuralEq</a></li><li><ahref="#impl-StructuralPartialEq-for-Hir">StructuralPartialEq</a></li></ul><h3><ahref="#synthetic-implementations">Auto Trait Implementations</a></h3><ulclass="block synthetic-implementation"><li><ahref="#impl-RefUnwindSafe-for-Hir">RefUnwindSafe</a></li><li><ahref="#impl-Send-for-Hir">Send</a></li><li><ahref="#impl-Sync-for-Hir">Sync</a></li><li><ahref="#impl-Unpin-for-Hir">Unpin</a></li><li><ahref="#im
<main><divclass="width-limiter"><navclass="sub"><formclass="search-form"><span></span><divid="sidebar-button"tabindex="-1"><ahref="../../regex_syntax/all.html"title="show sidebar"></a></div><inputclass="search-input"name="search"aria-label="Run search in the documentation"autocomplete="off"spellcheck="false"placeholder="Click or press ‘S’ to search, ‘?’ for more options…"type="search"><divid="help-button"tabindex="-1"><ahref="../../help.html"title="help">?</a></div><divid="settings-menu"tabindex="-1"><ahref="../../settings.html"title="settings"><imgwidth="22"height="22"alt="Change settings"src="../../static.files/wheel-7b819b6101059cd0.svg"></a></div></form></nav><sectionid="main-content"class="content"><divclass="main-heading"><h1>Struct <ahref="../index.html">regex_syntax</a>::<wbr><ahref="index.html">hir</a>::<wbr><aclass="struct"href="#">Hir</a><buttonid="copy-path"title="Copy item path to clipboard"><imgsrc="../../static.files/clipboard-7571035ce49a181d.svg"width="19"height="18"alt="Copy item path"></button></h1><spanclass="out-of-band"><aclass="src"href="../../src/regex_syntax/hir/mod.rs.html#205-210">source</a> · <buttonid="toggle-all-docs"title="collapse all docs">[<span>−</span>]</button></span></div><preclass="rust item-decl"><code>pub struct Hir { <spanclass="comment">/* private fields */</span> }</code></pre><detailsclass="toggle top-doc"open><summaryclass="hideme"><span>Expand description</span></summary><divclass="docblock"><p>A high-level intermediate representation (HIR) for a regular expression.</p>
<p>An HIR value is a combination of a <ahref="enum.HirKind.html"title="enum regex_syntax::hir::HirKind"><code>HirKind</code></a> and a set of <ahref="struct.Properties.html"title="struct regex_syntax::hir::Properties"><code>Properties</code></a>.
An <code>HirKind</code> indicates what kind of regular expression it is (a literal,
a repetition, a look-around assertion, etc.), where as a <code>Properties</code>
describes various facts about the regular expression. For example, whether
it matches UTF-8 or if it matches the empty string.</p>
<p>The HIR of a regular expression represents an intermediate step between
its abstract syntax (a structured description of the concrete syntax) and
an actual regex matcher. The purpose of HIR is to make regular expressions
easier to analyze. In particular, the AST is much more complex than the
HIR. For example, while an AST supports arbitrarily nested character
classes, the HIR will flatten all nested classes into a single set. The HIR
will also “compile away” every flag present in the concrete syntax. For
example, users of HIR expressions never need to worry about case folding;
it is handled automatically by the translator (e.g., by translating
<code>(?i:A)</code> to <code>[aA]</code>).</p>
<p>The specific type of an HIR expression can be accessed via its <code>kind</code>
or <code>into_kind</code> methods. This extra level of indirection exists for two
reasons:</p>
<ol>
<li>Construction of an HIR expression <em>must</em> use the constructor methods on
this <code>Hir</code> type instead of building the <code>HirKind</code> values directly. This
permits construction to enforce invariants like “concatenations always
consist of two or more sub-expressions.”</li>
<li>Every HIR expression contains attributes that are defined inductively,
and can be computed cheaply during the construction process. For example,
one such attribute is whether the expression must match at the beginning of
the haystack.</li>
</ol>
<p>In particular, if you have an <code>HirKind</code> value, then there is intentionally
no way to build an <code>Hir</code> value from it. You instead need to do case
analysis on the <code>HirKind</code> value and build the <code>Hir</code> value using its smart
<p>This type defines its own destructor that uses constant stack space and
heap space proportional to the size of the HIR.</p>
<p>Also, an <code>Hir</code>’s <code>fmt::Display</code> implementation prints an HIR as a regular
expression pattern string, and uses constant stack space and heap space
proportional to the size of the <code>Hir</code>. The regex it prints is guaranteed to
be <em>semantically</em> equivalent to the original concrete syntax, but it may
look very different. (And potentially not practically readable by a human.)</p>
<p>An <code>Hir</code>’s <code>fmt::Debug</code> implementation currently does not use constant
stack space. The implementation will also suppress some details (such as
the <code>Properties</code> inlined into every <code>Hir</code> value to make it less noisy).</p>
</div></details><h2id="implementations"class="section-header">Implementations<ahref="#implementations"class="anchor">§</a></h2><divid="implementations-list"><detailsclass="toggle implementors-toggle"open><summary><sectionid="impl-Hir"class="impl"><aclass="src rightside"href="../../src/regex_syntax/hir/mod.rs.html#213-240">source</a><ahref="#impl-Hir"class="anchor">§</a><h3class="code-header">impl <aclass="struct"href="struct.Hir.html"title="struct regex_syntax::hir::Hir">Hir</a></h3></section></summary><divclass="docblock"><p>Methods for accessing the underlying <code>HirKind</code> and <code>Properties</code>.</p>
</div><divclass="impl-items"><detailsclass="toggle method-toggle"open><summary><sectionid="method.kind"class="method"><aclass="src rightside"href="../../src/regex_syntax/hir/mod.rs.html#215-217">source</a><h4class="code-header">pub fn <ahref="#method.kind"class="fn">kind</a>(&self) ->&<aclass="enum"href="enum.HirKind.html"title="enum regex_syntax::hir::HirKind">HirKind</a></h4></section></summary><divclass="docblock"><p>Returns a reference to the underlying HIR kind.</p>
</div></details><detailsclass="toggle method-toggle"open><summary><sectionid="method.into_kind"class="method"><aclass="src rightside"href="../../src/regex_syntax/hir/mod.rs.html#221-223">source</a><h4class="code-header">pub fn <ahref="#method.into_kind"class="fn">into_kind</a>(self) -><aclass="enum"href="enum.HirKind.html"title="enum regex_syntax::hir::HirKind">HirKind</a></h4></section></summary><divclass="docblock"><p>Consumes ownership of this HIR expression and returns its underlying
<code>HirKind</code>.</p>
</div></details><detailsclass="toggle method-toggle"open><summary><sectionid="method.properties"class="method"><aclass="src rightside"href="../../src/regex_syntax/hir/mod.rs.html#226-228">source</a><h4class="code-header">pub fn <ahref="#method.properties"class="fn">properties</a>(&self) ->&<aclass="struct"href="struct.Properties.html"title="struct regex_syntax::hir::Properties">Properties</a></h4></section></summary><divclass="docblock"><p>Returns the properties computed for this <code>Hir</code>.</p>
</div></details></div></details><detailsclass="toggle implementors-toggle"open><summary><sectionid="impl-Hir-1"class="impl"><aclass="src rightside"href="../../src/regex_syntax/hir/mod.rs.html#253-695">source</a><ahref="#impl-Hir-1"class="anchor">§</a><h3class="code-header">impl <aclass="struct"href="struct.Hir.html"title="struct regex_syntax::hir::Hir">Hir</a></h3></section></summary><divclass="docblock"><p>Smart constructors for HIR values.</p>
<p>These constructors are called “smart” because they do inductive work or
simplifications. For example, calling <code>Hir::repetition</code> with a repetition
like <code>a{0}</code> will actually return a <code>Hir</code> with a <code>HirKind::Empty</code> kind
since it is equivalent to an empty regex. Another example is calling
<code>Hir::concat(vec![expr])</code>. Instead of getting a <code>HirKind::Concat</code>, you’ll
just get back the original <code>expr</code> since it’s precisely equivalent.</p>
<p>Smart constructors enable maintaining invariants about the HIR data type
while also simulanteously keeping the representation as simple as possible.</p>
</div><divclass="impl-items"><detailsclass="toggle method-toggle"open><summary><sectionid="method.empty"class="method"><aclass="src rightside"href="../../src/regex_syntax/hir/mod.rs.html#258-261">source</a><h4class="code-header">pub fn <ahref="#method.empty"class="fn">empty</a>() -><aclass="struct"href="struct.Hir.html"title="struct regex_syntax::hir::Hir">Hir</a></h4></section></summary><divclass="docblock"><p>Returns an empty HIR expression.</p>
<p>An empty HIR expression always matches, including the empty string.</p>
</div></details><detailsclass="toggle method-toggle"open><summary><sectionid="method.fail"class="method"><aclass="src rightside"href="../../src/regex_syntax/hir/mod.rs.html#279-286">source</a><h4class="code-header">pub fn <ahref="#method.fail"class="fn">fail</a>() -><aclass="struct"href="struct.Hir.html"title="struct regex_syntax::hir::Hir">Hir</a></h4></section></summary><divclass="docblock"><p>Returns an HIR expression that can never match anything. That is,
the size of the set of strings in the language described by the HIR
returned is <code>0</code>.</p>
<p>This is distinct from <ahref="struct.Hir.html#method.empty"title="associated function regex_syntax::hir::Hir::empty"><code>Hir::empty</code></a> in that the empty string matches
the HIR returned by <code>Hir::empty</code>. That is, the set of strings in the
language describe described by <code>Hir::empty</code> is non-empty.</p>
<p>Note that currently, the HIR returned uses an empty character class to
indicate that nothing can match. An equivalent expression that cannot
match is an empty alternation, but all such “fail” expressions are
normalized (via smart constructors) to empty character classes. This is
because empty character classes can be spelled in the concrete syntax
of a regex (e.g., <code>\P{any}</code> or <code>(?-u:[^\x00-\xFF])</code> or <code>[a&&b]</code>), but
empty alternations cannot.</p>
</div></details><detailsclass="toggle method-toggle"open><summary><sectionid="method.literal"class="method"><aclass="src rightside"href="../../src/regex_syntax/hir/mod.rs.html#326-335">source</a><h4class="code-header">pub fn <ahref="#method.literal"class="fn">literal</a><B: <aclass="trait"href="https://doc.rust-lang.org/1.76.0/core/convert/trait.Into.html"title="trait core::convert::Into">Into</a><<aclass="struct"href="https://doc.rust-lang.org/1.76.0/alloc/boxed/struct.Box.html"title="struct alloc::boxed::Box">Box</a><[<aclass="primitive"href="https://doc.rust-lang.org/1.76.0/std/primitive.u8.html">u8</a>]>>>(lit: B) -><aclass="struct"href="struct.Hir.html"title="struct regex_syntax::hir::Hir">Hir</a></h4></section></summary><divclass="docblock"><p>Creates a literal HIR expression.</p>
<p>This accepts anything that can be converted into a <code>Box<[u8]></code>.</p>
<p>Note that there is no mechanism for storing a <code>char</code> or a <code>Box<str></code>
in an HIR. Everything is “just bytes.” Whether a <code>Literal</code> (or
any HIR node) matches valid UTF-8 exclusively can be queried via
</div></details><detailsclass="toggle method-toggle"open><summary><sectionid="method.class"class="method"><aclass="src rightside"href="../../src/regex_syntax/hir/mod.rs.html#343-351">source</a><h4class="code-header">pub fn <ahref="#method.class"class="fn">class</a>(class: <aclass="enum"href="enum.Class.html"title="enum regex_syntax::hir::Class">Class</a>) -><aclass="struct"href="struct.Hir.html"title="struct regex_syntax::hir::Hir">Hir</a></h4></section></summary><divclass="docblock"><p>Creates a class HIR expression. The class may either be defined over
ranges of Unicode codepoints or ranges of raw byte values.</p>
<p>Note that an empty class is permitted. An empty class is equivalent to
<code>Hir::fail()</code>.</p>
</div></details><detailsclass="toggle method-toggle"open><summary><sectionid="method.look"class="method"><aclass="src rightside"href="../../src/regex_syntax/hir/mod.rs.html#355-358">source</a><h4class="code-header">pub fn <ahref="#method.look"class="fn">look</a>(look: <aclass="enum"href="enum.Look.html"title="enum regex_syntax::hir::Look">Look</a>) -><aclass="struct"href="struct.Hir.html"title="struct regex_syntax::hir::Hir">Hir</a></h4></section></summary><divclass="docblock"><p>Creates a look-around assertion HIR expression.</p>
</div></details><detailsclass="toggle method-toggle"open><summary><sectionid="method.repetition"class="method"><aclass="src rightside"href="../../src/regex_syntax/hir/mod.rs.html#362-381">source</a><h4class="code-header">pub fn <ahref="#method.repetition"class="fn">repetition</a>(rep: <aclass="struct"href="struct.Repetition.html"title="struct regex_syntax::hir::Repetition">Repetition</a>) -><aclass="struct"href="struct.Hir.html"title="struct regex_syntax::hir::Hir">Hir</a></h4></section></summary><divclass="docblock"><p>Creates a repetition HIR expression.</p>
</div></details><detailsclass="toggle method-toggle"open><summary><sectionid="method.capture"class="method"><aclass="src rightside"href="../../src/regex_syntax/hir/mod.rs.html#391-394">source</a><h4class="code-header">pub fn <ahref="#method.capture"class="fn">capture</a>(capture: <aclass="struct"href="struct.Capture.html"title="struct regex_syntax::hir::Capture">Capture</a>) -><aclass="struct"href="struct.Hir.html"title="struct regex_syntax::hir::Hir">Hir</a></h4></section></summary><divclass="docblock"><p>Creates a capture HIR expression.</p>
<p>Note that there is no explicit HIR value for a non-capturing group.
Since a non-capturing group only exists to override precedence in the
concrete syntax and since an HIR already does its own grouping based on
what is parsed, there is no need to explicitly represent non-capturing
groups in the HIR.</p>
</div></details><detailsclass="toggle method-toggle"open><summary><sectionid="method.concat"class="method"><aclass="src rightside"href="../../src/regex_syntax/hir/mod.rs.html#423-486">source</a><h4class="code-header">pub fn <ahref="#method.concat"class="fn">concat</a>(subs: <aclass="struct"href="https://doc.rust-lang.org/1.76.0/alloc/vec/struct.Vec.html"title="struct alloc::vec::Vec">Vec</a><<aclass="struct"href="struct.Hir.html"title="struct regex_syntax::hir::Hir">Hir</a>>) -><aclass="struct"href="struct.Hir.html"title="struct regex_syntax::hir::Hir">Hir</a></h4></section></summary><divclass="docblock"><p>Returns the concatenation of the given expressions.</p>
<p>This attempts to flatten and simplify the concatenation as appropriate.</p>
</div></details><detailsclass="toggle method-toggle"open><summary><sectionid="method.alternation"class="method"><aclass="src rightside"href="../../src/regex_syntax/hir/mod.rs.html#556-616">source</a><h4class="code-header">pub fn <ahref="#method.alternation"class="fn">alternation</a>(subs: <aclass="struct"href="https://doc.rust-lang.org/1.76.0/alloc/vec/struct.Vec.html"title="struct alloc::vec::Vec">Vec</a><<aclass="struct"href="struct.Hir.html"title="struct regex_syntax::hir::Hir">Hir</a>>) -><aclass="struct"href="struct.Hir.html"title="struct regex_syntax::hir::Hir">Hir</a></h4></section></summary><divclass="docblock"><p>Returns the alternation of the given expressions.</p>
<p>This flattens and simplifies the alternation as appropriate. This may
include factoring out common prefixes or even rewriting the alternation
as a character class.</p>
<p>Note that an empty alternation is equivalent to <code>Hir::fail()</code>. (It
is not possible for one to write an empty alternation, or even an
alternation with a single sub-expression, in the concrete syntax of a
<p>Note that these sorts of simplifications are not guaranteed.</p>
</div></details><detailsclass="toggle method-toggle"open><summary><sectionid="method.dot"class="method"><aclass="src rightside"href="../../src/regex_syntax/hir/mod.rs.html#643-694">source</a><h4class="code-header">pub fn <ahref="#method.dot"class="fn">dot</a>(dot: <aclass="enum"href="enum.Dot.html"title="enum regex_syntax::hir::Dot">Dot</a>) -><aclass="struct"href="struct.Hir.html"title="struct regex_syntax::hir::Hir">Hir</a></h4></section></summary><divclass="docblock"><p>Returns an HIR expression for <code>.</code>.</p>
<ul>
<li><ahref="enum.Dot.html#variant.AnyChar"title="variant regex_syntax::hir::Dot::AnyChar"><code>Dot::AnyChar</code></a> maps to <code>(?su-R:.)</code>.</li>
<li><ahref="enum.Dot.html#variant.AnyByte"title="variant regex_syntax::hir::Dot::AnyByte"><code>Dot::AnyByte</code></a> maps to <code>(?s-Ru:.)</code>.</li>
<li><ahref="enum.Dot.html#variant.AnyCharExceptLF"title="variant regex_syntax::hir::Dot::AnyCharExceptLF"><code>Dot::AnyCharExceptLF</code></a> maps to <code>(?u-Rs:.)</code>.</li>
<li><ahref="enum.Dot.html#variant.AnyCharExceptCRLF"title="variant regex_syntax::hir::Dot::AnyCharExceptCRLF"><code>Dot::AnyCharExceptCRLF</code></a> maps to <code>(?Ru-s:.)</code>.</li>
<li><ahref="enum.Dot.html#variant.AnyByteExceptLF"title="variant regex_syntax::hir::Dot::AnyByteExceptLF"><code>Dot::AnyByteExceptLF</code></a> maps to <code>(?-Rsu:.)</code>.</li>
<li><ahref="enum.Dot.html#variant.AnyByteExceptCRLF"title="variant regex_syntax::hir::Dot::AnyByteExceptCRLF"><code>Dot::AnyByteExceptCRLF</code></a> maps to <code>(?R-su:.)</code>.</li>
</div><divclass="impl-items"><detailsclass="toggle method-toggle"open><summary><sectionid="method.fmt"class="method trait-impl"><aclass="src rightside"href="../../src/regex_syntax/hir/mod.rs.html#773-775">source</a><ahref="#method.fmt"class="anchor">§</a><h4class="code-header">fn <ahref="https://doc.rust-lang.org/1.76.0/core/fmt/trait.Display.html#tymethod.fmt"class="fn">fmt</a>(&self, f: &mut <aclass="struct"href="https://doc.rust-lang.org/1.76.0/core/fmt/struct.Formatter.html"title="struct core::fmt::Formatter">Formatter</a><'_>) -><aclass="type"href="https://doc.rust-lang.org/1.76.0/core/fmt/type.Result.html"title="type core::fmt::Result">Result</a></h4></section></summary><divclass='docblock'>Formats the value using the given formatter. <ahref="https://doc.rust-lang.org/1.76.0/core/fmt/trait.Display.html#tymethod.fmt">Read more</a></div></details></div></details><detailsclass="toggle implementors-toggle"open><summary><sectionid="impl-Drop-for-Hir"class="impl"><aclass="src rightside"href="../../src/regex_syntax/hir/mod.rs.html#1901-1941">source</a><ahref="#impl-Drop-for-Hir"class="anchor">§</a><h3class="code-header">impl <aclass="trait"href="https://doc.rust-lang.org/1.76.0/core/ops/drop/trait.Drop.html"title="trait core::ops::drop::Drop">Drop</a> for <aclass="struct"href="struct.Hir.html"title="struct regex_syntax::hir::Hir">Hir</a></h3></section></summary><divclass="docblock"><p>A custom <code>Drop</code> impl is used for <code>HirKind</code> such that it uses constant stack
space but heap space proportional to the depth of the total <code>Hir</code>.</p>
</div><divclass="impl-items"><detailsclass="toggle method-toggle"open><summary><sectionid="method.drop"class="method trait-impl"><aclass="src rightside"href="../../src/regex_syntax/hir/mod.rs.html#1902-1940">source</a><ahref="#method.drop"class="anchor">§</a><h4class="code-header">fn <ahref="https://doc.rust-lang.org/1.76.0/core/ops/drop/trait.Drop.html#tymethod.drop"class="fn">drop</a>(&mut self)</h4></section></summary><divclass='docblock'>Executes the destructor for this type. <ahref="https://doc.rust-lang.org/1.76.0/core/ops/drop/trait.Drop.html#tymethod.drop">Read more</a></div></details></div></details><detailsclass="toggle implementors-toggle"open><summary><sectionid="impl-PartialEq-for-Hir"class="impl"><aclass="src rightside"href="../../src/regex_syntax/hir/mod.rs.html#204">source</a><ahref="#impl-PartialEq-for-Hir"class="anchor">§</a><h3class="code-header">impl <aclass="trait"href="https://doc.rust-lang.org/1.76.0/core/cmp/trait.PartialEq.html"title="trait core::cmp::PartialEq">PartialEq</a> for <aclass="struct"href="struct.Hir.html"title="struct regex_syntax::hir::Hir">Hir</a></h3></section></summary><divclass="impl-items"><detailsclass="toggle method-toggle"open><summary><sectionid="method.eq"class="method trait-impl"><aclass="src rightside"href="../../src/regex_syntax/hir/mod.rs.html#204">source</a><ahref="#method.eq"class="anchor">§</a><h4class="code-header">fn <ahref="https://doc.rust-lang.org/1.76.0/core/cmp/trait.PartialEq.html#tymethod.eq"class="fn">eq</a>(&self, other: &<aclass="struct"href="struct.Hir.html"title="struct regex_syntax::hir::Hir">Hir</a>) -><aclass="primitive"href="https://doc.rust-lang.org/1.76.0/std/primitive.bool.html">bool</a></h4></section></summary><divclass='docblock'>This method tests for <code>self</code> and <code>other</code> values to be equal, and is used
by <code>==</code>.</div></details><detailsclass="toggle method-toggle"open><summary><sectionid="method.ne"class="method trait-impl"><spanclass="rightside"><spanclass="since"title="Stable since Rust version 1.0.0">1.0.0</span> · <aclass="src"href="https://doc.rust-lang.org/1.76.0/src/core/cmp.rs.html#242">source</a></span><ahref="#method.ne"class="anchor">§</a><h4class="code-header">fn <ahref="https://doc.rust-lang.org/1.76.0/core/cmp/trait.PartialEq.html#method.ne"class="fn">ne</a>(&self, other: <aclass="primitive"href="https://doc.rust-lang.org/1.76.0/std/primitive.reference.html">&Rhs</a>) -><aclass="primitive"href="https://doc.rust-lang.org/1.76.0/std/primitive.bool.html">bool</a></h4></section></summary><divclass='docblock'>This method tests for <code>!=</code>. The default implementation is almost always
sufficient, and should not be overridden without very good reason.</div></details></div></details><sectionid="impl-Eq-for-Hir"class="impl"><aclass="src rightside"href="../../src/regex_syntax/hir/mod.rs.html#204">source</a><ahref="#impl-Eq-for-Hir"class="anchor">§</a><h3class="code-header">impl <aclass="trait"href="https://doc.rust-lang.org/1.76.0/core/cmp/trait.Eq.html"title="trait core::cmp::Eq">Eq</a> for <aclass="struct"href="struct.Hir.html"title="struct regex_syntax::hir::Hir">Hir</a></h3></section><sectionid="impl-StructuralEq-for-Hir"class="impl"><aclass="src rightside"href="../../src/regex_syntax/hir/mod.rs.html#204">source</a><ahref="#impl-StructuralEq-for-Hir"class="anchor">§</a><h3class="code-header">impl <aclass="trait"href="https://doc.rust-lang.org/1.76.0/core/marker/trait.StructuralEq.html"title="trait core::marker::StructuralEq">StructuralEq</a> for <aclass="struct"href="struct.Hir.html"title="struct regex_syntax::hir::Hir">Hir</a></h3></section><sectionid="impl-StructuralPartialEq-for-Hir"class="impl"><aclass="src rightside"href="../../src/regex_syntax/hir/mod.rs.html#204">source</a><ahref="#impl-StructuralPartialEq-for-Hir"class="anchor">§</a><h3class="code-header">impl <aclass="trait"href="https://doc.rust-lang.org/1.76.0/core/marker/trait.StructuralPartialEq.html"title="trait core::marker::StructuralPartialEq">StructuralPartialEq</a> for <aclass="struct"href="struct.Hir.html"title="struct regex_syntax::hir::Hir">Hir</a></h3></section></div><h2id="synthetic-implementations"class="section-header">Auto Trait Implementations<ahref="#synthetic-implementations"class="anchor">§</a></h2><divid="synthetic-implementations-list"><sectionid="impl-RefUnwindSafe-for-Hir"class="impl"><ahref="#impl-RefUnwindSafe-for-Hir"class="anchor">§</a><h3class="code-header">impl <aclass="trait"href="https://doc.rust-lang.org/1.76.0/core/panic/unwind_safe/trait.RefUnwindSafe.html"title="trait core::panic::unwind_safe::RefUnwindSafe">RefUnwindSafe</a> for <aclass="struct"href="struct.Hir.html"title="struct regex_syntax::hir::Hir">Hir</a></h3></section><sectionid="impl-Send-for-Hir"class="impl"><ahref="#impl-Send-for-Hir"class="anchor">§</a><h3class="code-header">impl <aclass="trait"href="https://doc.rust-lang.org/1.76.0/core/marker/trait.Send.html"title="trait core::marker::Send">Send</a> for <aclass="struct"href="struct.Hir.html"title="struct regex_syntax::hir::Hir">Hir</a></h3></section><sectionid="impl-Sync-for-Hir"class="impl"><ahref="#impl-Sync-for-Hir"class="anchor">§</a><h3class="code-header">impl <aclass="trait"href="https://doc.rust-lang.org/1.76.0/core/marker/trait.Sync.html"title="trait core::marker::Sync">Sync</a> for <aclass="struct"href="struct.Hir.html"title="struct regex_syntax::hir::Hir">Hir</a></h3></section><sectionid="impl-Unpin-for-Hir"class="impl"><ahref="#impl-Unpin-for-Hir"class="anchor">§</a><h3class="code-header">impl <aclass="trait"href="https://doc.rust-lang.org/1.76.0/core/marker/trait.Unpin.html"title="trait core::marker::Unpin">Unpin</a> for <aclass="struct"href="struct.Hir.html"title="struct regex_syntax::hir::Hir">Hir</a></h3></section><sectionid="impl-UnwindSafe-for-Hir"class="impl"><ahref="#impl-UnwindSafe-for-Hir"class="anchor">§</a><h3class="code-header">impl <aclass="trait"href="https://doc.rust-lang.org/1.76.0/core/panic/unwind_safe/trait.UnwindSafe.html"title="trait core::panic::unwind_safe::UnwindSafe">UnwindSafe</a> for <aclass="struct"href="struct.Hir.html"title="struct regex_syntax::hir::Hir">Hir</a></h3></section></div><h2id="blanket-implementations"class="section-header">Blanket Implementations<ahref="#blanket-implementations"class="anchor">§</a></h2><divid="blanket-implementations-list"><detailsclass="toggle implementors-toggle"><summary><sectionid="impl-Any-for-T"class="impl"><aclass="src rightside"href="https://doc.rust-lang.org/1.76.0/src/core/any.rs.html#140">source</a><ahref="#impl-Any-for-T"class="anchor">§</a><h3class="code-header">impl<T><aclass="
T: 'static + ?<aclass="trait"href="https://doc.rust-lang.org/1.76.0/core/marker/trait.Sized.html"title="trait core::marker::Sized">Sized</a>,</div></h3></section></summary><divclass="impl-items"><detailsclass="toggle method-toggle"open><summary><sectionid="method.type_id"class="method trait-impl"><aclass="src rightside"href="https://doc.rust-lang.org/1.76.0/src/core/any.rs.html#141">source</a><ahref="#method.type_id"class="anchor">§</a><h4class="code-header">fn <ahref="https://doc.rust-lang.org/1.76.0/core/any/trait.Any.html#tymethod.type_id"class="fn">type_id</a>(&self) -><aclass="struct"href="https://doc.rust-lang.org/1.76.0/core/any/struct.TypeId.html"title="struct core::any::TypeId">TypeId</a></h4></section></summary><divclass='docblock'>Gets the <code>TypeId</code> of <code>self</code>. <ahref="https://doc.rust-lang.org/1.76.0/core/any/trait.Any.html#tymethod.type_id">Read more</a></div></details></div></details><detailsclass="toggle implementors-toggle"><summary><sectionid="impl-Borrow%3CT%3E-for-T"class="impl"><aclass="src rightside"href="https://doc.rust-lang.org/1.76.0/src/core/borrow.rs.html#208">source</a><ahref="#impl-Borrow%3CT%3E-for-T"class="anchor">§</a><h3class="code-header">impl<T><aclass="trait"href="https://doc.rust-lang.org/1.76.0/core/borrow/trait.Borrow.html"title="trait core::borrow::Borrow">Borrow</a><T> for T<divclass="where">where
T: ?<aclass="trait"href="https://doc.rust-lang.org/1.76.0/core/marker/trait.Sized.html"title="trait core::marker::Sized">Sized</a>,</div></h3></section></summary><divclass="impl-items"><detailsclass="toggle method-toggle"open><summary><sectionid="method.borrow"class="method trait-impl"><aclass="src rightside"href="https://doc.rust-lang.org/1.76.0/src/core/borrow.rs.html#210">source</a><ahref="#method.borrow"class="anchor">§</a><h4class="code-header">fn <ahref="https://doc.rust-lang.org/1.76.0/core/borrow/trait.Borrow.html#tymethod.borrow"class="fn">borrow</a>(&self) -><aclass="primitive"href="https://doc.rust-lang.org/1.76.0/std/primitive.reference.html">&T</a></h4></section></summary><divclass='docblock'>Immutably borrows from an owned value. <ahref="https://doc.rust-lang.org/1.76.0/core/borrow/trait.Borrow.html#tymethod.borrow">Read more</a></div></details></div></details><detailsclass="toggle implementors-toggle"><summary><sectionid="impl-BorrowMut%3CT%3E-for-T"class="impl"><aclass="src rightside"href="https://doc.rust-lang.org/1.76.0/src/core/borrow.rs.html#216">source</a><ahref="#impl-BorrowMut%3CT%3E-for-T"class="anchor">§</a><h3class="code-header">impl<T><aclass="trait"href="https://doc.rust-lang.org/1.76.0/core/borrow/trait.BorrowMut.html"title="trait core::borrow::BorrowMut">BorrowMut</a><T> for T<divclass="where">where
T: ?<aclass="trait"href="https://doc.rust-lang.org/1.76.0/core/marker/trait.Sized.html"title="trait core::marker::Sized">Sized</a>,</div></h3></section></summary><divclass="impl-items"><detailsclass="toggle method-toggle"open><summary><sectionid="method.borrow_mut"class="method trait-impl"><aclass="src rightside"href="https://doc.rust-lang.org/1.76.0/src/core/borrow.rs.html#217">source</a><ahref="#method.borrow_mut"class="anchor">§</a><h4class="code-header">fn <ahref="https://doc.rust-lang.org/1.76.0/core/borrow/trait.BorrowMut.html#tymethod.borrow_mut"class="fn">borrow_mut</a>(&mut self) -><aclass="primitive"href="https://doc.rust-lang.org/1.76.0/std/primitive.reference.html">&mut T</a></h4></section></summary><divclass='docblock'>Mutably borrows from an owned value. <ahref="https://doc.rust-lang.org/1.76.0/core/borrow/trait.BorrowMut.html#tymethod.borrow_mut">Read more</a></div></details></div></details><detailsclass="toggle implementors-toggle"><summary><sectionid="impl-From%3CT%3E-for-T"class="impl"><aclass="src rightside"href="https://doc.rust-lang.org/1.76.0/src/core/convert/mod.rs.html#763">source</a><ahref="#impl-From%3CT%3E-for-T"class="anchor">§</a><h3class="code-header">impl<T><aclass="trait"href="https://doc.rust-lang.org/1.76.0/core/convert/trait.From.html"title="trait core::convert::From">From</a><T> for T</h3></section></summary><divclass="impl-items"><detailsclass="toggle method-toggle"open><summary><sectionid="method.from"class="method trait-impl"><aclass="src rightside"href="https://doc.rust-lang.org/1.76.0/src/core/convert/mod.rs.html#766">source</a><ahref="#method.from"class="anchor">§</a><h4class="code-header">fn <ahref="https://doc.rust-lang.org/1.76.0/core/convert/trait.From.html#tymethod.from"class="fn">from</a>(t: T) -> T</h4></section></summary><divclass="docblock"><p>Returns the argument unchanged.</p>
</div></details></div></details><detailsclass="toggle implementors-toggle"><summary><sectionid="impl-Into%3CU%3E-for-T"class="impl"><aclass="src rightside"href="https://doc.rust-lang.org/1.76.0/src/core/convert/mod.rs.html#747-749">source</a><ahref="#impl-Into%3CU%3E-for-T"class="anchor">§</a><h3class="code-header">impl<T, U><aclass="trait"href="https://doc.rust-lang.org/1.76.0/core/convert/trait.Into.html"title="trait core::convert::Into">Into</a><U> for T<divclass="where">where
<p>That is, this conversion is whatever the implementation of
<code><ahref="https://doc.rust-lang.org/1.76.0/core/convert/trait.From.html"title="trait core::convert::From">From</a><T> for U</code> chooses to do.</p>
</div></details></div></details><detailsclass="toggle implementors-toggle"><summary><sectionid="impl-ToOwned-for-T"class="impl"><aclass="src rightside"href="https://doc.rust-lang.org/1.76.0/src/alloc/borrow.rs.html#83-85">source</a><ahref="#impl-ToOwned-for-T"class="anchor">§</a><h3class="code-header">impl<T><aclass="trait"href="https://doc.rust-lang.org/1.76.0/alloc/borrow/trait.ToOwned.html"title="trait alloc::borrow::ToOwned">ToOwned</a> for T<divclass="where">where
T: <aclass="trait"href="https://doc.rust-lang.org/1.76.0/core/clone/trait.Clone.html"title="trait core::clone::Clone">Clone</a>,</div></h3></section></summary><divclass="impl-items"><detailsclass="toggle"open><summary><sectionid="associatedtype.Owned"class="associatedtype trait-impl"><ahref="#associatedtype.Owned"class="anchor">§</a><h4class="code-header">type <ahref="https://doc.rust-lang.org/1.76.0/alloc/borrow/trait.ToOwned.html#associatedtype.Owned"class="associatedtype">Owned</a> = T</h4></section></summary><divclass='docblock'>The resulting type after obtaining ownership.</div></details><detailsclass="toggle method-toggle"open><summary><sectionid="method.to_owned"class="method trait-impl"><aclass="src rightside"href="https://doc.rust-lang.org/1.76.0/src/alloc/borrow.rs.html#88">source</a><ahref="#method.to_owned"class="anchor">§</a><h4class="code-header">fn <ahref="https://doc.rust-lang.org/1.76.0/alloc/borrow/trait.ToOwned.html#tymethod.to_owned"class="fn">to_owned</a>(&self) -> T</h4></section></summary><divclass='docblock'>Creates owned data from borrowed data, usually by cloning. <ahref="https://doc.rust-lang.org/1.76.0/alloc/borrow/trait.ToOwned.html#tymethod.to_owned">Read more</a></div></details><detailsclass="toggle method-toggle"open><summary><sectionid="method.clone_into"class="method trait-impl"><aclass="src rightside"href="https://doc.rust-lang.org/1.76.0/src/alloc/borrow.rs.html#92">source</a><ahref="#method.clone_into"class="anchor">§</a><h4class="code-header">fn <ahref="https://doc.rust-lang.org/1.76.0/alloc/borrow/trait.ToOwned.html#method.clone_into"class="fn">clone_into</a>(&self, target: <aclass="primitive"href="https://doc.rust-lang.org/1.76.0/std/primitive.reference.html">&mut T</a>)</h4></section></summary><divclass='docblock'>Uses borrowed data to replace owned data, usually by cloning. <ahref="https://doc.rust-lang.org/1.76.0/alloc/borrow/trait.ToOwned.html#method.clone_into">Read more</a></div></details></div></details><detailsclass="toggle implementors-toggle"><summary><sectionid="impl-ToString-for-T"class="impl"><aclass="src rightside"href="https://doc.rust-lang.org/1.76.0/src/alloc/string.rs.html#2600">source</a><ahref="#impl-ToString-for-T"class="anchor">§</a><h3class="code-header">impl<T><aclass="trait"href="https://doc.rust-lang.org/1.76.0/alloc/string/trait.ToString.html"title="trait alloc::string::ToString">ToString</a> for T<divclass="where">where
T: <aclass="trait"href="https://doc.rust-lang.org/1.76.0/core/fmt/trait.Display.html"title="trait core::fmt::Display">Display</a> + ?<aclass="trait"href="https://doc.rust-lang.org/1.76.0/core/marker/trait.Sized.html"title="trait core::marker::Sized">Sized</a>,</div></h3></section></summary><divclass="impl-items"><detailsclass="toggle method-toggle"open><summary><sectionid="method.to_string"class="method trait-impl"><aclass="src rightside"href="https://doc.rust-lang.org/1.76.0/src/alloc/string.rs.html#2606">source</a><ahref="#method.to_string"class="anchor">§</a><h4class="code-header">default fn <ahref="https://doc.rust-lang.org/1.76.0/alloc/string/trait.ToString.html#tymethod.to_string"class="fn">to_string</a>(&self) -><aclass="struct"href="https://doc.rust-lang.org/1.76.0/alloc/string/struct.String.html"title="struct alloc::string::String">String</a></h4></section></summary><divclass='docblock'>Converts the given value to a <code>String</code>. <ahref="https://doc.rust-lang.org/1.76.0/alloc/string/trait.ToString.html#tymethod.to_string">Read more</a></div></details></div></details><detailsclass="toggle implementors-toggle"><summary><sectionid="impl-TryFrom%3CU%3E-for-T"class="impl"><aclass="src rightside"href="https://doc.rust-lang.org/1.76.0/src/core/convert/mod.rs.html#803-805">source</a><ahref="#impl-TryFrom%3CU%3E-for-T"class="anchor">§</a><h3class="code-header">impl<T, U><aclass="trait"href="https://doc.rust-lang.org/1.76.0/core/convert/trait.TryFrom.html"title="trait core::convert::TryFrom">TryFrom</a><U> for T<divclass="where">where
U: <aclass="trait"href="https://doc.rust-lang.org/1.76.0/core/convert/trait.Into.html"title="trait core::convert::Into">Into</a><T>,</div></h3></section></summary><divclass="impl-items"><detailsclass="toggle"open><summary><sectionid="associatedtype.Error"class="associatedtype trait-impl"><ahref="#associatedtype.Error"class="anchor">§</a><h4class="code-header">type <ahref="https://doc.rust-lang.org/1.76.0/core/convert/trait.TryFrom.html#associatedtype.Error"class="associatedtype">Error</a> = <aclass="enum"href="https://doc.rust-lang.org/1.76.0/core/convert/enum.Infallible.html"title="enum core::convert::Infallible">Infallible</a></h4></section></summary><divclass='docblock'>The type returned in the event of a conversion error.</div></details><detailsclass="toggle method-toggle"open><summary><sectionid="method.try_from"class="method trait-impl"><aclass="src rightside"href="https://doc.rust-lang.org/1.76.0/src/core/convert/mod.rs.html#810">source</a><ahref="#method.try_from"class="anchor">§</a><h4class="code-header">fn <ahref="https://doc.rust-lang.org/1.76.0/core/convert/trait.TryFrom.html#tymethod.try_from"class="fn">try_from</a>(value: U) -><aclass="enum"href="https://doc.rust-lang.org/1.76.0/core/result/enum.Result.html"title="enum core::result::Result">Result</a><T, <T as <aclass="trait"href="https://doc.rust-lang.org/1.76.0/core/convert/trait.TryFrom.html"title="trait core::convert::TryFrom">TryFrom</a><U>>::<aclass="associatedtype"href="https://doc.rust-lang.org/1.76.0/core/convert/trait.TryFrom.html#associatedtype.Error"title="type core::convert::TryFrom::Error">Error</a>></h4></section></summary><divclass='docblock'>Performs the conversion.</div></details></div></details><detailsclass="toggle implementors-toggle"><summary><sectionid="impl-TryInto%3CU%3E-for-T"class="impl"><aclass="src rightside"href="https://doc.rust-lang.org/1.76.0/src/core/convert/mod.rs.html#788-790">source</a><ahref="#impl-TryInto%3CU%3E-for-T"class="anchor">§</a><h3class="code-header">impl<T, U><aclass="trait"href="https://doc.rust-lang.org/1.76.0/core/convert/trait.TryInto.html"title="trait core::convert::TryInto">TryInto</a><U> for T<divclass="where">where
U: <aclass="trait"href="https://doc.rust-lang.org/1.76.0/core/convert/trait.TryFrom.html"title="trait core::convert::TryFrom">TryFrom</a><T>,</div></h3></section></summary><divclass="impl-items"><detailsclass="toggle"open><summary><sectionid="associatedtype.Error-1"class="associatedtype trait-impl"><ahref="#associatedtype.Error-1"class="anchor">§</a><h4class="code-header">type <ahref="https://doc.rust-lang.org/1.76.0/core/convert/trait.TryInto.html#associatedtype.Error"class="associatedtype">Error</a> = <U as <aclass="trait"href="https://doc.rust-lang.org/1.76.0/core/convert/trait.TryFrom.html"title="trait core::convert::TryFrom">TryFrom</a><T>>::<aclass="associatedtype"href="https://doc.rust-lang.org/1.76.0/core/convert/trait.TryFrom.html#associatedtype.Error"title="type core::convert::TryFrom::Error">Error</a></h4></section></summary><divclass='docblock'>The type returned in the event of a conversion error.</div></details><detailsclass="toggle method-toggle"open><summary><sectionid="method.try_into"class="method trait-impl"><aclass="src rightside"href="https://doc.rust-lang.org/1.76.0/src/core/convert/mod.rs.html#795">source</a><ahref="#method.try_into"class="anchor">§</a><h4class="code-header">fn <ahref="https://doc.rust-lang.org/1.76.0/core/convert/trait.TryInto.html#tymethod.try_into"class="fn">try_into</a>(self) -><aclass="enum"href="https://doc.rust-lang.org/1.76.0/core/result/enum.Result.html"title="enum core::result::Result">Result</a><U, <U as <aclass="trait"href="https://doc.rust-lang.org/1.76.0/core/convert/trait.TryFrom.html"title="trait core::convert::TryFrom">TryFrom</a><T>>::<aclass="associatedtype"href="https://doc.rust-lang.org/1.76.0/core/convert/trait.TryFrom.html#associatedtype.Error"title="type core::convert::TryFrom::Error">Error</a>></h4></section></summary><divclass='docblock'>Performs the conversion.</div></details></div></details></div></section></div></main></body></html>