apipe 0.2.0

An anonymous UNIX pipe type.
Documentation
<!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">
    <title>apipe</title>

    
    
</head>
<body class="rustdoc">
    <!--[if lte IE 8]>
    <div class="warning">
        This old browser is unsupported and will most likely display funky
        things.
    </div>
    <![endif]-->

    
    <h1 class="title">apipe</h1>
    <nav id="TOC"><ul>
<li><a href="#usage">0.1 Usage</a><ul>
<li><a href="#try_fromstr">0.1.1 try_from(&amp;str)</a><ul></ul></li>
<li><a href="#pipe-command-objects">0.1.2 Pipe Command Objects</a><ul></ul></li>
<li><a href="#builder">0.1.3 Builder</a><ul></ul></li></ul></li></ul></nav><p>A simple annonymous UNIX pipe type.</p>
<h2 id="usage"><a href="#usage">0.1 Usage</a></h2><h3 id="try_fromstr"><a href="#try_fromstr">0.1.1 try_from(&amp;str)</a></h3>
<p>The probably easiest way to create a pipe is by parsing a command string:</p>

<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">use</span> <span class="ident">apipe::CommandPipe</span>;

<span class="kw">let</span> <span class="kw-2">mut</span> <span class="ident">pipe</span> <span class="op">=</span> <span class="ident">CommandPipe::try_from</span>(<span class="string">r#&quot;echo &quot;This is a test.&quot; | grep -Eo \w\w\sa[^.]*&quot;#</span>)<span class="question-mark">?</span>;

<span class="kw">let</span> <span class="ident">output</span> <span class="op">=</span> <span class="ident">pipe</span>.<span class="ident">spawn_with_output</span>()<span class="question-mark">?</span>
                 .<span class="ident">stdout</span>();
    
<span class="macro">assert_eq!</span>(<span class="kw-2">&amp;</span><span class="ident">String::from_utf8_lossy</span>(<span class="ident">output</span>), <span class="string">&quot;is a test\n&quot;</span>);</code></pre></div>
<h3 id="pipe-command-objects"><a href="#pipe-command-objects">0.1.2 Pipe Command Objects</a></h3>
<p>Another way is to create the individual Commands and then contruct a pipe from them:</p>

<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">use</span> <span class="ident">apipe::Command</span>;

<span class="kw">let</span> <span class="kw-2">mut</span> <span class="ident">pipe</span> <span class="op">=</span> <span class="ident">Command::parse_str</span>(<span class="string">r#&quot;echo &quot;This is a test.&quot;&quot;#</span>)<span class="question-mark">?</span> <span class="op">|</span> <span class="ident">Command::parse_str</span>(<span class="string">r#&quot;grep -Eo \w\w\sa[^.]*&quot;#</span>)<span class="question-mark">?</span>;
                 
<span class="kw">let</span> <span class="ident">output</span> <span class="op">=</span> <span class="ident">pipe</span>.<span class="ident">spawn_with_output</span>()<span class="question-mark">?</span>.<span class="ident">stdout</span>();
    
<span class="macro">assert_eq!</span>(<span class="kw-2">&amp;</span><span class="ident">String::from_utf8_lossy</span>(<span class="ident">output</span>), <span class="string">&quot;is a test\n&quot;</span>);
</code></pre></div>
<p><code>Command</code>s can also be constructed manually if you want:</p>

<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">let</span> <span class="kw-2">mut</span> <span class="ident">command</span> <span class="op">=</span> <span class="ident">Command::new</span>(<span class="string">&quot;ls&quot;</span>).<span class="ident">arg</span>(<span class="string">&quot;-la&quot;</span>);</code></pre></div>
<h3 id="builder"><a href="#builder">0.1.3 Builder</a></h3>
<p>Finally, there is a conventional builder syntax:</p>

<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">use</span> <span class="ident">apipe::CommandPipe</span>;

<span class="kw">let</span> <span class="kw-2">mut</span> <span class="ident">pipe</span> <span class="op">=</span> <span class="ident">apipe::CommandPipe::new</span>();

<span class="ident">pipe</span>.<span class="ident">add_command</span>(<span class="string">&quot;echo&quot;</span>)
    .<span class="ident">arg</span>(<span class="string">&quot;This is a test.&quot;</span>)
    .<span class="ident">add_command</span>(<span class="string">&quot;grep&quot;</span>)
    .<span class="ident">arg</span>(<span class="string">&quot;-Eo&quot;</span>)
    .<span class="ident">arg</span>(<span class="string">r&quot;\w\w\sa[^.]*&quot;</span>)
    .<span class="ident">spawn</span>()<span class="question-mark">?</span>;
    
<span class="kw">let</span> <span class="ident">output</span> <span class="op">=</span> <span class="ident">pipe</span>.<span class="ident">output</span>()<span class="question-mark">?</span>
                 .<span class="ident">stdout</span>();
    
<span class="macro">assert_eq!</span>(<span class="kw-2">&amp;</span><span class="ident">String::from_utf8_lossy</span>(<span class="ident">output</span>), <span class="string">&quot;is a test\n&quot;</span>);</code></pre></div>

    
</body>
</html>