解决方案:我需要添加“使用std::io::prelude::*”我的准则。我不知道为什么。
我试图从d::网络读取::TcpStream,但我收到这个错误,当调用stream.read(
对于结构 std::net::TcpStream
存在读取
方法,但其特征边界未得到满足,由于未满足的特性边界,无法在 std::net::TcpStream
上调用方法 注意:未满足以下特征边界:std::net::TcpStream: futures::AsyncRead
这是 std::net::TcpStream: futures:TsyncLex: futures::AsyncRead
help: 仅当特征处于 scoperustc(E0599) main.rs(31, 16): 方法不能在 std::net::TcpStream
上调用,因为未满足的特质边界 tcp.rs(49, 1): 不满足 std::net::TcpStream: futures::AsyncReadExt
tcp.rs(49, 1): 不满足 std::net::TcpStream: futures::AsyncRead
mod.rs(580, 8): 该方法可用于 std::框::框
代码:
use irc::client::prelude::*;
use futures::prelude::*;
use std::net::{IpAddr, Ipv4Addr, SocketAddr, TcpStream};
use std::io;
use futures::{AsyncRead, AsyncReadExt};
const NAME: &str = "nickname";
#[derive(Debug)]
struct DCC {
ip: IpAddr,
port: u16,
}
impl DCC {
fn from_msg(msg: &str) -> Result<DCC, std::num::ParseIntError> {
let msg_split: Vec<&str> = msg.split_whitespace().collect();
let ip: u32 = msg_split[3].parse()?;
let ip_addr: IpAddr = IpAddr::V4(Ipv4Addr::from(ip));
let port_num: u16 = msg_split[4].parse()?;
let dcc = DCC{
ip: ip_addr,
port: port_num,
};
return Ok(dcc);
}
async fn connect(&self) -> Result<(), io::Error>{
let socket_addr = SocketAddr::new(self.ip, self.port);
let mut socket = TcpStream::connect(socket_addr)?;
let mut buf = vec![];
socket.read(&buf).unwrap();
return Err(io::Error::new(io::ErrorKind::Other, "oh no!"));
}
}
#[tokio::main]
async fn irc_get(name: &str) -> Result<String, irc::error::Error>{
let config = Config {
nickname: Some(NAME.to_owned()),
server: Some("irc.irchighway.net".to_owned()),
port: Some(6667),
use_tls: Some(false),
channels: vec!["#ebooks".to_owned()],
..Config::default()
};
let mut client = Client::from_config(config).await?;
client.identify()?;
let mut stream = client.stream()?;
//waits for server to log us in and then sends the search request
loop{
let m = match stream.next().await{
Some(v) => v,
None => panic!("at the disco")
};
let message = match &m {
Ok(message) => match &message.command {Command::NOTICE(_s1, s2)=> {print!("{:?} \n", s2); message}, _ => message},
Err(_e) => panic!("at the disco")};
match &message.command{
Command::NOTICE(_s, msg) => { if msg.contains("Welcome to #ebooks"){break}},
_=> ()
}
}
client.send_privmsg("#ebooks", format!["@Search {}", name])?;
loop{
let m = match stream.next().await.transpose()?{
Some(m) => m,
None => panic!("at the disco")
};
match &m.command{
Command::PRIVMSG(nm, msg) => if nm == NAME {println!("{:?}",m); return Ok(String::from(msg))},
_ => ()
}
}
}
fn main() {
let dcc = DCC::from_msg(&irc_get(&"romeo and juliet").unwrap()[..]);
println!("{:?}", dcc);
}
我对 rust 相当陌生,根据文档中的所有示例,我认为我正确地使用了 .read。我唯一的想法是,也许是因为我试图在impl中编写代码,但我不知道生锈是否以不同的方式对待它。它还会失败,并显示“异步 fn 连接...”并使用“fn connect...”。
编译器告诉你解决方案:
帮助:特性中的物品只有在特性在范围内时才能使用
您需要导入特征才能使用它们:
use futures::{AsyncRead, AsyncReadExt};
此外,您可能希望使用tokio::TcpStream
,它是异步的,而不是std
的。
我对铁锈和柴油不熟悉。并尝试使用rocket framework创建一个小的演示api 获取错误:特征绑定<代码>NaiveDateTime:反序列化 我谷歌了一下,找到了一些有用的链接,比如这里:https://github.com/serde-rs/serde/issues/759 < br >看起来版本有问题。 这是我的文件: schema.rs cargo.toml 型号. rs 梅因 有
我有一个这样的提供程序设置: 我正在尝试使用actix web中的内置方法,将 或类似的东西。 但是,我反而收到以下错误: 有人能帮我弄清楚怎么解决这个问题吗?我对std::marker::size做了一些研究,但我不知道如何使用它来解决这个问题。
我尝试使用Tokio库在生锈中初始化具有异步功能的服务器: 这会抛出一个错误,表示: 当我将鼠标悬停在<code>侦听器</code>上时,其类型未知。
我以前见过这样做,但我不记得如何有效地初始化已知长度的与长度相同的。这里有一个很好的例子: 我已经仔细阅读了这一页关于高级矩阵初始化的内容,但是没有明确解释执行此操作的方法。
我会期望std::reference_wrapper在将non-const转换为const方面可以作为参考,例如: 下面的代码在MSVC和GCC中编译并运行良好,但在Clang上则不行。我只是不明白为什么,它是UB,还是实际上是关于Clang编译器的问题? 仅在Clang上,显示以下错误: https://wandbox.org/permlink/FSY4tCvE9B17hbVn
你好,我正在练习使用C++中的二维数组,我的问题是,例如,如果我想检查4是否有0或11在北,东,南,西作为邻居,它应该返回false。这是我的if 现在我的问题是,由于4的西面和4的北面都超出了界限,它将永远不会返回false。如何优化if条件使其返回false?这是我的二维阵列