adb-rust 0.2.1

A common adb operation
Documentation
<!DOCTYPE html>
        <html>
        <head>
            <meta charset="UTF-8">
            <title>A simple adb client written in rust&period;</title>
            <style>
/* From extension vscode.github */
/*---------------------------------------------------------------------------------------------
 *  Copyright (c) Microsoft Corporation. All rights reserved.
 *  Licensed under the MIT License. See License.txt in the project root for license information.
 *--------------------------------------------------------------------------------------------*/

.vscode-dark img[src$=\#gh-light-mode-only],
.vscode-light img[src$=\#gh-dark-mode-only],
.vscode-high-contrast:not(.vscode-high-contrast-light) img[src$=\#gh-light-mode-only],
.vscode-high-contrast-light img[src$=\#gh-dark-mode-only] {
	display: none;
}

</style>
            
        <link rel="stylesheet" href="https://cdn.jsdelivr.net/gh/Microsoft/vscode/extensions/markdown-language-features/media/markdown.css">
<link rel="stylesheet" href="https://cdn.jsdelivr.net/gh/Microsoft/vscode/extensions/markdown-language-features/media/highlight.css">
<style>
            body {
                font-family: -apple-system, BlinkMacSystemFont, 'Segoe WPC', 'Segoe UI', system-ui, 'Ubuntu', 'Droid Sans', sans-serif;
                font-size: 14px;
                line-height: 1.6;
            }
        </style>
        <style>
.task-list-item {
    list-style-type: none;
}

.task-list-item-checkbox {
    margin-left: -20px;
    vertical-align: middle;
    pointer-events: none;
}
</style>
<style>
:root {
  --color-note: #0969da;
  --color-tip: #1a7f37;
  --color-warning: #9a6700;
  --color-severe: #bc4c00;
  --color-caution: #d1242f;
  --color-important: #8250df;
}

</style>
<style>
@media (prefers-color-scheme: dark) {
  :root {
    --color-note: #2f81f7;
    --color-tip: #3fb950;
    --color-warning: #d29922;
    --color-severe: #db6d28;
    --color-caution: #f85149;
    --color-important: #a371f7;
  }
}

</style>
<style>
.markdown-alert {
  padding: 0.5rem 1rem;
  margin-bottom: 16px;
  color: inherit;
  border-left: .25em solid #888;
}

.markdown-alert>:first-child {
  margin-top: 0
}

.markdown-alert>:last-child {
  margin-bottom: 0
}

.markdown-alert .markdown-alert-title {
  display: flex;
  font-weight: 500;
  align-items: center;
  line-height: 1
}

.markdown-alert .markdown-alert-title .octicon {
  margin-right: 0.5rem;
  display: inline-block;
  overflow: visible !important;
  vertical-align: text-bottom;
  fill: currentColor;
}

.markdown-alert.markdown-alert-note {
  border-left-color: var(--color-note);
}

.markdown-alert.markdown-alert-note .markdown-alert-title {
  color: var(--color-note);
}

.markdown-alert.markdown-alert-important {
  border-left-color: var(--color-important);
}

.markdown-alert.markdown-alert-important .markdown-alert-title {
  color: var(--color-important);
}

.markdown-alert.markdown-alert-warning {
  border-left-color: var(--color-warning);
}

.markdown-alert.markdown-alert-warning .markdown-alert-title {
  color: var(--color-warning);
}

.markdown-alert.markdown-alert-tip {
  border-left-color: var(--color-tip);
}

.markdown-alert.markdown-alert-tip .markdown-alert-title {
  color: var(--color-tip);
}

.markdown-alert.markdown-alert-caution {
  border-left-color: var(--color-caution);
}

.markdown-alert.markdown-alert-caution .markdown-alert-title {
  color: var(--color-caution);
}

</style>
        
        </head>
        <body class="vscode-body vscode-light">
            <h3 id="a-simple-adb-client-written-in-rust">A simple adb client written in rust.</h3>
<p>===========================</p>
<p>ADBCmd can be executed using synchronous execution commands, and can also be executed using asynchronous, callback function closure methods.</p>
<p>目前,这个库主要用于在Rust中调用 “cmd” 的命令,包含一些实用的API。</p>
<ul>
<li><strong>new()</strong>: 创建一个ADBCmd实例,返回一个ADBCmd实例。</li>
<li><strong>create_adb_cmd()</strong>: 创建一个异步的(基于tokio::process:Command)的Command实例,返回Command的实例,</li>
<li><strong>run_async()</strong>: 运行一个异步的命令,通过传入回调参数的形式,实时获取Command的输出</li>
<li><strong>run()</strong>:运行一个同步的命令(基于std::process::Command),获取当前同步命令的输出,返回一个Result&lt;String, String&gt;</li>
<li><strong>get_file_path()</strong>: 获取传入路径的文件路径,如果不存在则返回错误信息,返回一个Result&lt;String, String&gt;</li>
</ul>
<h3 id="使用方法">使用方法</h3>
<pre><code class="language-toml">///cargo.toml
    <span class="hljs-section">[dependencies]</span>
    <span class="hljs-attr">tokio</span> = { version = <span class="hljs-string">&quot;1.0&quot;</span>, features = [<span class="hljs-string">&quot;full&quot;</span>] }
    <span class="hljs-attr">adb-rust</span>=<span class="hljs-string">&quot;0.1.6&quot;</span>
</code></pre>
<ul>
<li>调用</li>
</ul>
<pre><code class="language-rust"><span class="hljs-keyword">use</span> adb_rust::cmd::{ADBCmd, ADBCmdResult}
<span class="hljs-keyword">pub</span> <span class="hljs-keyword">fn</span> <span class="hljs-title function_">push_xml_file</span>(){
    <span class="hljs-keyword">let</span> <span class="hljs-variable">file</span>:&amp;<span class="hljs-type">str</span>= <span class="hljs-string">&quot;./resources/file.xml&quot;</span>
    <span class="hljs-keyword">let</span> <span class="hljs-variable">paths</span>:<span class="hljs-type">String</span> = ADBCmd::<span class="hljs-title function_ invoke__">get_file_path</span>(file).<span class="hljs-title function_ invoke__">unwrap</span>();
    <span class="hljs-keyword">let</span> <span class="hljs-variable">args</span>:<span class="hljs-type">Vec</span>&lt;&amp;<span class="hljs-type">String</span>&gt; = <span class="hljs-built_in">vec!</span>[<span class="hljs-string">&quot;push&quot;</span>.<span class="hljs-title function_ invoke__">to_string</span>(),&amp;paths,<span class="hljs-string">&quot;/sdcard/&quot;</span>.<span class="hljs-title function_ invoke__">to_string</span>()];
    <span class="hljs-keyword">let</span> <span class="hljs-variable">res</span>:<span class="hljs-type">Result</span>&lt;<span class="hljs-type">String</span>, <span class="hljs-type">String</span>&gt; = ADBCmd::<span class="hljs-title function_ invoke__">new</span>(<span class="hljs-string">&quot;adb&quot;</span>,<span class="hljs-literal">true</span>).<span class="hljs-title function_ invoke__">run</span>(args);
    ...
    ...        
}

</code></pre>
<h3 id="api">APi</h3>
<pre><code class="language-rust"><span class="hljs-keyword">pub</span> <span class="hljs-keyword">mod</span> tests {
    <span class="hljs-keyword">use</span> crate::cmd::{ADBCmd, ADBCmdTrait};

    <span class="hljs-keyword">use</span> super::*;
    <span class="hljs-keyword">use</span> tokio;

    <span class="hljs-meta">#[test]</span>

    <span class="hljs-keyword">fn</span> <span class="hljs-title function_">test_adb_cmd</span>() {
        <span class="hljs-keyword">let</span> <span class="hljs-variable">res</span> = cmd::ADBCmd::<span class="hljs-title function_ invoke__">get_file_path</span>(<span class="hljs-string">&quot;./resources/file.xml&quot;</span>).<span class="hljs-title function_ invoke__">unwrap</span>();
        <span class="hljs-keyword">let</span> <span class="hljs-variable">res</span> = res.<span class="hljs-title function_ invoke__">replace</span>(<span class="hljs-string">&quot;\\\\?\\&quot;</span>, <span class="hljs-string">&quot;&quot;</span>);
        <span class="hljs-keyword">let</span> <span class="hljs-variable">args</span> = <span class="hljs-built_in">vec!</span>[<span class="hljs-string">&quot;push&quot;</span>.<span class="hljs-title function_ invoke__">to_string</span>(), res, <span class="hljs-string">&quot;/data/local/tmp/&quot;</span>.<span class="hljs-title function_ invoke__">to_string</span>()];
        <span class="hljs-keyword">let</span> <span class="hljs-variable">binding</span> = ADBCmd::<span class="hljs-title function_ invoke__">new</span>(<span class="hljs-string">&quot;adb&quot;</span>.<span class="hljs-title function_ invoke__">to_string</span>(), <span class="hljs-literal">false</span>);
        <span class="hljs-keyword">let</span> <span class="hljs-variable">child</span> = binding.<span class="hljs-title function_ invoke__">run</span>(args);
        <span class="hljs-keyword">match</span> child {
            <span class="hljs-title function_ invoke__">Ok</span>(stdout) =&gt; {
                <span class="hljs-built_in">println!</span>(<span class="hljs-string">&quot;{}&quot;</span>, stdout)
            }
            <span class="hljs-title function_ invoke__">Err</span>(stderr) =&gt; {
                <span class="hljs-built_in">println!</span>(<span class="hljs-string">&quot;{}&quot;</span>, stderr)
            }
        }
    }

    <span class="hljs-meta">#[tokio::test]</span>
    <span class="hljs-keyword">async</span> <span class="hljs-keyword">fn</span> <span class="hljs-title function_">test_run_async</span>() {
        <span class="hljs-keyword">let</span> <span class="hljs-variable">adb_cmd</span> = ADBCmd::<span class="hljs-title function_ invoke__">new</span>(<span class="hljs-string">&quot;adb&quot;</span>.<span class="hljs-title function_ invoke__">to_string</span>(), <span class="hljs-literal">false</span>);
        <span class="hljs-keyword">let</span> <span class="hljs-variable">args</span> = [<span class="hljs-string">&quot;devices&quot;</span>.<span class="hljs-title function_ invoke__">to_string</span>()];
        adb_cmd
            .<span class="hljs-title function_ invoke__">run_async</span>(args.<span class="hljs-title function_ invoke__">to_vec</span>(), |line| {
                <span class="hljs-built_in">println!</span>(<span class="hljs-string">&quot;{}&quot;</span>, line);
                line
            })
            .<span class="hljs-keyword">await</span>;
    }
}


</code></pre>

            
            
        </body>
        </html>