<!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="`Schema` is one of the foundational concepts of the server. It provides a set of rules to enforce that `Entries` ava’s must be compliant to, to be considered valid for commit to the database. This allows us to provide requirements and structure as to what an `Entry` must have and may contain which enables many other parts to function."><metaname="keywords"content="rust, rustlang, rust-lang, schema"><title>kanidmd_lib::schema - Rust</title><linkrel="preload"as="font"type="font/woff2"crossoriginhref="../../SourceSerif4-Regular.ttf.woff2"><linkrel="preload"as="font"type="font/woff2"crossoriginhref="../../FiraSans-Regular.woff2"><linkrel="preload"as="font"type="font/woff2"crossoriginhref="../../FiraSans-Medium.woff2"><linkrel="preload"as="font"type="font/woff2"crossoriginhref="../../SourceCodePro-Regular.ttf.woff2"><linkrel="preload"as="font"type="font/woff2"crossoriginhref="../../SourceSerif4-Bold.ttf.woff2"><linkrel="preload"as="font"type="font/woff2"crossoriginhref="../../SourceCodePro-Semibold.ttf.woff2"><linkrel="stylesheet"type="text/css"href="../../normalize.css"><linkrel="stylesheet"type="text/css"href="../../rustdoc.css"id="mainThemeStyle"><linkrel="stylesheet"type="text/css"href="../../ayu.css"disabled><linkrel="stylesheet"type="text/css"href="../../dark.css"disabled><linkrel="stylesheet"type="text/css"href="../../light.css"id="themeStyle"><scriptid="default-settings"></script><scriptsrc="../../storage.js"></script><scriptdefersrc="../../main.js"></script><noscript><linkrel="stylesheet"href="../../noscript.css"></noscript><linkrel="alternate icon"type="image/png"href="../../favicon-16x16.png"><linkrel="alternate icon"type="image/png"href="../../favicon-32x32.png"><linkrel="icon"type="image/svg+xml"href="../../favicon.svg"></head><bodyclass="rustdoc mod"><!--[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><aclass="sidebar-logo"href="../../kanidmd_lib/index.html"><divclass="logo-container"><imgclass="rust-logo"src="../../rust-logo.svg"alt="logo"></div></a><h2class="location"></h2></nav><navclass="sidebar"><aclass="sidebar-logo"href="../../kanidmd_lib/index.html"><divclass="logo-container"><imgclass="rust-logo"src="../../rust-logo.svg"alt="logo"></div></a><h2class="location"><ahref="#">Module schema</a></h2><divclass="sidebar-elems"><section><divclass="block"><ul><li><ahref="#structs">Structs</a></li><li><ahref="#traits">Traits</a></li></ul></div></section></div></nav><main><divclass="width-limiter"><divclass="sub-container"><aclass="sub-logo-container"href="../../kanidmd_lib/index.html"><imgclass="rust-logo"src="../../rust-logo.svg"alt="logo"></a><navclass="sub"><formclass="search-form"><divclass="search-container"><span></span><inputclass="search-input"name="search"autocomplete="off"spellcheck="false"placeholder="Click or press ‘S’ to search, ‘?’ for more options…"type="search"><divid="help-button"title="help"tabindex="-1"><buttontype="button">?</button></div><divid="settings-menu"tabindex="-1"><ahref="../../settings.html"title="settings"><imgwidth="22"height="22"alt="Change settings"src="../../wheel.svg"></a></div></div></form></nav></div><sectionid="main-content"class="content"><divclass="main-heading"><h1class="fqn"><spanclass="in-band">Module <ahref="../index.html">kanidmd_lib</a>::<wbr><aclass="mod"href="#">schema</a><buttonid="copy-path"onclick="copy_path(this)"title="Copy item path to clipboard"><imgsrc="../../clipboard.svg"width="19"height="18"alt="Copy item path"></button></span></h1><spanclass="out-of-band"><aclass="srclink"href="../../src/kanidmd_lib/schema.rs.html#1-2494">source</a> · <aid="toggle-all-
set of rules to enforce that <ahref="../entry/index.html"><code>Entries</code></a> ava’s must be compliant to, to be
considered valid for commit to the database. This allows us to provide
requirements and structure as to what an <ahref="../entry/index.html"><code>Entry</code></a> must have and may contain
which enables many other parts to function.</p>
<p>To define this structure we define <ahref="struct.SchemaAttribute.html"><code>Attributes</code></a> that provide rules for how
and ava should be structured. We also define <ahref="struct.SchemaClass.html"><code>Classes</code></a> that define
the rules of which <ahref="struct.SchemaAttribute.html"><code>Attributes</code></a> may or must exist on an <ahref="../entry/index.html"><code>Entry</code></a> for it
to be considered valid. An <ahref="../entry/index.html"><code>Entry</code></a> must have at least 1 to infinite
<ahref="struct.SchemaClass.html"><code>Classes</code></a>. [`Classes’] are additive.</p>
</div></details><h2id="structs"class="small-section-header"><ahref="#structs">Structs</a></h2><divclass="item-table"><divclass="item-row"><divclass="item-left module-item"><aclass="struct"href="struct.Schema.html"title="kanidmd_lib::schema::Schema struct">Schema</a></div><divclass="item-right docblock-short"><p>Schema stores the set of <ahref="struct.SchemaClass.html"><code>Classes</code></a> and <ahref="struct.SchemaAttribute.html"><code>Attributes</code></a> that the server will
use to validate <ahref="../entry/index.html"><code>Entries</code></a>, <ahref="../filter/index.html"><code>Filters</code></a> and <ahref="../modify/index.html"><code>Modifications</code></a>. Additionally the
schema stores an extracted copy of the current attribute indexing metadata that
is used by the backend during queries.</p>
</div></div><divclass="item-row"><divclass="item-left module-item"><aclass="struct"href="struct.SchemaAttribute.html"title="kanidmd_lib::schema::SchemaAttribute struct">SchemaAttribute</a></div><divclass="item-right docblock-short"><p>An item reperesenting an attribute and the rules that enforce it. These rules enforce if an
attribute on an <ahref="../entry/index.html"><code>Entry</code></a> may be single or multi value, must be unique amongst all other types
of this attribute, if the attribute should be <ahref="../value/enum.IndexType.html"><code>indexed</code></a>, and what type of data <ahref="../value/enum.SyntaxType.html"><code>syntax</code></a> it may hold.</p>
</div></div><divclass="item-row"><divclass="item-left module-item"><aclass="struct"href="struct.SchemaClass.html"title="kanidmd_lib::schema::SchemaClass struct">SchemaClass</a></div><divclass="item-right docblock-short"><p>An item reperesenting a class and the rules for that class. These rules enforce that an
<ahref="../entry/index.html"><code>Entry</code></a>’s avas conform to a set of requirements, giving structure to an entry about
what avas must or may exist. The kanidm project provides attributes in <code>systemmust</code> and
<code>systemmay</code>, which can not be altered. An administrator may extend these in the <code>must</code>
and <code>may</code> attributes.</p>
</div></div><divclass="item-row"><divclass="item-left module-item"><aclass="struct"href="struct.SchemaReadTransaction.html"title="kanidmd_lib::schema::SchemaReadTransaction struct">SchemaReadTransaction</a></div><divclass="item-right docblock-short"><p>A readonly transaction of the working schema set.</p>
</div></div><divclass="item-row"><divclass="item-left module-item"><aclass="struct"href="struct.SchemaWriteTransaction.html"title="kanidmd_lib::schema::SchemaWriteTransaction struct">SchemaWriteTransaction</a></div><divclass="item-right docblock-short"><p>A writable transaction of the working schema set. You should not change this directly,
the writability is for the server internally to allow reloading of the schema. Changes
you make will be lost when the server re-reads the schema from disk.</p>