arcis 0.13.2

A standard library of types and functions for writing MPC circuits with the Arcis framework.
Documentation
/* Hide rustdoc's "Blanket Implementations" and "Auto Trait Implementations"
 * sections on every arcis type page.
 *
 * Rationale: arcis types live inside `#[encrypted]` code where the interpreter
 * intercepts methods. The std blanket impls (Any, Borrow, From, Into, …) and
 * the auto-trait impls (Send, Sync, Unpin, …) are not actually usable in that
 * context, so they only add noise. */

/* Main content sections. */
h2#blanket-implementations,
#blanket-implementations-list,
h2#synthetic-implementations,
#synthetic-implementations-list {
    display: none !important;
}

/* Sidebar entries (header + list). The :has() selector keeps the empty <h3>
 * from being left behind when the inner anchor is the only child. */
.sidebar h3:has(a[href="#blanket-implementations"]),
.sidebar h3:has(a[href="#synthetic-implementations"]),
.sidebar ul.block.blanket-implementation,
.sidebar ul.block.synthetic-implementation {
    display: none !important;
}

/* Body + sidebar dedup. For every trait we mirror in arcis::std::*, hide the
 * impl whose id has no `-1` suffix (the derived/std one). The `-1`-suffixed
 * impl is our doc-only mirror; it stays visible.
 *
 * The `-1` convention is consistent across types ONLY because `arcis/std/mod.rs`
 * declares stub modules before mirror modules — see the comment there. Without
 * that ordering rustdoc would invert the suffix for stubs whose file sorts
 * after the mirror files.
 *
 * Per trait we need two body selectors:
 * - `section.impl[id^=…]:not([id$="-1"])` hides the bare `<section>` rustdoc
 *   uses for marker traits (no methods, e.g. Copy, Eq).
 * - `.implementors-toggle:has(> summary > section.impl[id^=…]:not([id$="-1"]))`
 *   hides the `<details>` wrapper rustdoc uses for traits with methods
 *   (e.g. Clone, Debug). The bare-section selector alone would only hide the
 *   header inside the <summary>, leaving the methods table below visible.
 *
 * Forward-compatible: if we later add methods to a mirror trait, its impl
 * gains a <details> wrapper but the `-1` discriminator still keeps it visible
 * — only the derived non-suffixed sibling gets hidden.
 *
 * `StructuralPartialEq` is rustc-injected with no mirror, so its selectors
 * have no `:not([id$="-1"])` filter — hide outright. */

#trait-implementations-list section.impl[id^="impl-Debug-for-"]:not([id$="-1"]),
#trait-implementations-list .implementors-toggle:has(> summary > section.impl[id^="impl-Debug-for-"]:not([id$="-1"])),
#trait-implementations-list section.impl[id^="impl-Clone-for-"]:not([id$="-1"]),
#trait-implementations-list .implementors-toggle:has(> summary > section.impl[id^="impl-Clone-for-"]:not([id$="-1"])),
#trait-implementations-list section.impl[id^="impl-Copy-for-"]:not([id$="-1"]),
#trait-implementations-list .implementors-toggle:has(> summary > section.impl[id^="impl-Copy-for-"]:not([id$="-1"])),
#trait-implementations-list section.impl[id^="impl-PartialEq-for-"]:not([id$="-1"]),
#trait-implementations-list .implementors-toggle:has(> summary > section.impl[id^="impl-PartialEq-for-"]:not([id$="-1"])),
#trait-implementations-list section.impl[id^="impl-Eq-for-"]:not([id$="-1"]),
#trait-implementations-list .implementors-toggle:has(> summary > section.impl[id^="impl-Eq-for-"]:not([id$="-1"])),
#trait-implementations-list section.impl[id^="impl-PartialOrd-for-"]:not([id$="-1"]),
#trait-implementations-list .implementors-toggle:has(> summary > section.impl[id^="impl-PartialOrd-for-"]:not([id$="-1"])),
#trait-implementations-list section.impl[id^="impl-Ord-for-"]:not([id$="-1"]),
#trait-implementations-list .implementors-toggle:has(> summary > section.impl[id^="impl-Ord-for-"]:not([id$="-1"])),
#trait-implementations-list section.impl[id^="impl-Hash-for-"]:not([id$="-1"]),
#trait-implementations-list .implementors-toggle:has(> summary > section.impl[id^="impl-Hash-for-"]:not([id$="-1"])),
#trait-implementations-list section.impl[id^="impl-Default-for-"]:not([id$="-1"]),
#trait-implementations-list .implementors-toggle:has(> summary > section.impl[id^="impl-Default-for-"]:not([id$="-1"])),
#trait-implementations-list section.impl[id^="impl-StructuralPartialEq-for-"],
#trait-implementations-list .implementors-toggle:has(> summary > section.impl[id^="impl-StructuralPartialEq-for-"]) {
    display: none;
}

/* Sidebar uses the same `-1` discriminator on the href (sidebar links carry
 * no titles, so we can't use the body's title-based filter here). */
.sidebar li:has(> a[href^="#impl-Debug-for-"]:not([href$="-1"])),
.sidebar li:has(> a[href^="#impl-Clone-for-"]:not([href$="-1"])),
.sidebar li:has(> a[href^="#impl-Copy-for-"]:not([href$="-1"])),
.sidebar li:has(> a[href^="#impl-PartialEq-for-"]:not([href$="-1"])),
.sidebar li:has(> a[href^="#impl-Eq-for-"]:not([href$="-1"])),
.sidebar li:has(> a[href^="#impl-PartialOrd-for-"]:not([href$="-1"])),
.sidebar li:has(> a[href^="#impl-Ord-for-"]:not([href$="-1"])),
.sidebar li:has(> a[href^="#impl-Hash-for-"]:not([href$="-1"])),
.sidebar li:has(> a[href^="#impl-Default-for-"]:not([href$="-1"])),
.sidebar li:has(> a[href^="#impl-StructuralPartialEq-for-"]) {
    display: none !important;
}