Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
R
RoboPLC
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
图表
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
黄新宇
RoboPLC
Commits
4facb7f2
提交
4facb7f2
authored
1月 05, 2025
作者:
Serhij S
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
show versions
上级
86eba48f
隐藏空白字符变更
内嵌
并排
正在显示
4 个修改的文件
包含
380 行增加
和
4 行删除
+380
-4
Cargo.lock
roboplc-cli/Cargo.lock
+309
-0
arguments.rs
roboplc-cli/src/arguments.rs
+7
-1
main.rs
roboplc-cli/src/main.rs
+2
-2
remote.rs
roboplc-cli/src/remote.rs
+62
-1
没有找到文件。
roboplc-cli/Cargo.lock
浏览文件 @
4facb7f2
...
...
@@ -17,6 +17,30 @@ version = "1.0.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe"
[[package]]
name = "aho-corasick"
version = "1.1.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916"
dependencies = [
"memchr",
]
[[package]]
name = "android-tzdata"
version = "0.1.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0"
[[package]]
name = "android_system_properties"
version = "0.1.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311"
dependencies = [
"libc",
]
[[package]]
name = "ansi_term"
version = "0.12.1"
...
...
@@ -26,6 +50,12 @@ dependencies = [
"winapi",
]
[[package]]
name = "anyhow"
version = "1.0.95"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "34ac096ce696dc2fcabef30516bb13c0a68a11d30131d3df6f04711467681b04"
[[package]]
name = "autocfg"
version = "1.3.0"
...
...
@@ -80,6 +110,26 @@ dependencies = [
"generic-array",
]
[[package]]
name = "bma-ts"
version = "0.1.14"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1c0cd34a34174c74d6984fdf7dee88fce5befb990562c1ff0bebbfdc79bd7bd1"
dependencies = [
"chrono",
"dateparser",
"nix",
"once_cell",
"serde",
"thiserror",
]
[[package]]
name = "bumpalo"
version = "3.16.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c"
[[package]]
name = "byteorder"
version = "1.5.0"
...
...
@@ -104,6 +154,20 @@ version = "1.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
[[package]]
name = "chrono"
version = "0.4.39"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7e36cc9d416881d2e24f9a963be5fb1cd90966419ac844274161d10488b3e825"
dependencies = [
"android-tzdata",
"iana-time-zone",
"js-sys",
"num-traits",
"wasm-bindgen",
"windows-targets 0.52.5",
]
[[package]]
name = "clap"
version = "4.1.14"
...
...
@@ -201,12 +265,45 @@ dependencies = [
"typenum",
]
[[package]]
name = "csv"
version = "1.3.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "acdc4883a9c96732e4733212c01447ebd805833b7275a73ca3ee080fd77afdaf"
dependencies = [
"csv-core",
"itoa",
"ryu",
"serde",
]
[[package]]
name = "csv-core"
version = "0.1.11"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5efa2b3d7902f4b634a20cae3c9c4e6209dc4779feb6863329607560143efa70"
dependencies = [
"memchr",
]
[[package]]
name = "data-encoding"
version = "2.6.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e8566979429cf69b49a5c740c60791108e86440e8be149bbea4fe54d2c32d6e2"
[[package]]
name = "dateparser"
version = "0.2.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c2ef451feee09ae5ecd8a02e738bd9adee9266b8fa9b44e22d3ce968d8694238"
dependencies = [
"anyhow",
"chrono",
"lazy_static",
"regex",
]
[[package]]
name = "digest"
version = "0.10.7"
...
...
@@ -226,6 +323,16 @@ dependencies = [
"dirs-sys",
]
[[package]]
name = "dirs-next"
version = "2.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b98cf8ebf19c3d1b223e151f99a4f9f0690dca41414773390fc824184ac833e1"
dependencies = [
"cfg-if",
"dirs-sys-next",
]
[[package]]
name = "dirs-sys"
version = "0.4.1"
...
...
@@ -238,6 +345,23 @@ dependencies = [
"windows-sys 0.48.0",
]
[[package]]
name = "dirs-sys-next"
version = "0.1.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4ebda144c4fe02d1f7ea1a7d9641b6fc6b580adcfa024ae48797ecdeb6825b4d"
dependencies = [
"libc",
"redox_users",
"winapi",
]
[[package]]
name = "encode_unicode"
version = "1.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "34aa73646ffb006b8f5147f3dc182bd4bcb190227ce861fc4a4844bf8e3cb2c0"
[[package]]
name = "errno"
version = "0.3.8"
...
...
@@ -403,6 +527,29 @@ version = "1.9.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0fcc0b4a115bf80b728eb8ea024ad5bd707b615bfed49e0665b6e0f86fd082d9"
[[package]]
name = "iana-time-zone"
version = "0.1.61"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "235e081f3925a06703c2d0117ea8b91f042756fd6e7a6e5d901e8ca1a996b220"
dependencies = [
"android_system_properties",
"core-foundation-sys",
"iana-time-zone-haiku",
"js-sys",
"wasm-bindgen",
"windows-core",
]
[[package]]
name = "iana-time-zone-haiku"
version = "0.1.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f"
dependencies = [
"cc",
]
[[package]]
name = "idna"
version = "0.5.0"
...
...
@@ -430,6 +577,16 @@ version = "1.0.11"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "49f1f14873335454500d59611f1cf4a4b0f786f9ac11f4312a78e4cf2566695b"
[[package]]
name = "js-sys"
version = "0.3.76"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6717b6b5b077764fb5966237269cb3c64edddde4b14ce42647430a78ced9e7b7"
dependencies = [
"once_cell",
"wasm-bindgen",
]
[[package]]
name = "lazy_static"
version = "1.4.0"
...
...
@@ -524,6 +681,26 @@ dependencies = [
"tempfile",
]
[[package]]
name = "nix"
version = "0.27.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2eb04e9c688eff1c89d72b407f168cf79bb9e867a9d3323ed6c01519eb9cc053"
dependencies = [
"bitflags 2.5.0",
"cfg-if",
"libc",
]
[[package]]
name = "num-traits"
version = "0.2.19"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841"
dependencies = [
"autocfg",
]
[[package]]
name = "object"
version = "0.32.2"
...
...
@@ -619,6 +796,20 @@ version = "0.2.17"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de"
[[package]]
name = "prettytable-rs"
version = "0.10.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "eea25e07510aa6ab6547308ebe3c036016d162b8da920dbb079e3ba8acf3d95a"
dependencies = [
"csv",
"encode_unicode",
"is-terminal",
"lazy_static",
"term",
"unicode-width",
]
[[package]]
name = "proc-macro2"
version = "1.0.81"
...
...
@@ -678,6 +869,35 @@ dependencies = [
"thiserror",
]
[[package]]
name = "regex"
version = "1.11.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b544ef1b4eac5dc2db33ea63606ae9ffcfac26c1416a2806ae0bf5f56b201191"
dependencies = [
"aho-corasick",
"memchr",
"regex-automata",
"regex-syntax",
]
[[package]]
name = "regex-automata"
version = "0.4.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "809e8dc61f6de73b46c85f4c96486310fe304c434cfa43669d7b40f711150908"
dependencies = [
"aho-corasick",
"memchr",
"regex-syntax",
]
[[package]]
name = "regex-syntax"
version = "0.8.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c"
[[package]]
name = "ring"
version = "0.17.8"
...
...
@@ -698,11 +918,14 @@ name = "roboplc-cli"
version = "0.4.8"
dependencies = [
"ansi_term",
"bma-ts",
"chrono",
"clap",
"colored",
"dirs",
"futures-util",
"once_cell",
"prettytable-rs",
"serde",
"serde_json",
"shlex",
...
...
@@ -802,6 +1025,12 @@ dependencies = [
"untrusted",
]
[[package]]
name = "rustversion"
version = "1.0.19"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f7c45b9784283f1b2e7fb61b42047c2fd678ef0960d4f6f1eba131594cc369d4"
[[package]]
name = "ryu"
version = "1.0.17"
...
...
@@ -948,6 +1177,17 @@ dependencies = [
"windows-sys 0.52.0",
]
[[package]]
name = "term"
version = "0.7.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c59df8ac95d96ff9bede18eb7300b0fda5e5d8d90960e76f8e14ae765eedbf1f"
dependencies = [
"dirs-next",
"rustversion",
"winapi",
]
[[package]]
name = "term_size"
version = "0.3.2"
...
...
@@ -1102,6 +1342,12 @@ dependencies = [
"tinyvec",
]
[[package]]
name = "unicode-width"
version = "0.1.14"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7dd6e30e90baa6f72411720665d41d89b9a3d039dc45b8faea1ddd07f617f6af"
[[package]]
name = "untrusted"
version = "0.9.0"
...
...
@@ -1176,6 +1422,60 @@ version = "0.11.0+wasi-snapshot-preview1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423"
[[package]]
name = "wasm-bindgen"
version = "0.2.99"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a474f6281d1d70c17ae7aa6a613c87fce69a127e2624002df63dcb39d6cf6396"
dependencies = [
"cfg-if",
"once_cell",
"wasm-bindgen-macro",
]
[[package]]
name = "wasm-bindgen-backend"
version = "0.2.99"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5f89bb38646b4f81674e8f5c3fb81b562be1fd936d84320f3264486418519c79"
dependencies = [
"bumpalo",
"log",
"proc-macro2",
"quote",
"syn",
"wasm-bindgen-shared",
]
[[package]]
name = "wasm-bindgen-macro"
version = "0.2.99"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2cc6181fd9a7492eef6fef1f33961e3695e4579b9872a6f7c83aee556666d4fe"
dependencies = [
"quote",
"wasm-bindgen-macro-support",
]
[[package]]
name = "wasm-bindgen-macro-support"
version = "0.2.99"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "30d7a95b763d3c45903ed6c81f156801839e5ee968bb07e534c44df0fcd330c2"
dependencies = [
"proc-macro2",
"quote",
"syn",
"wasm-bindgen-backend",
"wasm-bindgen-shared",
]
[[package]]
name = "wasm-bindgen-shared"
version = "0.2.99"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "943aab3fdaaa029a6e0271b35ea10b72b943135afe9bffca82384098ad0e06a6"
[[package]]
name = "webpki-roots"
version = "0.26.1"
...
...
@@ -1226,6 +1526,15 @@ version = "0.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
[[package]]
name = "windows-core"
version = "0.52.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "33ab640c8d7e35bf8ba19b884ba838ceb4fba93a4e8c65a9059d08afcfc683d9"
dependencies = [
"windows-targets 0.52.5",
]
[[package]]
name = "windows-sys"
version = "0.48.0"
...
...
roboplc-cli/src/arguments.rs
浏览文件 @
4facb7f2
...
...
@@ -32,7 +32,7 @@ pub enum SubCommand {
#[clap(name
=
"new"
,
about
=
"Generate a new project"
)]
New
(
NewCommand
),
#[clap(name
=
"stat"
,
about
=
"Get program status"
)]
Stat
,
Stat
(
StatCommand
)
,
#[clap(name
=
"config"
,
about
=
"Switch remote into CONFIG mode"
)]
Config
,
#[clap(name
=
"run"
,
about
=
"Switch remote into RUN mode"
)]
...
...
@@ -118,6 +118,12 @@ impl LockingPolicy {
}
}
#[derive(Parser)]
pub
struct
StatCommand
{
#[clap(long,
help
=
"Show remote versions (requires RoboPLC Pro)"
)]
pub
show_versions
:
bool
,
}
#[derive(Parser)]
pub
struct
FlashCommand
{
#[clap(long,
env
=
"CARGO"
,
help
=
"cargo/cross binary path"
)]
...
...
roboplc-cli/src/main.rs
浏览文件 @
4facb7f2
...
...
@@ -102,8 +102,8 @@ fn main() -> Result<(), Box<dyn std::error::Error>> {
SubCommand
::
New
(
_
)
=>
{
panic!
(
"BUG"
);
}
SubCommand
::
Stat
=>
{
remote
::
stat
(
&
url
,
&
key
,
agent
)
?
;
SubCommand
::
Stat
(
opts
)
=>
{
remote
::
stat
(
&
url
,
&
key
,
agent
,
opts
.show_versions
)
?
;
}
SubCommand
::
Config
=>
{
remote
::
set_mode
(
&
url
,
&
key
,
&
agent
,
Mode
::
Config
,
true
)
?
;
...
...
roboplc-cli/src/remote.rs
浏览文件 @
4facb7f2
use
bma_ts
::
Timestamp
;
use
prettytable
::{
cell
,
row
,
Table
};
use
serde
::
Deserialize
;
use
ureq
::
Agent
;
use
crate
::{
...
...
@@ -6,7 +9,12 @@ use crate::{
API_PREFIX
,
};
pub
fn
stat
(
url
:
&
str
,
key
:
&
str
,
agent
:
Agent
)
->
Result
<
(),
Box
<
dyn
std
::
error
::
Error
>>
{
pub
fn
stat
(
url
:
&
str
,
key
:
&
str
,
agent
:
Agent
,
show_versions
:
bool
,
)
->
Result
<
(),
Box
<
dyn
std
::
error
::
Error
>>
{
let
resp
=
agent
.post
(
&
format!
(
"{}{}/query.stats.program"
,
url
,
API_PREFIX
))
.set
(
"x-auth-key"
,
key
)
...
...
@@ -14,9 +22,62 @@ pub fn stat(url: &str, key: &str, agent: Agent) -> Result<(), Box<dyn std::error
.process_error
()
?
;
let
stats
:
State
=
resp
.into_json
()
?
;
stats
.print_std
();
if
show_versions
{
println!
();
let
resp
=
agent
.post
(
&
format!
(
"{}{}/query.program.meta"
,
url
,
API_PREFIX
))
.set
(
"x-auth-key"
,
key
)
.call
()
.process_error
()
?
;
let
meta
:
PlcMetadata
=
resp
.into_json
()
?
;
let
mut
table
=
Table
::
new
();
table
.add_row
(
row!
[
"Program"
,
"Exists"
,
"Created"
]);
table
.add_row
(
row!
[
"current"
,
meta
.program_current
.exists_as_cell
(),
meta
.program_current
.created_iso
()
?
]);
for
(
i
,
program
)
in
meta
.program_previous
.iter
()
.enumerate
()
{
table
.add_row
(
row!
[
format!
(
"prev.{}"
,
i
),
program
.exists_as_cell
(),
program
.created_iso
()
?
]);
}
table
.printstd
();
}
Ok
(())
}
#[derive(Deserialize)]
struct
PlcMetadata
{
program_current
:
ProgramFileMetdata
,
#[serde(default)]
program_previous
:
Vec
<
ProgramFileMetdata
>
,
}
#[derive(Deserialize)]
struct
ProgramFileMetdata
{
exists
:
bool
,
created
:
Timestamp
,
}
impl
ProgramFileMetdata
{
fn
exists_as_cell
(
&
self
)
->
prettytable
::
Cell
{
if
!
self
.exists
{
cell!
(
"YES"
)
}
else
{
cell!
(
Fr
->
"NO"
)
}
}
fn
created_iso
(
&
self
)
->
Result
<
String
,
Box
<
dyn
std
::
error
::
Error
>>
{
Ok
(
self
.created
.try_into_datetime_local
()
?
.to_rfc3339_opts
(
chrono
::
SecondsFormat
::
Secs
,
true
))
}
}
pub
fn
set_mode
(
url
:
&
str
,
key
:
&
str
,
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论