Files
GopherGate/target/doc/zerocopy/derive.Unaligned.html
2026-02-26 12:00:21 -05:00

54 lines
5.4 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="Analyzes whether a type is [`Unaligned`]."><title>Unaligned in zerocopy - Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-6b053e98.ttf.woff2,FiraSans-Italic-81dc35de.woff2,FiraSans-Regular-0fe48ade.woff2,FiraSans-MediumItalic-ccf7e434.woff2,FiraSans-Medium-e1aa3f0a.woff2,SourceCodePro-Regular-8badfe75.ttf.woff2,SourceCodePro-Semibold-aa29a496.ttf.woff2".split(",").map(f=>`<link rel="preload" as="font" type="font/woff2"href="../static.files/${f}">`).join(""))</script><link rel="stylesheet" href="../static.files/normalize-9960930a.css"><link rel="stylesheet" href="../static.files/rustdoc-ca0dd0c4.css"><meta name="rustdoc-vars" data-root-path="../" data-static-root-path="../static.files/" data-current-crate="zerocopy" data-themes="" data-resource-suffix="" data-rustdoc-version="1.93.1 (01f6ddf75 2026-02-11) (Arch Linux rust 1:1.93.1-1)" data-channel="1.93.1" data-search-js="search-9e2438ea.js" data-stringdex-js="stringdex-a3946164.js" data-settings-js="settings-c38705f0.js" ><script src="../static.files/storage-e2aeef58.js"></script><script defer src="sidebar-items.js"></script><script defer src="../static.files/main-a410ff4d.js"></script><noscript><link rel="stylesheet" href="../static.files/noscript-263c88ec.css"></noscript><link rel="alternate icon" type="image/png" href="../static.files/favicon-32x32-eab170b8.png"><link rel="icon" type="image/svg+xml" href="../static.files/favicon-044be391.svg"></head><body class="rustdoc derive"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><rustdoc-topbar><h2><a href="#">Unaligned</a></h2></rustdoc-topbar><nav class="sidebar"><div class="sidebar-crate"><h2><a href="../zerocopy/index.html">zerocopy</a><span class="version">0.8.39</span></h2></div><div class="sidebar-elems"><section id="rustdoc-toc"><h2 class="location"><a href="#">Unaligned</a></h2><h3><a href="#">Sections</a></h3><ul class="block top-toc"><li><a href="#analysis" title="Analysis">Analysis</a></li></ul></section><div id="rustdoc-modnav"><h2 class="in-crate"><a href="index.html">In crate zerocopy</a></h2></div></div></nav><div class="sidebar-resizer" title="Drag to resize sidebar"></div><main><div class="width-limiter"><section id="main-content" class="content"><div class="main-heading"><div class="rustdoc-breadcrumbs"><a href="index.html">zerocopy</a></div><h1>Derive Macro <span class="derive">Unaligned</span>&nbsp;<button id="copy-path" title="Copy item path to clipboard">Copy item path</button></h1><rustdoc-toolbar></rustdoc-toolbar><span class="sub-heading"><a class="src" href="../src/zerocopy_derive/lib.rs.html#82">Source</a> </span></div><pre class="rust item-decl"><code>#[derive(Unaligned)]
{
<span class="comment">// Attributes available to this derive:</span>
#[zerocopy]
}
</code></pre><details class="toggle top-doc" open><summary class="hideme"><span>Expand description</span></summary><div class="docblock"><p>Analyzes whether a type is <a href="trait.Unaligned.html" title="trait zerocopy::Unaligned"><code>Unaligned</code></a>.</p>
<p>This derive analyzes, at compile time, whether the annotated type satisfies
the <a href="trait.Unaligned.html#safety" title="trait zerocopy::Unaligned">safety conditions</a> of <code>Unaligned</code> and implements <code>Unaligned</code> if it is
sound to do so. This derive can be applied to structs, enums, and unions;
e.g.:</p>
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="attr">#[derive(Unaligned)]
#[repr(C)]
</span><span class="kw">struct </span>MyStruct {
...
}
<span class="attr">#[derive(Unaligned)]
#[repr(u8)]
</span><span class="kw">enum </span>MyEnum {
...
}
<span class="attr">#[derive(Unaligned)]
#[repr(packed)]
</span><span class="kw">union </span>MyUnion {
...
}</code></pre></div><h2 id="analysis"><a class="doc-anchor" href="#analysis">§</a>Analysis</h2>
<p><em>This section describes, roughly, the analysis performed by this derive to
determine whether it is sound to implement <code>Unaligned</code> for a given type.
Unless you are modifying the implementation of this derive, or attempting to
manually implement <code>Unaligned</code> for a type yourself, you dont need to read
this section.</em></p>
<p>If a type has the following properties, then this derive can implement
<code>Unaligned</code> for that type:</p>
<ul>
<li>If the type is a struct or union:
<ul>
<li>If <code>repr(align(N))</code> is provided, <code>N</code> must equal 1.</li>
<li>If the type is <code>repr(C)</code> or <code>repr(transparent)</code>, all fields must be
<a href="trait.Unaligned.html" title="trait zerocopy::Unaligned"><code>Unaligned</code></a>.</li>
<li>If the type is not <code>repr(C)</code> or <code>repr(transparent)</code>, it must be
<code>repr(packed)</code> or <code>repr(packed(1))</code>.</li>
</ul>
</li>
<li>If the type is an enum:
<ul>
<li>If <code>repr(align(N))</code> is provided, <code>N</code> must equal 1.</li>
<li>It must be a field-less enum (meaning that all variants have no fields).</li>
<li>It must be <code>repr(i8)</code> or <code>repr(u8)</code>.</li>
</ul>
</li>
</ul>
</div></details></section></div></main></body></html>