edlang/logos/trait.Logos.html
2024-02-13 06:38:44 +00:00

36 lines
14 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

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

<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Trait implemented for an enum representing all tokens. You should never have to implement it manually, use the `#[derive(Logos)]` attribute on your enum."><title>Logos in logos - Rust</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../static.files/FiraSans-Regular-018c141bf0843ffd.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../static.files/FiraSans-Medium-8f9a781e4970d388.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../static.files/SourceCodePro-Regular-562dcc5011b6de7d.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../static.files/SourceCodePro-Semibold-d899c5a5c4aeb14a.ttf.woff2"><link rel="stylesheet" href="../static.files/normalize-76eba96aa4d2e634.css"><link rel="stylesheet" href="../static.files/rustdoc-ac92e1bbe349e143.css"><meta name="rustdoc-vars" data-root-path="../" data-static-root-path="../static.files/" data-current-crate="logos" data-themes="" data-resource-suffix="" data-rustdoc-version="1.76.0 (07dca489a 2024-02-04)" data-channel="1.76.0" data-search-js="search-2b6ce74ff89ae146.js" data-settings-js="settings-4313503d2e1961c2.js" ><script src="../static.files/storage-f2adc0d6ca4d09fb.js"></script><script defer src="sidebar-items.js"></script><script defer src="../static.files/main-305769736d49e732.js"></script><noscript><link rel="stylesheet" href="../static.files/noscript-feafe1bb7466e4bd.css"></noscript><link rel="alternate icon" type="image/png" href="../static.files/favicon-16x16-8b506e7a72182f1c.png"><link rel="alternate icon" type="image/png" href="../static.files/favicon-32x32-422f7d1d52889060.png"><link rel="icon" type="image/svg+xml" href="../static.files/favicon-2c020d218678b618.svg"></head><body class="rustdoc trait"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><nav class="mobile-topbar"><button class="sidebar-menu-toggle">&#9776;</button><a class="logo-container" href="../logos/index.html"><img src="https://maciej.codes/kosz/logos.png" alt=""></a></nav><nav class="sidebar"><div class="sidebar-crate"><a class="logo-container" href="../logos/index.html"><img src="https://maciej.codes/kosz/logos.png" alt="logo"></a><h2><a href="../logos/index.html">logos</a><span class="version">0.14.0</span></h2></div><h2 class="location"><a href="#">Logos</a></h2><div class="sidebar-elems"><section><h3><a href="#required-associated-types">Required Associated Types</a></h3><ul class="block"><li><a href="#associatedtype.Error">Error</a></li><li><a href="#associatedtype.Extras">Extras</a></li><li><a href="#associatedtype.Source">Source</a></li></ul><h3><a href="#required-methods">Required Methods</a></h3><ul class="block"><li><a href="#tymethod.lex">lex</a></li></ul><h3><a href="#provided-methods">Provided Methods</a></h3><ul class="block"><li><a href="#method.lexer">lexer</a></li><li><a href="#method.lexer_with_extras">lexer_with_extras</a></li></ul><h3><a href="#object-safety">Object Safety</a></h3><h3><a href="#implementors">Implementors</a></h3></section><h2><a href="index.html">In crate logos</a></h2></div></nav><div class="sidebar-resizer"></div>
<main><div class="width-limiter"><nav class="sub"><form class="search-form"><span></span><div id="sidebar-button" tabindex="-1"><a href="../logos/all.html" title="show sidebar"></a></div><input class="search-input" name="search" aria-label="Run search in the documentation" autocomplete="off" spellcheck="false" placeholder="Click or press S to search, ? for more options…" type="search"><div id="help-button" tabindex="-1"><a href="../help.html" title="help">?</a></div><div id="settings-menu" tabindex="-1"><a href="../settings.html" title="settings"><img width="22" height="22" alt="Change settings" src="../static.files/wheel-7b819b6101059cd0.svg"></a></div></form></nav><section id="main-content" class="content"><div class="main-heading"><h1>Trait <a href="index.html">logos</a>::<wbr><a class="trait" href="#">Logos</a><button id="copy-path" title="Copy item path to clipboard"><img src="../static.files/clipboard-7571035ce49a181d.svg" width="19" height="18" alt="Copy item path"></button></h1><span class="out-of-band"><a class="src" href="../src/logos/lib.rs.html#44-79">source</a> · <button id="toggle-all-docs" title="collapse all docs">[<span>&#x2212;</span>]</button></span></div><pre class="rust item-decl"><code>pub trait Logos&lt;'source&gt;: <a class="trait" href="https://doc.rust-lang.org/1.76.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a> {
type <a href="#associatedtype.Extras" class="associatedtype">Extras</a>;
type <a href="#associatedtype.Source" class="associatedtype">Source</a>: <a class="trait" href="source/trait.Source.html" title="trait logos::source::Source">Source</a> + ?<a class="trait" href="https://doc.rust-lang.org/1.76.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a> + 'source;
type <a href="#associatedtype.Error" class="associatedtype">Error</a>: <a class="trait" href="https://doc.rust-lang.org/1.76.0/core/default/trait.Default.html" title="trait core::default::Default">Default</a> + <a class="trait" href="https://doc.rust-lang.org/1.76.0/core/clone/trait.Clone.html" title="trait core::clone::Clone">Clone</a> + <a class="trait" href="https://doc.rust-lang.org/1.76.0/core/cmp/trait.PartialEq.html" title="trait core::cmp::PartialEq">PartialEq</a> + <a class="trait" href="https://doc.rust-lang.org/1.76.0/core/fmt/trait.Debug.html" title="trait core::fmt::Debug">Debug</a> + 'source;
// Required method
fn <a href="#tymethod.lex" class="fn">lex</a>(lexer: &amp;mut <a class="struct" href="struct.Lexer.html" title="struct logos::Lexer">Lexer</a>&lt;'source, Self&gt;);
// Provided methods
fn <a href="#method.lexer" class="fn">lexer</a>(source: &amp;'source Self::<a class="associatedtype" href="trait.Logos.html#associatedtype.Source" title="type logos::Logos::Source">Source</a>) -&gt; <a class="struct" href="struct.Lexer.html" title="struct logos::Lexer">Lexer</a>&lt;'source, Self&gt; <a href="#" class="tooltip" data-notable-ty="Lexer&lt;&#39;source, Self&gt;"></a>
<span class="where">where Self::<a class="associatedtype" href="trait.Logos.html#associatedtype.Extras" title="type logos::Logos::Extras">Extras</a>: <a class="trait" href="https://doc.rust-lang.org/1.76.0/core/default/trait.Default.html" title="trait core::default::Default">Default</a></span> { ... }
<span class="item-spacer"></span> fn <a href="#method.lexer_with_extras" class="fn">lexer_with_extras</a>(
source: &amp;'source Self::<a class="associatedtype" href="trait.Logos.html#associatedtype.Source" title="type logos::Logos::Source">Source</a>,
extras: Self::<a class="associatedtype" href="trait.Logos.html#associatedtype.Extras" title="type logos::Logos::Extras">Extras</a>
) -&gt; <a class="struct" href="struct.Lexer.html" title="struct logos::Lexer">Lexer</a>&lt;'source, Self&gt; <a href="#" class="tooltip" data-notable-ty="Lexer&lt;&#39;source, Self&gt;"></a> { ... }
}</code></pre><details class="toggle top-doc" open><summary class="hideme"><span>Expand description</span></summary><div class="docblock"><p>Trait implemented for an enum representing all tokens. You should never have
to implement it manually, use the <code>#[derive(Logos)]</code> attribute on your enum.</p>
</div></details><h2 id="required-associated-types" class="section-header">Required Associated Types<a href="#required-associated-types" class="anchor">§</a></h2><div class="methods"><details class="toggle" open><summary><section id="associatedtype.Extras" class="method"><a class="src rightside" href="../src/logos/lib.rs.html#47">source</a><h4 class="code-header">type <a href="#associatedtype.Extras" class="associatedtype">Extras</a></h4></section></summary><div class="docblock"><p>Associated type <code>Extras</code> for the particular lexer. This can be set using
<code>#[logos(extras = MyExtras)]</code> and accessed inside callbacks.</p>
</div></details><details class="toggle" open><summary><section id="associatedtype.Source" class="method"><a class="src rightside" href="../src/logos/lib.rs.html#52">source</a><h4 class="code-header">type <a href="#associatedtype.Source" class="associatedtype">Source</a>: <a class="trait" href="source/trait.Source.html" title="trait logos::source::Source">Source</a> + ?<a class="trait" href="https://doc.rust-lang.org/1.76.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a> + 'source</h4></section></summary><div class="docblock"><p>Source type this token can be lexed from. This will default to <code>str</code>,
unless one of the defined patterns explicitly uses non-unicode byte values
or byte slices, in which case that implementation will use <code>[u8]</code>.</p>
</div></details><details class="toggle" open><summary><section id="associatedtype.Error" class="method"><a class="src rightside" href="../src/logos/lib.rs.html#56">source</a><h4 class="code-header">type <a href="#associatedtype.Error" class="associatedtype">Error</a>: <a class="trait" href="https://doc.rust-lang.org/1.76.0/core/default/trait.Default.html" title="trait core::default::Default">Default</a> + <a class="trait" href="https://doc.rust-lang.org/1.76.0/core/clone/trait.Clone.html" title="trait core::clone::Clone">Clone</a> + <a class="trait" href="https://doc.rust-lang.org/1.76.0/core/cmp/trait.PartialEq.html" title="trait core::cmp::PartialEq">PartialEq</a> + <a class="trait" href="https://doc.rust-lang.org/1.76.0/core/fmt/trait.Debug.html" title="trait core::fmt::Debug">Debug</a> + 'source</h4></section></summary><div class="docblock"><p>Error type returned by the lexer. This can be set using
<code>#[logos(error = MyError)]</code>. Defaults to <code>()</code> if not set.</p>
</div></details></div><h2 id="required-methods" class="section-header">Required Methods<a href="#required-methods" class="anchor">§</a></h2><div class="methods"><details class="toggle method-toggle" open><summary><section id="tymethod.lex" class="method"><a class="src rightside" href="../src/logos/lib.rs.html#60">source</a><h4 class="code-header">fn <a href="#tymethod.lex" class="fn">lex</a>(lexer: &amp;mut <a class="struct" href="struct.Lexer.html" title="struct logos::Lexer">Lexer</a>&lt;'source, Self&gt;)</h4></section></summary><div class="docblock"><p>The heart of Logos. Called by the <code>Lexer</code>. The implementation for this function
is generated by the <code>logos-derive</code> crate.</p>
</div></details></div><h2 id="provided-methods" class="section-header">Provided Methods<a href="#provided-methods" class="anchor">§</a></h2><div class="methods"><details class="toggle method-toggle" open><summary><section id="method.lexer" class="method"><a class="src rightside" href="../src/logos/lib.rs.html#64-69">source</a><h4 class="code-header">fn <a href="#method.lexer" class="fn">lexer</a>(source: &amp;'source Self::<a class="associatedtype" href="trait.Logos.html#associatedtype.Source" title="type logos::Logos::Source">Source</a>) -&gt; <a class="struct" href="struct.Lexer.html" title="struct logos::Lexer">Lexer</a>&lt;'source, Self&gt; <a href="#" class="tooltip" data-notable-ty="Lexer&lt;&#39;source, Self&gt;"></a><div class="where">where
Self::<a class="associatedtype" href="trait.Logos.html#associatedtype.Extras" title="type logos::Logos::Extras">Extras</a>: <a class="trait" href="https://doc.rust-lang.org/1.76.0/core/default/trait.Default.html" title="trait core::default::Default">Default</a>,</div></h4></section></summary><div class="docblock"><p>Create a new instance of a <code>Lexer</code> that will produce tokens implementing
this <code>Logos</code>.</p>
</div></details><details class="toggle method-toggle" open><summary><section id="method.lexer_with_extras" class="method"><a class="src rightside" href="../src/logos/lib.rs.html#73-78">source</a><h4 class="code-header">fn <a href="#method.lexer_with_extras" class="fn">lexer_with_extras</a>(
source: &amp;'source Self::<a class="associatedtype" href="trait.Logos.html#associatedtype.Source" title="type logos::Logos::Source">Source</a>,
extras: Self::<a class="associatedtype" href="trait.Logos.html#associatedtype.Extras" title="type logos::Logos::Extras">Extras</a>
) -&gt; <a class="struct" href="struct.Lexer.html" title="struct logos::Lexer">Lexer</a>&lt;'source, Self&gt; <a href="#" class="tooltip" data-notable-ty="Lexer&lt;&#39;source, Self&gt;"></a></h4></section></summary><div class="docblock"><p>Create a new instance of a <code>Lexer</code> with the provided <code>Extras</code> that will
produce tokens implementing this <code>Logos</code>.</p>
</div></details></div><h2 id="object-safety" class="section-header">Object Safety<a href="#object-safety" class="anchor">§</a></h2><div class="object-safety-info">This trait is <b>not</b> <a href="https://doc.rust-lang.org/1.76.0/reference/items/traits.html#object-safety">object safe</a>.</div><h2 id="implementors" class="section-header">Implementors<a href="#implementors" class="anchor">§</a></h2><div id="implementors-list"></div><script src="../trait.impl/logos/trait.Logos.js" async></script><script type="text/json" id="notable-traits-data">{"Lexer<'source, Self>":"<h3>Notable traits for <code><a class=\"struct\" href=\"struct.Lexer.html\" title=\"struct logos::Lexer\">Lexer</a>&lt;'source, Token&gt;</code></h3><pre><code><div class=\"where\">impl&lt;'source, Token&gt; <a class=\"trait\" href=\"https://doc.rust-lang.org/1.76.0/core/iter/traits/iterator/trait.Iterator.html\" title=\"trait core::iter::traits::iterator::Iterator\">Iterator</a> for <a class=\"struct\" href=\"struct.Lexer.html\" title=\"struct logos::Lexer\">Lexer</a>&lt;'source, Token&gt;<div class=\"where\">where\n Token: <a class=\"trait\" href=\"trait.Logos.html\" title=\"trait logos::Logos\">Logos</a>&lt;'source&gt;,</div></div><div class=\"where\"> type <a href=\"https://doc.rust-lang.org/1.76.0/core/iter/traits/iterator/trait.Iterator.html#associatedtype.Item\" class=\"associatedtype\">Item</a> = <a class=\"enum\" href=\"https://doc.rust-lang.org/1.76.0/core/result/enum.Result.html\" title=\"enum core::result::Result\">Result</a>&lt;Token, Token::<a class=\"associatedtype\" href=\"trait.Logos.html#associatedtype.Error\" title=\"type logos::Logos::Error\">Error</a>&gt;;</div>"}</script></section></div></main></body></html>