tokio_core::net::UdpCodec
を実装しようとしていますが、これはdns_parser::Packet
をdns_parserクレートから作成しています。現在の実装では次のようになります。tokio_core :: net :: UdpCodec関連タイプの生涯
pub struct MdnsCodec;
impl UdpCodec for MdnsCodec {
type In = dns_parser::Packet;
type Out = (SocketAddr, dns_parser::Builder);
fn decode(&mut self, addr: &SocketAddr, buf: &[u8]) -> io::Result<Self::In> {
Ok(dns_parser::Packet::parse(buf).unwrap())
}
fn encode(&mut self, (addr, builder): Self::Out, into: &mut Vec<u8>) -> SocketAddr {
let packet_data = builder.build().unwrap();
into.extend(&packet_data);
addr
}
}
dns_parser::Packetの定義は次のとおりです。
pub struct Packet<'a> {
pub header: Header,
pub questions: Vec<Question<'a>>,
pub answers: Vec<ResourceRecord<'a>>,
pub nameservers: Vec<ResourceRecord<'a>>,
pub additional: Vec<ResourceRecord<'a>>,
pub opt: Option<OptRecord<'a>>,
}
これはとコンパイルに失敗します。
error[E0106]: missing lifetime specifier
--> src/main.rs:18:15
|
18 | type In = dns_parser::Packet;
| ^^^^^^^^^^^^^^^^^^ expected lifetime parameter
error: aborting due to previous error
問題は、私ができることです生涯として何を追加するのか分かりません!私はパケットがbuf引数と同じ寿命を持つ必要があると仮定します。しかし、私はこれを自分自身で正しく表現する方法を理解することはできません。
私はgithubのに非稼働の例をアップロードしていますトリッキー一つだ https://github.com/Fulkerson/mdnsfuturestest