1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
//! Rust 特有语法糖集合 (sugar)
//!
//! 本模块在 **不修改主 .rs 文件** 的前提下, 通过 Rust 孤儿规则允许的
//! "本 crate 内为本 crate 类型实现外部 trait", 给已有 SDK 类型追加
//! 一批 Rust 惯用法 API. 全部为可选语法糖, 不影响向后兼容:
//!
//! - **索引语法** (`master[1]`): 见 [`index`]
//! - **类型转换** (`From`/`Into`): 见 [`conversions`]
//! - **Display 增强** (用户友好的枚举打印): 见 [`display`]
//! - **状态变化通道** (`mpsc::channel` 替代回调): 见 [`state_stream`]
//! - **迭代器扩展** (按状态/组过滤): 见 [`iter_ext`]
//! - **错误传播** (`try_slave?`/`slave_opt`): 见 [`try_slave`]
//! - **异步流** (`tokio::Stream`, 仅 `async-tokio` feature): 见 [`async_stream`]
//!
//! # 使用方式
//!
//! 一行 use 引入全部语法糖:
//!
//! ```no_run
//! use darra_ethercat::sugar::prelude::*;
//! use darra_ethercat::EtherCATMaster;
//!
//! let master = EtherCATMaster::new().unwrap();
//!
//! // 索引语法
//! let s1 = &master[1];
//!
//! // 链式过滤
//! for slave in master.iter().by_state(darra_ethercat::EcState::Operational) {
//! println!("{}", slave);
//! }
//!
//! // 错误传播
//! fn use_first(m: &EtherCATMaster) -> darra_ethercat::Result<()> {
//! let s = m.try_slave(1)?;
//! println!("vendor: 0x{:08X}", s.vendor_id());
//! Ok(())
//! }
//! ```