Rust中无法使用bluer 0.15.0 crate部分组件的问题咨询
解决bluer 0.15.0中Advertisement和Result未找到的问题
1. 确保Cargo.toml启用必要特性
bluer的广告相关功能需要手动启用adv特性,修改你的Cargo.toml:
[dependencies] bluer = { version = "0.15.0", features = ["adv"] } tokio = { version = "1.0", features = ["full"] } env_logger = "0.10"
注:tokio和env_logger是示例代码的依赖项,需要一并添加。
2. 修正代码中的导入与路径问题
原代码缺少必要的导入声明,且部分类型路径未正确引用,修正后的完整代码如下:
use bluer::{adv::Advertisement, Error, Result, Session}; use std::time::Duration; use tokio::io::{BufRead, BufReader}; use tokio::time::sleep; async fn main() -> Result<()> { env_logger::init(); let session = Session::new().await?; let adapter = session.default_adapter().await?; adapter.set_powered(true).await?; println!( "Advertising on Bluetooth adapter {} with address {}", adapter.name(), adapter.address().await? ); let le_advertisement = Advertisement { advertisement_type: bluer::adv::Type::Peripheral, service_uuids: vec!["123e4567-e89b-12d3-a456-426614174000".parse().unwrap()] .into_iter() .collect(), discoverable: Some(true), local_name: Some("le_advertise".to_string()), ..Default::default() }; println!("{:?}", &le_advertisement); let handle = adapter.advertise(le_advertisement).await?; println!("Press enter to quit"); let stdin = BufReader::new(tokio::io::stdin()); let mut lines = stdin.lines(); let _ = lines.next_line().await; println!("Removing advertisement"); drop(handle); sleep(Duration::from_secs(1)).await; Ok(()) }
关键修正点:
- 显式导入
Advertisement:use bluer::adv::Advertisement;,该类型位于bluer::adv子模块下,默认不会自动导入 - 导入
bluer::Result和Error:use bluer::{Result, Error};,让main函数的返回值类型能被正确识别 - 添加tokio相关导入:示例代码用到了tokio的异步IO和sleep功能,需要导入对应模块
3. 验证并修复编译问题
执行以下命令验证代码:
cargo check
如果仍有编译错误,清理缓存后重新构建:
cargo clean cargo build
内容的提问来源于stack exchange,提问作者Dome
相关产品推荐
相关产品推荐

