failable/docs/Protocols.html

364 lines
21 KiB
HTML

<!DOCTYPE html>
<html lang="en">
<head>
<title>Protocols Reference</title>
<link rel="stylesheet" type="text/css" href="css/jazzy.css" />
<link rel="stylesheet" type="text/css" href="css/highlight.css" />
<meta charset='utf-8'>
<script src="js/jquery.min.js" defer></script>
<script src="js/jazzy.js" defer></script>
</head>
<body>
<a title="Protocols Reference"></a>
<header>
<div class="content-wrapper">
<p><a href="index.html"> Docs</a> (100% documented)</p>
</div>
</header>
<div class="content-wrapper">
<p id="breadcrumbs">
<a href="index.html"> Reference</a>
<img id="carat" src="img/carat.png" />
Protocols Reference
</p>
</div>
<div class="content-wrapper">
<nav class="sidebar">
<ul class="nav-groups">
<li class="nav-group-name">
<a href="Extensions.html">Extensions</a>
<ul class="nav-group-tasks">
<li class="nav-group-task">
<a href="Extensions/CustomStringConvertible.html">CustomStringConvertible</a>
</li>
</ul>
</li>
<li class="nav-group-name">
<a href="Functions.html">Functions</a>
<ul class="nav-group-tasks">
<li class="nav-group-task">
<a href="Functions.html#/s:10Validation2neoiySbAA8FailableVyxq_G_ADyxq0_GtSQRz9SupportedQy_RszA2AR_A2AR0_AGQy0_AHRSr1_lF">!=(_:_:)</a>
</li>
<li class="nav-group-task">
<a href="Functions.html#/s:10Validation1moiyAA8FailableVyxAA19AppendedValidationsVyxq_q0_GGADyxq_G_ADyxq0_GtKSjRz9SupportedQy_RszA2AR_A2AR0_AKQy0_ALRSr1_lF">*(_:_:)</a>
</li>
<li class="nav-group-task">
<a href="Functions.html#/s:10Validation1moiyAA8FailableVyxq_GAE_xtKSjRz9SupportedQy_RszA2AR_r0_lF">*(_:_:)</a>
</li>
<li class="nav-group-task">
<a href="Functions.html#/s:10Validation2meoiyyAA8FailableVyxq_Gz_ADyxq0_GtKSjRz9SupportedQy_RszA2AR_A2AR0_AGQy0_AHRSr1_lF">*=(_:_:)</a>
</li>
<li class="nav-group-task">
<a href="Functions.html#/s:10Validation2meoiyyAA8FailableVyxq_Gz_xtKSjRz9SupportedQy_RszA2AR_r0_lF">*=(_:_:)</a>
</li>
<li class="nav-group-task">
<a href="Functions.html#/s:10Validation1poiyAA8FailableVyxAA19AppendedValidationsVyxq_q0_GGADyxq_G_ADyxq0_GtKSjRz9SupportedQy_RszA2AR_A2AR0_AKQy0_ALRSr1_lF">+(_:_:)</a>
</li>
<li class="nav-group-task">
<a href="Functions.html#/s:10Validation1poiyAA8FailableVyxq_GAE_xtKSjRz9SupportedQy_RszA2AR_r0_lF">+(_:_:)</a>
</li>
<li class="nav-group-task">
<a href="Functions.html#/s:10Validation2peoiyyAA8FailableVyxq_Gz_ADyxq0_GtKSjRz9SupportedQy_RszA2AR_A2AR0_AGQy0_AHRSr1_lF">+=(_:_:)</a>
</li>
<li class="nav-group-task">
<a href="Functions.html#/s:10Validation2peoiyyAA8FailableVyxq_Gz_xtKSjRz9SupportedQy_RszA2AR_r0_lF">+=(_:_:)</a>
</li>
<li class="nav-group-task">
<a href="Functions.html#/s:10Validation1soiyAA8FailableVyxAA19AppendedValidationsVyxq_q0_GGADyxq_G_ADyxq0_GtKSjRz9SupportedQy_RszA2AR_A2AR0_AKQy0_ALRSr1_lF">-(_:_:)</a>
</li>
<li class="nav-group-task">
<a href="Functions.html#/s:10Validation1soiyAA8FailableVyxq_GAE_xtKSjRz9SupportedQy_RszA2AR_r0_lF">-(_:_:)</a>
</li>
<li class="nav-group-task">
<a href="Functions.html#/s:10Validation2seoiyyAA8FailableVyxq_Gz_ADyxq0_GtKSjRz9SupportedQy_RszA2AR_A2AR0_AGQy0_AHRSr1_lF">-=(_:_:)</a>
</li>
<li class="nav-group-task">
<a href="Functions.html#/s:10Validation2seoiyyAA8FailableVyxq_Gz_xtKSjRz9SupportedQy_RszA2AR_r0_lF">-=(_:_:)</a>
</li>
<li class="nav-group-task">
<a href="Functions.html#/s:10Validation1loiySbAA8FailableVyxq_G_ADyxq0_GtSLRz9SupportedQy_RszA2AR_A2AR0_AGQy0_AHRSr1_lF">&lt;(_:_:)</a>
</li>
<li class="nav-group-task">
<a href="Functions.html#/s:10Validation2leoiySbAA8FailableVyxq_G_ADyxq0_GtSLRz9SupportedQy_RszA2AR_A2AR0_AGQy0_AHRSr1_lF">&lt;=(_:_:)</a>
</li>
<li class="nav-group-task">
<a href="Functions.html#/s:10Validation2ltoiyyAA8FailableVyxq_Gz_xtK9SupportedQy_RszA2AR_r0_lF">&lt;~(_:_:)</a>
</li>
<li class="nav-group-task">
<a href="Functions.html#/s:10Validation2eeoiySbAA8FailableVyxq_G_ADyxq0_GtSQRz9SupportedQy_RszA2AR_A2AR0_AGQy0_AHRSr1_lF">==(_:_:)</a>
</li>
<li class="nav-group-task">
<a href="Functions.html#/s:10Validation1goiySbAA8FailableVyxq_G_ADyxq0_GtSLRz9SupportedQy_RszA2AR_A2AR0_AGQy0_AHRSr1_lF">&gt;(_:_:)</a>
</li>
<li class="nav-group-task">
<a href="Functions.html#/s:10Validation2geoiySbAA8FailableVyxq_G_ADyxq0_GtSLRz9SupportedQy_RszA2AR_A2AR0_AGQy0_AHRSr1_lF">&gt;=(_:_:)</a>
</li>
</ul>
</li>
<li class="nav-group-name">
<a href="Protocols.html">Protocols</a>
<ul class="nav-group-tasks">
<li class="nav-group-task">
<a href="Protocols/AnyValidation.html">AnyValidation</a>
</li>
<li class="nav-group-task">
<a href="Protocols/InRangeValidation.html">InRangeValidation</a>
</li>
<li class="nav-group-task">
<a href="Protocols/LengthValidation.html">LengthValidation</a>
</li>
<li class="nav-group-task">
<a href="Protocols/RegexValidation.html">RegexValidation</a>
</li>
<li class="nav-group-task">
<a href="Protocols/Validation.html">Validation</a>
</li>
</ul>
</li>
<li class="nav-group-name">
<a href="Structs.html">Structures</a>
<ul class="nav-group-tasks">
<li class="nav-group-task">
<a href="Structs/AppendedValidations.html">AppendedValidations</a>
</li>
<li class="nav-group-task">
<a href="Structs/ElementValidation.html">ElementValidation</a>
</li>
<li class="nav-group-task">
<a href="Structs/Failable.html">Failable</a>
</li>
<li class="nav-group-task">
<a href="Structs/NotNil.html">NotNil</a>
</li>
<li class="nav-group-task">
<a href="Structs/NotNilValidate.html">NotNilValidate</a>
</li>
<li class="nav-group-task">
<a href="Structs/ValidationError.html">ValidationError</a>
</li>
</ul>
</li>
</ul>
</nav>
<article class="main-content">
<section>
<section class="section">
<h1>Protocols</h1>
<p>The following protocols are available globally.</p>
</section>
<section class="section task-group-section">
<div class="task-group">
<ul>
<li class="item">
<div>
<code>
<a name="/s:10Validation03AnyA0P"></a>
<a name="//apple_ref/swift/Protocol/AnyValidation" class="dashAnchor"></a>
<a class="token" href="#/s:10Validation03AnyA0P">AnyValidation</a>
</code>
</div>
<div class="height-container">
<div class="pointer-container"></div>
<section class="section">
<div class="pointer"></div>
<div class="abstract">
<p>A type-erased validation type.</p>
<p>This protocol uses <code>Any</code> instead of an associated type for the <code>validation</code> method paramater.
It also uses a <code>type</code> property to store what the expected input type is.</p>
<a href="Protocols/AnyValidation.html" class="slightly-smaller">See more</a>
</div>
<div class="declaration">
<h4>Declaration</h4>
<div class="language">
<p class="aside-title">Swift</p>
<pre class="highlight swift"><code><span class="kd">public</span> <span class="kd">protocol</span> <span class="kt">AnyValidation</span></code></pre>
</div>
</div>
</section>
</div>
</li>
<li class="item">
<div>
<code>
<a name="/s:10ValidationAAP"></a>
<a name="//apple_ref/swift/Protocol/Validation" class="dashAnchor"></a>
<a class="token" href="#/s:10ValidationAAP">Validation</a>
</code>
</div>
<div class="height-container">
<div class="pointer-container"></div>
<section class="section">
<div class="pointer"></div>
<div class="abstract">
<p>A type that can be used to validate a new value for a <code><a href="Structs/Failable.html">Failable</a></code> type.</p>
<p>A <code>Validation</code> type can only be used for a <code><a href="Structs/Failable.html">Failable</a></code> type if <code>Failable.T</code> and <code>Validation.Suuported</code> types are the same.</p>
<p>An example <code>Validation</code> implementation might look like this:</p>
<pre class="highlight swift"><code><span class="kd">struct</span> <span class="kt">Length1028</span><span class="o">&lt;</span><span class="kt">C</span><span class="o">&gt;</span><span class="p">:</span> <span class="kt">Validation</span> <span class="k">where</span> <span class="kt">C</span><span class="p">:</span> <span class="kt">Collection</span> <span class="p">{</span>
<span class="kd">static</span> <span class="kd">func</span> <span class="nf">validate</span><span class="p">(</span><span class="n">_</span> <span class="nv">value</span><span class="p">:</span> <span class="kt">C</span><span class="p">)</span><span class="k">throws</span> <span class="p">{</span>
<span class="k">guard</span> <span class="n">value</span><span class="o">.</span><span class="n">count</span> <span class="o">&lt;=</span> <span class="mi">1028</span> <span class="k">else</span> <span class="p">{</span> <span class="k">throw</span> <span class="kt">Error</span><span class="o">.</span><span class="n">toLong</span> <span class="p">}</span>
<span class="p">}</span>
<span class="p">}</span>
</code></pre>
<p>Both the <code>subvalidations</code> property and the <code>validate</code> method have default implementations,
so neither need to be implemented to conform to <code>Validation</code>.</p>
<a href="Protocols/Validation.html" class="slightly-smaller">See more</a>
</div>
<div class="declaration">
<h4>Declaration</h4>
<div class="language">
<p class="aside-title">Swift</p>
<pre class="highlight swift"><code><span class="kd">public</span> <span class="kd">protocol</span> <span class="kt">Validation</span><span class="p">:</span> <span class="kt"><a href="Protocols/AnyValidation.html">AnyValidation</a></span></code></pre>
</div>
</div>
</section>
</div>
</li>
</ul>
</div>
<div class="task-group">
<ul>
<li class="item">
<div>
<code>
<a name="/s:10Validation06LengthA0P"></a>
<a name="//apple_ref/swift/Protocol/LengthValidation" class="dashAnchor"></a>
<a class="token" href="#/s:10Validation06LengthA0P">LengthValidation</a>
</code>
</div>
<div class="height-container">
<div class="pointer-container"></div>
<section class="section">
<div class="pointer"></div>
<div class="abstract">
<p>A validation type that verifies the length of a type conforming to <code>Collection</code>.</p>
<pre class="highlight swift"><code><span class="kd">internal</span> <span class="kd">struct</span> <span class="kt">LengthRange10To1028</span><span class="o">&lt;</span><span class="kt">C</span><span class="o">&gt;</span><span class="p">:</span> <span class="kt">LengthValidation</span> <span class="k">where</span> <span class="kt">C</span><span class="p">:</span> <span class="kt">Collection</span> <span class="p">{</span>
<span class="kd">typealias</span> <span class="kt">Supported</span> <span class="o">=</span> <span class="kt">C</span>
<span class="kd">static</span> <span class="k">var</span> <span class="nv">maxLength</span><span class="p">:</span> <span class="kt">Int</span> <span class="p">{</span> <span class="k">return</span> <span class="mi">1028</span> <span class="p">}</span>
<span class="kd">static</span> <span class="k">var</span> <span class="nv">minLength</span><span class="p">:</span> <span class="kt">Int</span> <span class="p">{</span> <span class="k">return</span> <span class="mi">10</span> <span class="p">}</span>
<span class="p">}</span>
</code></pre>
<p>If the value passed into the <code>validate</code> method has a length the is greater than <code>maxLength</code>, <code>ValidationError.lengthTooLong</code> is thrown.
If the value has a length less than <code>minLength</code>, <code>ValidationError.lengthTooShort</code> is thrown.</p>
<a href="Protocols/LengthValidation.html" class="slightly-smaller">See more</a>
</div>
<div class="declaration">
<h4>Declaration</h4>
<div class="language">
<p class="aside-title">Swift</p>
<pre class="highlight swift"><code><span class="kd">public</span> <span class="kd">protocol</span> <span class="kt">LengthValidation</span><span class="p">:</span> <span class="kt"><a href="Protocols/Validation.html">Validation</a></span> <span class="k">where</span> <span class="kt">Supported</span><span class="p">:</span> <span class="kt">Collection</span></code></pre>
</div>
</div>
</section>
</div>
</li>
</ul>
</div>
<div class="task-group">
<ul>
<li class="item">
<div>
<code>
<a name="/s:10Validation07InRangeA0P"></a>
<a name="//apple_ref/swift/Protocol/InRangeValidation" class="dashAnchor"></a>
<a class="token" href="#/s:10Validation07InRangeA0P">InRangeValidation</a>
</code>
</div>
<div class="height-container">
<div class="pointer-container"></div>
<section class="section">
<div class="pointer"></div>
<div class="abstract">
<p>A validation for checking that a value is greater or equal to a lesser value and less than or equal to a greater value.</p>
<pre class="highlight swift"><code><span class="kd">struct</span> <span class="kt">NumberThousand</span><span class="p">:</span> <span class="kt">InRangeValidation</span> <span class="p">{</span>
<span class="kd">static</span> <span class="k">let</span> <span class="nv">max</span><span class="p">:</span> <span class="kt">Int</span><span class="p">?</span> <span class="o">=</span> <span class="mi">9_999</span>
<span class="kd">static</span> <span class="k">let</span> <span class="nv">min</span><span class="p">:</span> <span class="kt">Int</span><span class="p">?</span> <span class="o">=</span> <span class="mi">1_000</span>
<span class="p">}</span>
</code></pre>
<p>If the value being validated is greater than the <code>max</code> value, <code>ValidationError.valueTooGreat</code> is throw.
If the value is less than the <code>min</code> value, <code>ValidationError.valueTooSmall</code> is thrown.</p>
<p>If the <code>max</code> or <code>min</code> value is <code>nil</code>, then the value being validated will not be checked against it.
This allows for one sided validation ranges, where you could, for example, have any number greater than 42.</p>
<a href="Protocols/InRangeValidation.html" class="slightly-smaller">See more</a>
</div>
<div class="declaration">
<h4>Declaration</h4>
<div class="language">
<p class="aside-title">Swift</p>
<pre class="highlight swift"><code><span class="kd">public</span> <span class="kd">protocol</span> <span class="kt">InRangeValidation</span><span class="p">:</span> <span class="kt"><a href="Protocols/Validation.html">Validation</a></span> <span class="k">where</span> <span class="kt">Supported</span><span class="p">:</span> <span class="kt">Comparable</span></code></pre>
</div>
</div>
</section>
</div>
</li>
</ul>
</div>
<div class="task-group">
<ul>
<li class="item">
<div>
<code>
<a name="/s:10Validation05RegexA0P"></a>
<a name="//apple_ref/swift/Protocol/RegexValidation" class="dashAnchor"></a>
<a class="token" href="#/s:10Validation05RegexA0P">RegexValidation</a>
</code>
</div>
<div class="height-container">
<div class="pointer-container"></div>
<section class="section">
<div class="pointer"></div>
<div class="abstract">
<p>Checks that a <code>String</code> value contains a match to a regular expression pattern somewhere in it.</p>
<pre class="highlight swift"><code><span class="kd">struct</span> <span class="kt">USPhoneNumber</span><span class="p">:</span> <span class="kt">RegexValidation</span> <span class="p">{</span>
<span class="kd">static</span> <span class="k">let</span> <span class="nv">pattern</span> <span class="o">=</span> <span class="s">"1?-?</span><span class="se">\\</span><span class="s">(?[0-9]{3}</span><span class="se">\\</span><span class="s">)?-?[0-9]{3}-?[0-9]{4}"</span>
<span class="p">}</span>
</code></pre>
<p>If you want to make sure the RegEx pattern matches the whole string, use the <code>^</code> and <code>$</code> operators at the start and end of the pattern.</p>
<p>If the string passed in to be validated does not contain a match for the RegEx pattern, <code>ValidationError.noRegexMatch</code> will be thrown.</p>
<a href="Protocols/RegexValidation.html" class="slightly-smaller">See more</a>
</div>
<div class="declaration">
<h4>Declaration</h4>
<div class="language">
<p class="aside-title">Swift</p>
<pre class="highlight swift"><code><span class="kd">public</span> <span class="kd">protocol</span> <span class="kt">RegexValidation</span><span class="p">:</span> <span class="kt"><a href="Protocols/Validation.html">Validation</a></span> <span class="k">where</span> <span class="kt">Supported</span> <span class="o">==</span> <span class="kt">String</span></code></pre>
</div>
</div>
</section>
</div>
</li>
</ul>
</div>
</section>
</section>
<section id="footer">
<p>&copy; 2018 <a class="link" href="" target="_blank" rel="external"></a>. All rights reserved. (Last updated: 2018-11-28)</p>
<p>Generated by <a class="link" href="https://github.com/realm/jazzy" target="_blank" rel="external">jazzy ♪♫ v0.9.1</a>, a <a class="link" href="http://realm.io" target="_blank" rel="external">Realm</a> project.</p>
</section>
</article>
</div>
</body>
</div>
</html>