%3Ch1%3ERust%20%E7%B1%BB%E5%9E%8B%E7%8A%B6%E6%80%81%E6%A8%A1%E5%BC%8F%EF%BC%9A%E7%94%A8%E7%B1%BB%E5%9E%8B%E7%B3%BB%E7%BB%9F%E7%BC%96%E7%A0%81%E7%8A%B6%E6%80%81%E6%9C%BA%3C%2Fh1%3E%0A%0A%3Cp%3E%E5%9C%A8%E4%BC%A0%E7%BB%9F%E7%9A%84%E7%8A%B6%E6%80%81%E6%9C%BA%E5%AE%9E%E7%8E%B0%E4%B8%AD%EF%BC%8C%E7%8A%B6%E6%80%81%E8%BD%AC%E6%8D%A2%E7%9A%84%E5%90%88%E6%B3%95%E6%80%A7%E4%BE%9D%E8%B5%96%E8%BF%90%E8%A1%8C%E6%97%B6%E6%A3%80%E6%9F%A5%E2%80%94%E2%80%94%E5%BC%80%E5%8F%91%E8%80%85%E6%89%8B%E5%8A%A8%E9%AA%8C%E8%AF%81%22%E5%BD%93%E5%89%8D%E7%8A%B6%E6%80%81%E6%98%AF%E5%90%A6%E5%85%81%E8%AE%B8%E6%89%A7%E8%A1%8C%E6%9F%90%E6%93%8D%E4%BD%9C%22%EF%BC%8C%E4%B8%80%E6%97%A6%E9%81%97%E6%BC%8F%E6%A3%80%E6%9F%A5%E5%B0%B1%E4%BC%9A%E5%BC%95%E5%85%A5%E9%9A%BE%E4%BB%A5%E8%BF%BD%E8%B8%AA%E7%9A%84%20bug%E3%80%82Rust%20%E7%9A%84%E7%B1%BB%E5%9E%8B%E7%B3%BB%E7%BB%9F%E6%8F%90%E4%BE%9B%E4%BA%86%E4%B8%80%E7%A7%8D%E6%88%AA%E7%84%B6%E4%B8%8D%E5%90%8C%E7%9A%84%E6%80%9D%E8%B7%AF%EF%BC%9A%E5%B0%86%E7%8A%B6%E6%80%81%E4%BF%A1%E6%81%AF%E7%BC%96%E7%A0%81%E8%BF%9B%E7%B1%BB%E5%9E%8B%E6%9C%AC%E8%BA%AB%EF%BC%8C%E8%AE%A9%E7%BC%96%E8%AF%91%E5%99%A8%E5%9C%A8%E7%BC%96%E8%AF%91%E9%98%B6%E6%AE%B5%E5%B0%B1%E6%8B%92%E7%BB%9D%E9%9D%9E%E6%B3%95%E7%9A%84%E7%8A%B6%E6%80%81%E8%BD%AC%E6%8D%A2%E3%80%82%E8%BF%99%E5%B0%B1%E6%98%AF%3Cstrong%3E%E7%B1%BB%E5%9E%8B%E7%8A%B6%E6%80%81%E6%A8%A1%E5%BC%8F%EF%BC%88Typestate%20Pattern%EF%BC%89%3C%2Fstrong%3E%EF%BC%8C%E4%B8%80%E7%A7%8D%E9%9B%B6%E6%88%90%E6%9C%AC%E6%8A%BD%E8%B1%A1%E7%9A%84%E8%AE%BE%E8%AE%A1%E8%8C%83%E5%BC%8F%E3%80%82%3C%2Fp%3E%0A%0A%3Cp%3E%E4%BB%8E%E5%B5%8C%E5%85%A5%E5%BC%8F%E8%AE%BE%E5%A4%87%E7%9A%84%E7%94%B5%E6%BA%90%E7%AE%A1%E7%90%86%E5%88%B0%E7%BD%91%E7%BB%9C%E5%8D%8F%E8%AE%AE%E7%9A%84%E7%8A%B6%E6%80%81%E6%B5%81%E8%BD%AC%EF%BC%8C%E5%86%8D%E5%88%B0%E5%B7%A5%E4%BD%9C%E6%B5%81%E5%BC%95%E6%93%8E%E7%9A%84%E8%8A%82%E7%82%B9%E6%8E%A8%E8%BF%9B%EF%BC%8C%E7%8A%B6%E6%80%81%E6%9C%BA%E6%97%A0%E5%A4%84%E4%B8%8D%E5%9C%A8%E3%80%82%E7%B1%BB%E5%9E%8B%E7%8A%B6%E6%80%81%E6%A8%A1%E5%BC%8F%E5%80%9F%E5%8A%A9%E6%B3%9B%E5%9E%8B%E5%92%8C%E6%89%80%E6%9C%89%E6%9D%83%E6%9C%BA%E5%88%B6%EF%BC%8C%E5%B0%86%E7%8A%B6%E6%80%81%E7%BA%A6%E6%9D%9F%E4%BB%8E%22%E8%BF%90%E8%A1%8C%E6%97%B6%E6%96%AD%E8%A8%80%22%E6%8F%90%E5%8D%87%E4%B8%BA%22%E7%BC%96%E8%AF%91%E6%9C%9F%E4%BF%9D%E8%AF%81%22%EF%BC%8C%E4%BB%8E%E6%A0%B9%E6%9C%AC%E4%B8%8A%E6%B6%88%E9%99%A4%E4%BA%86%E9%9D%9E%E6%B3%95%E7%8A%B6%E6%80%81%E8%BD%AC%E6%8D%A2%E7%9A%84%E5%8F%AF%E8%83%BD%E6%80%A7%E3%80%82%3C%2Fp%3E%0A%0A%3Ch2%3E%E7%B1%BB%E5%9E%8B%E7%8A%B6%E6%80%81%E7%9A%84%E6%A0%B8%E5%BF%83%E6%80%9D%E6%83%B3%3C%2Fh2%3E%0A%0A%3Cp%3E%E7%B1%BB%E5%9E%8B%E7%8A%B6%E6%80%81%E6%A8%A1%E5%BC%8F%E7%9A%84%E6%9C%AC%E8%B4%A8%E5%BE%88%E7%AE%80%E5%8D%95%EF%BC%9A%3Cstrong%3E%E6%8A%8A%E7%8A%B6%E6%80%81%E5%8F%98%E6%88%90%E7%B1%BB%E5%9E%8B%E7%9A%84%E5%8F%82%E6%95%B0%3C%2Fstrong%3E%E3%80%82%E4%B8%80%E4%B8%AA%E5%AF%B9%E8%B1%A1%E7%9A%84%E8%A1%8C%E4%B8%BA%EF%BC%88%E5%8F%AF%E7%94%A8%E6%96%B9%E6%B3%95%E9%9B%86%E5%90%88%EF%BC%89%E7%94%B1%E5%85%B6%E6%B3%9B%E5%9E%8B%E5%8F%82%E6%95%B0%E5%86%B3%E5%AE%9A%EF%BC%8C%E8%BD%AC%E6%8D%A2%E7%8A%B6%E6%80%81%E5%B0%B1%E6%98%AF%E6%B6%88%E8%80%97%E6%97%A7%E5%AF%B9%E8%B1%A1%E3%80%81%E8%BF%94%E5%9B%9E%E6%96%B0%E7%B1%BB%E5%9E%8B%E5%AF%B9%E8%B1%A1%E3%80%82%3C%2Fp%3E%0A%0A%3Cp%3E%E8%AE%BE%E6%83%B3%E4%B8%80%E4%B8%AA%20TCP%20%E8%BF%9E%E6%8E%A5%E7%9A%84%E7%BB%8F%E5%85%B8%E7%8A%B6%E6%80%81%E6%9C%BA%EF%BC%9A%3C%2Fp%3E%0A%0A%3Cul%3E%0A%3Cli%3E%3Ccode%3EClosed%3C%2Fcode%3E%20%E2%86%92%20%3Ccode%3EListen%3C%2Fcode%3E%20%E2%86%92%20%3Ccode%3ESynReceived%3C%2Fcode%3E%20%E2%86%92%20%3Ccode%3EEstablished%3C%2Fcode%3E%20%E2%86%92%20%3Ccode%3EFinWait%3C%2Fcode%3E%20%E2%86%92%20...%3C%2Fli%3E%0A%3C%2Ful%3E%0A%0A%3Cp%3E%E5%A6%82%E6%9E%9C%E7%94%A8%E4%B8%80%E4%B8%AA%E6%99%AE%E9%80%9A%E7%BB%93%E6%9E%84%E4%BD%93%E8%A1%A8%E7%A4%BA%E8%BF%9E%E6%8E%A5%EF%BC%8C%E6%89%80%E6%9C%89%E7%8A%B6%E6%80%81%E8%BD%AC%E6%8D%A2%E9%83%BD%E6%98%AF%E5%8F%AF%E6%89%A7%E8%A1%8C%E7%9A%84%EF%BC%8C%E5%8F%AA%E5%9C%A8%E5%87%BA%E9%94%99%E6%97%B6%20panic%20%E6%88%96%E8%BF%94%E5%9B%9E%20%3Ccode%3EErr%3C%2Fcode%3E%E3%80%82%E8%80%8C%E7%94%A8%E7%B1%BB%E5%9E%8B%E7%8A%B6%E6%80%81%E6%A8%A1%E5%BC%8F%EF%BC%8C%E6%AF%8F%E4%B8%AA%E7%8A%B6%E6%80%81%E6%98%AF%E4%B8%80%E4%B8%AA%E7%8B%AC%E7%AB%8B%E7%B1%BB%E5%9E%8B%EF%BC%8C%E5%8F%AA%E6%9C%89%E5%90%88%E6%B3%95%E7%9A%84%E8%BD%AC%E6%8D%A2%E6%89%8D%E4%BC%9A%E8%A2%AB%E7%BC%96%E8%AF%91%E5%99%A8%E6%94%BE%E8%A1%8C%E3%80%82%3C%2Fp%3E%0A%0A%3Cpre%3E%3Ccode%20class%3D%22language-rust%22%3E%2F%2F%20%E7%BC%96%E8%AF%91%E6%9C%9F%E4%BF%9D%E8%AF%81%E7%9A%84%20TCP%20%E7%8A%B6%E6%80%81%E6%9C%BA%0Astruct%20TcpConn%26lt%3BState%26gt%3B%20%7B%0A%20%20%20%20addr%3A%20SocketAddr%2C%0A%20%20%20%20_state%3A%20PhantomData%26lt%3BState%26gt%3B%2C%0A%7D%0A%0Astruct%20Closed%3B%0Astruct%20Listen%3B%0Astruct%20Established%3B%0A%0Aimpl%20TcpConn%26lt%3BClosed%26gt%3B%20%7B%0A%20%20%20%20fn%20new%28addr%3A%20SocketAddr%29%20-%26gt%3B%20Self%20%7B%20%2F%2A%20...%20%2A%2F%20%7D%0A%20%20%20%20fn%20listen%28self%29%20-%26gt%3B%20TcpConn%26lt%3BListen%26gt%3B%20%7B%20%2F%2A%20...%20%2A%2F%20%7D%0A%7D%0A%0Aimpl%20TcpConn%26lt%3BListen%26gt%3B%20%7B%0A%20%20%20%20fn%20accept%28self%29%20-%26gt%3B%20TcpConn%26lt%3BEstablished%26gt%3B%20%7B%20%2F%2A%20...%20%2A%2F%20%7D%0A%7D%0A%0Aimpl%20TcpConn%26lt%3BEstablished%26gt%3B%20%7B%0A%20%20%20%20fn%20send%28%26amp%3Bmut%20self%2C%20data%3A%20%26amp%3B%5Bu8%5D%29%20-%26gt%3B%20io%3A%3AResult%26lt%3Busize%26gt%3B%20%7B%20%2F%2A%20...%20%2A%2F%20%7D%0A%20%20%20%20fn%20close%28self%29%20-%26gt%3B%20TcpConn%26lt%3BClosed%26gt%3B%20%7B%20%2F%2A%20...%20%2A%2F%20%7D%0A%7D%0A%0A%2F%2F%20%E7%BC%96%E8%AF%91%E9%94%99%E8%AF%AF%EF%BC%81Closed%20%E7%8A%B6%E6%80%81%E4%B8%8B%E4%B8%8D%E8%83%BD%E7%9B%B4%E6%8E%A5%20send%0Alet%20conn%20%3D%20TcpConn%3A%3Anew%28addr%29%3B%0Aconn.send%28b%22hello%22%29%3B%20%2F%2F%20%E2%9D%8C%20%E7%BC%96%E8%AF%91%E5%A4%B1%E8%B4%A5%EF%BC%9ATcpConn%26lt%3BClosed%26gt%3B%20%E6%B2%A1%E6%9C%89%20send%20%E6%96%B9%E6%B3%95%0A%0A%2F%2F%20%E6%AD%A3%E7%A1%AE%E6%B5%81%E7%A8%8B%0Alet%20conn%20%3D%20TcpConn%3A%3Anew%28addr%29.listen%28%29.accept%28%29%3B%0Aconn.send%28b%22hello%22%29%3B%20%2F%2F%20%E2%9C%85%20%E7%BC%96%E8%AF%91%E9%80%9A%E8%BF%87%3C%2Fcode%3E%3C%2Fpre%3E%0A%0A%3Cp%3E%E5%85%B3%E9%94%AE%EF%BC%9A%3Ccode%3EPhantomData%26lt%3BState%26gt%3B%3C%2Fcode%3E%20%E8%AE%A9%E7%8A%B6%E6%80%81%E7%B1%BB%E5%9E%8B%E5%9C%A8%E9%9B%B6%E8%BF%90%E8%A1%8C%E6%97%B6%E5%BC%80%E9%94%80%E4%B8%8B%E5%8F%82%E4%B8%8E%E7%B1%BB%E5%9E%8B%E7%B3%BB%E7%BB%9F%EF%BC%8C%E8%A2%AB%E6%B6%88%E8%B4%B9%E7%9A%84%E6%97%A7%E5%AF%B9%E8%B1%A1%E6%97%A0%E6%B3%95%E5%86%8D%E6%AC%A1%E4%BD%BF%E7%94%A8%EF%BC%88%E6%89%80%E6%9C%89%E6%9D%83%E8%BD%AC%E7%A7%BB%E4%BF%9D%E8%AF%81%EF%BC%89%E3%80%82%3C%2Fp%3E%0A%0A%3Ch2%3E%E7%94%A8%E6%9E%9A%E4%B8%BE%20vs%20%E7%94%A8%E6%B3%9B%E5%9E%8B%EF%BC%9A%E9%80%89%E6%8B%A9%E5%90%88%E9%80%82%E7%9A%84%E6%96%B9%E5%BC%8F%3C%2Fh2%3E%0A%0A%3Cp%3E%E6%9C%80%E7%AE%80%E5%8D%95%E7%9A%84%E7%8A%B6%E6%80%81%E6%9C%BA%E5%AE%9E%E7%8E%B0%E7%94%A8%E6%9E%9A%E4%B8%BE%EF%BC%9A%3C%2Fp%3E%0A%0A%3Cpre%3E%3Ccode%20class%3D%22language-rust%22%3Eenum%20State%20%7B%20Idle%2C%20Running%2C%20Paused%2C%20Stopped%20%7D%0A%0Astruct%20Task%20%7B%0A%20%20%20%20state%3A%20State%2C%0A%7D%0A%0Aimpl%20Task%20%7B%0A%20%20%20%20fn%20start%28%26amp%3Bmut%20self%29%20-%26gt%3B%20Result%26lt%3B%28%29%2C%20Error%26gt%3B%20%7B%0A%20%20%20%20%20%20%20%20if%20self.state%20%21%3D%20State%3A%3AIdle%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20return%20Err%28Error%3A%3AInvalidTransition%29%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20self.state%20%3D%20State%3A%3ARunning%3B%0A%20%20%20%20%20%20%20%20Ok%28%28%29%29%0A%20%20%20%20%7D%0A%7D%3C%2Fcode%3E%3C%2Fpre%3E%0A%0A%3Cp%3E%E8%BF%99%E7%A7%8D%E6%96%B9%E5%BC%8F%E7%AE%80%E5%8D%95%E4%BD%86%E6%9C%89%E6%98%8E%E6%98%BE%E4%B8%8D%E8%B6%B3%EF%BC%9A%3C%2Fp%3E%0A%3Cul%3E%0A%3Cli%3E%E8%BF%90%E8%A1%8C%E6%97%B6%E6%A3%80%E6%9F%A5%E5%B8%A6%E6%9D%A5%E5%88%86%E6%94%AF%E5%BC%80%E9%94%80%3C%2Fli%3E%0A%3Cli%3E%E9%81%97%E6%BC%8F%E6%A3%80%E6%9F%A5%E7%9B%B4%E6%8E%A5%E5%AF%BC%E8%87%B4%E9%9D%9E%E6%B3%95%E7%8A%B6%E6%80%81%3C%2Fli%3E%0A%3Cli%3E%E6%AF%8F%E4%B8%AA%E6%96%B9%E6%B3%95%E9%83%BD%E9%9C%80%E6%89%8B%E5%8A%A8%20match%20%E7%8A%B6%E6%80%81%3C%2Fli%3E%0A%3Cli%3E%E7%BC%96%E8%AF%91%E6%9C%9F%E6%97%A0%E6%B3%95%E5%8F%91%E7%8E%B0%E9%9D%9E%E6%B3%95%E8%B0%83%E7%94%A8%E5%BA%8F%E5%88%97%3C%2Fli%3E%0A%3C%2Ful%3E%0A%0A%3Cp%3E%E7%9B%B8%E6%AF%94%E4%B9%8B%E4%B8%8B%EF%BC%8C%E7%B1%BB%E5%9E%8B%E7%8A%B6%E6%80%81%E6%A8%A1%E5%BC%8F%E5%B0%86%E5%90%88%E6%B3%95%E6%80%A7%E9%AA%8C%E8%AF%81%E6%8F%90%E5%89%8D%E5%88%B0%E7%BC%96%E8%AF%91%E6%9C%9F%EF%BC%8C%E9%9B%B6%E8%BF%90%E8%A1%8C%E6%97%B6%E6%88%90%E6%9C%AC%E3%80%82%E4%BB%A3%E4%BB%B7%E6%98%AF%E7%B1%BB%E5%9E%8B%E5%A4%8D%E6%9D%82%E5%BA%A6%E4%B8%8A%E5%8D%87%EF%BC%8C%E9%80%82%E5%90%88%E7%8A%B6%E6%80%81%E8%BD%AC%E6%8D%A2%E8%B7%AF%E5%BE%84%E6%9C%89%E9%99%90%E4%BD%86%E5%AE%89%E5%85%A8%E6%80%A7%E8%87%B3%E5%85%B3%E9%87%8D%E8%A6%81%E7%9A%84%E5%9C%BA%E6%99%AF%E3%80%82%3C%2Fp%3E%0A%0A%3Ch2%3E%E5%AE%9E%E6%88%98%E6%A1%88%E4%BE%8B%EF%BC%9AHTTP%20%E8%AF%B7%E6%B1%82%E6%9E%84%E5%BB%BA%E5%99%A8%3C%2Fh2%3E%0A%0A%3Cp%3E%E4%B8%80%E4%B8%AA%E5%85%B8%E5%9E%8B%E7%9A%84%E5%BA%94%E7%94%A8%E5%9C%BA%E6%99%AF%E6%98%AF%20HTTP%20%E8%AF%B7%E6%B1%82%E6%9E%84%E5%BB%BA%E5%99%A8%E3%80%82%E6%88%91%E4%BB%AC%E9%9C%80%E8%A6%81%E7%A1%AE%E4%BF%9D%EF%BC%9A%3C%2Fp%3E%0A%3Col%3E%0A%3Cli%3E%E5%BF%85%E9%A1%BB%E8%AE%BE%E7%BD%AE%20URL%20%E6%89%8D%E8%83%BD%E6%9E%84%E5%BB%BA%E8%AF%B7%E6%B1%82%3C%2Fli%3E%0A%3Cli%3E%E5%BF%85%E9%A1%BB%E5%9C%A8%E6%9E%84%E5%BB%BA%E4%B9%8B%E5%90%8E%E6%89%8D%E8%83%BD%E5%8F%91%E9%80%81%3C%2Fli%3E%0A%3Cli%3E%E5%8F%91%E9%80%81%E5%90%8E%E6%89%8D%E8%83%BD%E8%8E%B7%E5%8F%96%E5%93%8D%E5%BA%94%3C%2Fli%3E%0A%3C%2Fol%3E%0A%0A%3Cpre%3E%3Ccode%20class%3D%22language-rust%22%3Euse%20std%3A%3Amarker%3A%3APhantomData%3B%0A%0A%2F%2F%20%E7%8A%B6%E6%80%81%E6%A0%87%E8%AE%B0%E7%B1%BB%E5%9E%8B%0Astruct%20NoUrl%3B%0Astruct%20HasUrl%3B%0Astruct%20Built%3B%0Astruct%20Sent%3B%0A%0Astruct%20HttpRequest%26lt%3BS%26gt%3B%20%7B%0A%20%20%20%20url%3A%20Option%26lt%3BString%26gt%3B%2C%0A%20%20%20%20method%3A%20Method%2C%0A%20%20%20%20headers%3A%20Vec%26lt%3B%28String%2C%20String%29%26gt%3B%2C%0A%20%20%20%20body%3A%20Option%26lt%3BVec%26lt%3Bu8%26gt%3B%26gt%3B%2C%0A%20%20%20%20_state%3A%20PhantomData%26lt%3BS%26gt%3B%2C%0A%7D%0A%0Aimpl%20HttpRequest%26lt%3BNoUrl%26gt%3B%20%7B%0A%20%20%20%20fn%20new%28%29%20-%26gt%3B%20Self%20%7B%0A%20%20%20%20%20%20%20%20HttpRequest%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20url%3A%20None%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20method%3A%20Method%3A%3AGET%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20headers%3A%20Vec%3A%3Anew%28%29%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20body%3A%20None%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20_state%3A%20PhantomData%2C%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%0A%20%20%20%20fn%20url%28self%2C%20url%3A%20%26amp%3Bstr%29%20-%26gt%3B%20HttpRequest%26lt%3BHasUrl%26gt%3B%20%7B%0A%20%20%20%20%20%20%20%20HttpRequest%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20url%3A%20Some%28url.to_string%28%29%29%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20method%3A%20self.method%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20headers%3A%20self.headers%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20body%3A%20self.body%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20_state%3A%20PhantomData%2C%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%7D%0A%0Aimpl%20HttpRequest%26lt%3BHasUrl%26gt%3B%20%7B%0A%20%20%20%20fn%20method%28mut%20self%2C%20method%3A%20Method%29%20-%26gt%3B%20Self%20%7B%0A%20%20%20%20%20%20%20%20self.method%20%3D%20method%3B%0A%20%20%20%20%20%20%20%20self%0A%20%20%20%20%7D%0A%0A%20%20%20%20fn%20header%28mut%20self%2C%20key%3A%20%26amp%3Bstr%2C%20value%3A%20%26amp%3Bstr%29%20-%26gt%3B%20Self%20%7B%0A%20%20%20%20%20%20%20%20self.headers.push%28%28key.to_string%28%29%2C%20value.to_string%28%29%29%29%3B%0A%20%20%20%20%20%20%20%20self%0A%20%20%20%20%7D%0A%0A%20%20%20%20fn%20body%28mut%20self%2C%20data%3A%20Vec%26lt%3Bu8%26gt%3B%29%20-%26gt%3B%20Self%20%7B%0A%20%20%20%20%20%20%20%20self.body%20%3D%20Some%28data%29%3B%0A%20%20%20%20%20%20%20%20self%0A%20%20%20%20%7D%0A%0A%20%20%20%20fn%20build%28self%29%20-%26gt%3B%20HttpRequest%26lt%3BBuilt%26gt%3B%20%7B%0A%20%20%20%20%20%20%20%20HttpRequest%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20url%3A%20self.url%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20method%3A%20self.method%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20headers%3A%20self.headers%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20body%3A%20self.body%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20_state%3A%20PhantomData%2C%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%7D%0A%0Aimpl%20HttpRequest%26lt%3BBuilt%26gt%3B%20%7B%0A%20%20%20%20async%20fn%20send%28self%29%20-%26gt%3B%20io%3A%3AResult%26lt%3BHttpResponse%26gt%3B%20%7B%0A%20%20%20%20%20%20%20%20%2F%2F%20%E5%AE%9E%E9%99%85%E5%8F%91%E9%80%81%E8%AF%B7%E6%B1%82...%0A%20%20%20%20%20%20%20%20Ok%28HttpResponse%20%7B%20status%3A%20200%2C%20body%3A%20vec%21%5B%5D%20%7D%29%0A%20%20%20%20%7D%0A%7D%0A%0A%2F%2F%20%E2%9C%85%20%E6%AD%A3%E7%A1%AE%E4%BD%BF%E7%94%A8%0Alet%20resp%20%3D%20HttpRequest%3A%3Anew%28%29%0A%20%20%20%20.url%28%22https%3A%2F%2Fapi.example.com%2Fdata%22%29%0A%20%20%20%20.header%28%22Authorization%22%2C%20%22Bearer%20xxx%22%29%0A%20%20%20%20.build%28%29%0A%20%20%20%20.send%28%29%0A%20%20%20%20.await%3F%3B%0A%0A%2F%2F%20%E2%9D%8C%20%E7%BC%96%E8%AF%91%E5%A4%B1%E8%B4%A5%EF%BC%9A%E6%9C%AA%E8%AE%BE%E7%BD%AE%20URL%20%E5%B0%B1%20build%28%29%0Alet%20resp%20%3D%20HttpRequest%3A%3Anew%28%29.build%28%29%3B%0A%2F%2F%20%E9%94%99%E8%AF%AF%EF%BC%9AHttpRequest%26lt%3BNoUrl%26gt%3B%20%E6%B2%A1%E6%9C%89%20build%20%E6%96%B9%E6%B3%95%0A%0A%2F%2F%20%E2%9D%8C%20%E7%BC%96%E8%AF%91%E5%A4%B1%E8%B4%A5%EF%BC%9A%E6%9C%AA%20build%20%E5%B0%B1%20send%28%29%0Alet%20resp%20%3D%20HttpRequest%3A%3Anew%28%29%0A%20%20%20%20.url%28%22https%3A%2F%2Fexample.com%22%29%0A%20%20%20%20.send%28%29%3B%0A%2F%2F%20%E9%94%99%E8%AF%AF%EF%BC%9AHttpRequest%26lt%3BHasUrl%26gt%3B%20%E6%B2%A1%E6%9C%89%20send%20%E6%96%B9%E6%B3%95%3C%2Fcode%3E%3C%2Fpre%3E%0A%0A%3Cp%3E%E8%BF%99%E7%A7%8D%E6%A8%A1%E5%BC%8F%E8%AE%A9%E9%9D%9E%E6%B3%95%E7%8A%B6%E6%80%81%E8%BD%AC%E7%A7%BB%E5%9C%A8%E7%BC%96%E8%AF%91%E6%9C%9F%E5%B0%B1%E8%A2%AB%E6%8B%A6%E6%88%AA%EF%BC%8CAPI%20%E7%9A%84%E4%BD%BF%E7%94%A8%E8%80%85%E4%B8%8D%E5%8F%AF%E8%83%BD%E5%86%99%E5%87%BA%E9%94%99%E8%AF%AF%E7%9A%84%E8%B0%83%E7%94%A8%E9%93%BE%E3%80%82%3C%2Fp%3E%0A%0A%3Ch2%3E%E7%8A%B6%E6%80%81%E8%BD%AC%E6%8D%A2%E7%9A%84%E8%BF%90%E8%A1%8C%E6%97%B6%E5%A4%9A%E6%80%81%EF%BC%9Aenum_dispatch%3C%2Fh2%3E%0A%0A%3Cp%3E%E7%B1%BB%E5%9E%8B%E7%8A%B6%E6%80%81%E6%A8%A1%E5%BC%8F%E6%9C%89%E4%B8%80%E4%B8%AA%E9%99%90%E5%88%B6%EF%BC%9A%E6%89%80%E6%9C%89%E7%8A%B6%E6%80%81%E5%9C%A8%E7%BC%96%E8%AF%91%E6%9C%9F%E7%A1%AE%E5%AE%9A%E3%80%82%E5%A6%82%E6%9E%9C%E7%8A%B6%E6%80%81%E9%9C%80%E8%A6%81%E8%BF%90%E8%A1%8C%E6%97%B6%E5%8A%A8%E6%80%81%E9%80%89%E6%8B%A9%EF%BC%8C%E7%BA%AF%E6%B3%9B%E5%9E%8B%E6%96%B9%E6%A1%88%E5%B0%B1%E4%B8%8D%E9%80%82%E7%94%A8%E4%BA%86%E3%80%82%E8%BF%99%E6%97%B6%E5%8F%AF%E4%BB%A5%E7%BB%93%E5%90%88%20%3Ccode%3Eenum_dispatch%3C%2Fcode%3E%20%E5%AE%8F%E5%AE%9E%E7%8E%B0%E5%A4%9A%E6%80%81%EF%BC%9A%3C%2Fp%3E%0A%0A%3Cpre%3E%3Ccode%20class%3D%22language-rust%22%3Eenum%20ConnectionState%20%7B%0A%20%20%20%20Disconnected%28DisconnectedState%29%2C%0A%20%20%20%20Connecting%28ConnectingState%29%2C%0A%20%20%20%20Connected%28ConnectedState%29%2C%0A%20%20%20%20Reconnecting%28ReconnectingState%29%2C%0A%7D%0A%0Aimpl%20ConnectionState%20%7B%0A%20%20%20%20async%20fn%20send%28%26amp%3Bmut%20self%2C%20msg%3A%20Message%29%20-%26gt%3B%20Result%26lt%3B%28%29%2C%20Error%26gt%3B%20%7B%0A%20%20%20%20%20%20%20%20match%20self%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20Self%3A%3AConnected%28s%29%20%3D%26gt%3B%20s.send%28msg%29.await%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20_%20%3D%26gt%3B%20Err%28Error%3A%3ANotConnected%29%2C%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%0A%20%20%20%20fn%20transition%28self%29%20-%26gt%3B%20Self%20%7B%0A%20%20%20%20%20%20%20%20match%20self%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20Self%3A%3ADisconnected%28s%29%20%3D%26gt%3B%20Self%3A%3AConnecting%28s.into_connecting%28%29%29%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20Self%3A%3AConnecting%28s%29%20%3D%26gt%3B%20Self%3A%3AConnected%28s.into_connected%28%29%29%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20Self%3A%3AConnected%28s%29%20%3D%26gt%3B%20Self%3A%3AConnected%28s%29%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20Self%3A%3AReconnecting%28s%29%20%3D%26gt%3B%20Self%3A%3AConnecting%28s.into_connecting%28%29%29%2C%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%7D%3C%2Fcode%3E%3C%2Fpre%3E%0A%0A%3Cp%3E%E6%B7%B7%E5%90%88%E7%AD%96%E7%95%A5%EF%BC%9A%E5%9C%A8%E6%A8%A1%E5%9D%97%E5%86%85%E9%83%A8%E4%BD%BF%E7%94%A8%E7%B2%BE%E7%A1%AE%E7%9A%84%E7%B1%BB%E5%9E%8B%E7%8A%B6%E6%80%81%E4%BF%9D%E8%AF%81%E8%BD%AC%E6%8D%A2%E5%AE%89%E5%85%A8%EF%BC%8C%E5%AF%B9%E5%A4%96%E6%9A%B4%E9%9C%B2%E4%B8%80%E4%B8%AA%E7%BB%9F%E4%B8%80%E7%9A%84%E6%9E%9A%E4%B8%BE%E7%B1%BB%E5%9E%8B%E6%8F%90%E4%BE%9B%E7%81%B5%E6%B4%BB%E6%80%A7%E3%80%82%3C%2Fp%3E%0A%0A%3Ch2%3E%E9%AB%98%E7%BA%A7%E6%8A%80%E5%B7%A7%EF%BC%9A%E6%B3%9B%E5%9E%8B%E7%BA%A6%E6%9D%9F%E4%B8%8E%E7%8A%B6%E6%80%81%E9%97%A8%E6%8E%A7%3C%2Fh2%3E%0A%0A%3Cp%3E%E5%88%A9%E7%94%A8%20trait%20bound%EF%BC%8C%E5%8F%AF%E4%BB%A5%E5%AF%B9%E7%8A%B6%E6%80%81%E6%96%BD%E5%8A%A0%E6%9B%B4%E7%B2%BE%E7%BB%86%E7%9A%84%E7%BA%A6%E6%9D%9F%EF%BC%9A%3C%2Fp%3E%0A%0A%3Cpre%3E%3Ccode%20class%3D%22language-rust%22%3Etrait%20ReadOnly%20%7B%7D%0Atrait%20ReadWrite%20%7B%7D%0Atrait%20Sealed%20%7B%7D%0A%0Astruct%20ReadOnlyMode%3B%0Astruct%20ReadWriteMode%3B%0Astruct%20SealedMode%3B%0A%0Aimpl%20ReadOnly%20for%20ReadOnlyMode%20%7B%7D%0Aimpl%20ReadOnly%20for%20ReadWriteMode%20%7B%7D%0Aimpl%20ReadWrite%20for%20ReadWriteMode%20%7B%7D%0Aimpl%20Sealed%20for%20SealedMode%20%7B%7D%0A%0Astruct%20Vault%26lt%3BS%26gt%3B%20%7B%0A%20%20%20%20data%3A%20Vec%26lt%3Bu8%26gt%3B%2C%0A%20%20%20%20_state%3A%20PhantomData%26lt%3BS%26gt%3B%2C%0A%7D%0A%0A%2F%2F%20%E5%8F%AA%E6%9C%89%E8%AF%BB%E6%9D%83%E9%99%90%E7%9A%84%E7%8A%B6%E6%80%81%E5%8F%AF%E4%BB%A5%E8%B0%83%E7%94%A8%20read%0Aimpl%26lt%3BS%3A%20ReadOnly%26gt%3B%20Vault%26lt%3BS%26gt%3B%20%7B%0A%20%20%20%20fn%20read%28%26amp%3Bself%29%20-%26gt%3B%20%26amp%3B%5Bu8%5D%20%7B%0A%20%20%20%20%20%20%20%20%26amp%3Bself.data%0A%20%20%20%20%7D%0A%7D%0A%0A%2F%2F%20%E8%AF%BB%E5%86%99%E6%9D%83%E9%99%90%E7%9A%84%E7%8A%B6%E6%80%81%E5%8F%AF%E4%BB%A5%E8%B0%83%E7%94%A8%20write%20%E5%92%8C%20read%0Aimpl%26lt%3BS%3A%20ReadWrite%26gt%3B%20Vault%26lt%3BS%26gt%3B%20%7B%0A%20%20%20%20fn%20write%28%26amp%3Bmut%20self%2C%20offset%3A%20usize%2C%20data%3A%20%26amp%3B%5Bu8%5D%29%20%7B%0A%20%20%20%20%20%20%20%20self.data%5Boffset..offset%2Bdata.len%28%29%5D.copy_from_slice%28data%29%3B%0A%20%20%20%20%7D%0A%7D%0A%0A%2F%2F%20%E5%AF%86%E5%B0%81%E7%8A%B6%E6%80%81%E5%8F%AA%E8%83%BD%E9%94%80%E6%AF%81%EF%BC%8C%E4%B8%8D%E5%8F%AF%E8%AF%BB%E4%B8%8D%E5%8F%AF%E5%86%99%0Aimpl%20Vault%26lt%3BSealedMode%26gt%3B%20%7B%0A%20%20%20%20fn%20destroy%28self%29%20%7B%0A%20%20%20%20%20%20%20%20drop%28self.data%29%3B%0A%20%20%20%20%20%20%20%20std%3A%3Amem%3A%3Aforget%28self%29%3B%0A%20%20%20%20%7D%0A%7D%0A%0Aimpl%20Vault%26lt%3BReadOnlyMode%26gt%3B%20%7B%0A%20%20%20%20fn%20upgrade%28self%2C%20key%3A%20%26amp%3B%5Bu8%5D%29%20-%26gt%3B%20Option%26lt%3BVault%26lt%3BReadWriteMode%26gt%3B%26gt%3B%20%7B%0A%20%20%20%20%20%20%20%20if%20verify_key%28key%29%20%7B%20%2F%2A%20%E5%8D%87%E7%BA%A7%E9%80%BB%E8%BE%91%20%2A%2F%20%7D%0A%20%20%20%20%20%20%20%20Some%28Vault%20%7B%20data%3A%20self.data%2C%20_state%3A%20PhantomData%20%7D%29%0A%20%20%20%20%7D%0A%7D%0A%0Aimpl%20Vault%26lt%3BReadWriteMode%26gt%3B%20%7B%0A%20%20%20%20fn%20downgrade%28self%29%20-%26gt%3B%20Vault%26lt%3BReadOnlyMode%26gt%3B%20%7B%0A%20%20%20%20%20%20%20%20Vault%20%7B%20data%3A%20self.data%2C%20_state%3A%20PhantomData%20%7D%0A%20%20%20%20%7D%0A%20%20%20%20%0A%20%20%20%20fn%20seal%28self%29%20-%26gt%3B%20Vault%26lt%3BSealedMode%26gt%3B%20%7B%0A%20%20%20%20%20%20%20%20Vault%20%7B%20data%3A%20self.data%2C%20_state%3A%20PhantomData%20%7D%0A%20%20%20%20%7D%0A%7D%3C%2Fcode%3E%3C%2Fpre%3E%0A%0A%3Cp%3E%E8%BF%99%E7%A7%8D%E6%A8%A1%E5%BC%8F%E4%B8%8E%20Rust%20%E7%9A%84%E6%9D%83%E9%99%90%E7%B3%BB%E7%BB%9F%E5%A4%A9%E7%84%B6%E5%90%BB%E5%90%88%E2%80%94%E2%80%94%3Ccode%3EReadOnly%3C%2Fcode%3E%E3%80%81%3Ccode%3EReadWrite%3C%2Fcode%3E%E3%80%81%3Ccode%3ESealed%3C%2Fcode%3E%20%E4%B8%89%E4%B8%AA%E7%8A%B6%E6%80%81%E5%BD%A2%E6%88%90%E4%B8%80%E6%9D%A1%E5%8D%95%E5%90%91%E7%9A%84%E6%9D%83%E9%99%90%E9%80%92%E5%87%8F%E9%93%BE%EF%BC%8C%E5%8D%87%E7%BA%A7%E9%9C%80%E8%A6%81%E9%AA%8C%E8%AF%81%E5%AF%86%E9%92%A5%EF%BC%8C%E9%99%8D%E7%BA%A7%E5%92%8C%E5%AF%86%E5%B0%81%E6%98%AF%E5%8D%95%E5%90%91%E4%B8%8D%E5%8F%AF%E9%80%86%E7%9A%84%E3%80%82%3C%2Fp%3E%0A%0A%3Ch2%3E%E7%BC%96%E8%AF%91%E6%88%90%E6%9C%AC%E4%B8%8E%E6%9D%83%E8%A1%A1%3C%2Fh2%3E%0A%0A%3Cp%3E%E7%B1%BB%E5%9E%8B%E7%8A%B6%E6%80%81%E6%A8%A1%E5%BC%8F%E5%B9%B6%E9%9D%9E%E9%93%B6%E5%BC%B9%EF%BC%8C%E9%9C%80%E8%A6%81%E6%9D%83%E8%A1%A1%EF%BC%9A%3C%2Fp%3E%0A%0A%3Cul%3E%0A%3Cli%3E%3Cstrong%3E%E7%BC%96%E8%AF%91%E6%97%B6%E9%97%B4%3C%2Fstrong%3E%EF%BC%9A%E6%AF%8F%E7%A7%8D%E7%8A%B6%E6%80%81%E7%BB%84%E5%90%88%E9%83%BD%E4%BC%9A%E7%94%9F%E6%88%90%E7%8B%AC%E7%AB%8B%E7%9A%84%E5%8D%95%E6%80%81%E5%8C%96%E4%BB%A3%E7%A0%81%EF%BC%8C%E7%8A%B6%E6%80%81%E7%B1%BB%E5%9E%8B%E5%92%8C%E8%BD%AC%E6%8D%A2%E8%BE%83%E5%A4%9A%E6%97%B6%E7%BC%96%E8%AF%91%E6%97%B6%E9%97%B4%E5%A2%9E%E5%8A%A0%3C%2Fli%3E%0A%3Cli%3E%3Cstrong%3E%E4%BA%8C%E8%BF%9B%E5%88%B6%E4%BD%93%E7%A7%AF%3C%2Fstrong%3E%EF%BC%9A%E6%AF%8F%E4%B8%AA%E6%B3%9B%E5%9E%8B%E5%AE%9E%E4%BE%8B%E5%8C%96%E4%BA%A7%E7%94%9F%E7%8B%AC%E7%AB%8B%E4%BB%A3%E7%A0%81%EF%BC%8C%E4%BD%86%E4%BC%98%E5%8C%96%E5%99%A8%E9%80%9A%E5%B8%B8%E8%83%BD%E5%86%85%E8%81%94%E6%B6%88%E9%99%A4%E5%A4%A7%E5%A4%9A%E6%95%B0%E5%BC%80%E9%94%80%3C%2Fli%3E%0A%3Cli%3E%3Cstrong%3EAPI%20%E5%A4%8D%E6%9D%82%E5%BA%A6%3C%2Fstrong%3E%EF%BC%9A%E4%B8%8B%E6%B8%B8%E7%94%A8%E6%88%B7%E9%9D%A2%E5%AF%B9%E6%9B%B4%E5%A4%9A%E7%B1%BB%E5%9E%8B%E5%8F%82%E6%95%B0%EF%BC%8C%E6%96%87%E6%A1%A3%E5%92%8C%E9%94%99%E8%AF%AF%E4%BF%A1%E6%81%AF%E7%9A%84%E5%8F%AF%E8%AF%BB%E6%80%A7%E4%B8%8B%E9%99%8D%3C%2Fli%3E%0A%3Cli%3E%3Cstrong%3E%E7%81%B5%E6%B4%BB%E6%80%A7%E9%99%90%E5%88%B6%3C%2Fstrong%3E%EF%BC%9A%E8%BF%90%E8%A1%8C%E6%97%B6%E5%8A%A8%E6%80%81%E5%88%87%E6%8D%A2%E7%8A%B6%E6%80%81%E6%97%A0%E6%B3%95%E7%94%A8%E7%BA%AF%E6%B3%9B%E5%9E%8B%E5%AE%9E%E7%8E%B0%EF%BC%8C%E9%9C%80%E5%9B%9E%E9%80%80%E5%88%B0%E6%9E%9A%E4%B8%BE%3C%2Fli%3E%0A%3C%2Ful%3E%0A%0A%3Cp%3E%3Cstrong%3E%E9%80%82%E5%90%88%E4%BD%BF%E7%94%A8%E7%B1%BB%E5%9E%8B%E7%8A%B6%E6%80%81%E7%9A%84%E5%9C%BA%E6%99%AF%3C%2Fstrong%3E%EF%BC%9A%3C%2Fp%3E%0A%3Cul%3E%0A%3Cli%3E%E5%8D%8F%E8%AE%AE%E7%8A%B6%E6%80%81%E6%9C%BA%EF%BC%88TCP%E3%80%81TLS%E3%80%81%E6%95%B0%E6%8D%AE%E5%BA%93%E8%BF%9E%E6%8E%A5%EF%BC%89%3C%2Fli%3E%0A%3Cli%3E%E8%AE%BE%E5%A4%87%E9%A9%B1%E5%8A%A8%EF%BC%88%E7%94%B5%E6%BA%90%E7%8A%B6%E6%80%81%E3%80%81DMA%20%E4%BC%A0%E8%BE%93%E6%A8%A1%E5%BC%8F%EF%BC%89%3C%2Fli%3E%0A%3Cli%3E%E6%96%87%E4%BB%B6%2F%E8%B5%84%E6%BA%90%E7%94%9F%E5%91%BD%E5%91%A8%E6%9C%9F%EF%BC%88%E6%89%93%E5%BC%80%20%E2%86%92%20%E8%AF%BB%E5%86%99%20%E2%86%92%20%E5%85%B3%E9%97%AD%EF%BC%89%3C%2Fli%3E%0A%3Cli%3E%E5%B7%A5%E4%BD%9C%E6%B5%81%E5%BC%95%E6%93%8E%EF%BC%88%E4%BB%BB%E5%8A%A1%E5%AE%A1%E6%89%B9%E6%B5%81%E6%B0%B4%E7%BA%BF%EF%BC%89%3C%2Fli%3E%0A%3Cli%3E%E5%8A%A0%E5%AF%86%E6%93%8D%E4%BD%9C%EF%BC%88%E5%AF%86%E9%92%A5%E8%A7%A3%E9%94%81%E5%8A%A0%E5%AF%86%E8%A7%A3%E5%AF%86%E9%94%81%E5%AE%9A%EF%BC%89%3C%2Fli%3E%0A%3C%2Ful%3E%0A%0A%3Ch2%3E%E4%B8%8E%20Rust%20%E5%BC%82%E6%AD%A5%E6%A8%A1%E5%9E%8B%E7%9A%84%E7%BB%93%E5%90%88%3C%2Fh2%3E%0A%0A%3Cp%3E%E7%B1%BB%E5%9E%8B%E7%8A%B6%E6%80%81%E6%A8%A1%E5%BC%8F%E5%8F%AF%E4%BB%A5%E5%92%8C%20async%2Fawait%20%E7%BB%93%E5%90%88%EF%BC%8C%E7%AE%A1%E7%90%86%E5%BC%82%E6%AD%A5%E6%93%8D%E4%BD%9C%E7%9A%84%E6%89%A7%E8%A1%8C%E9%A1%BA%E5%BA%8F%EF%BC%9A%3C%2Fp%3E%0A%0A%3Cpre%3E%3Ccode%20class%3D%22language-rust%22%3Estruct%20AsyncPipeline%26lt%3BStage%26gt%3B%20%7B%0A%20%20%20%20data%3A%20Vec%26lt%3Bu8%26gt%3B%2C%0A%20%20%20%20_state%3A%20PhantomData%26lt%3BStage%26gt%3B%2C%0A%7D%0A%0Astruct%20Raw%3B%0Astruct%20Decoded%3B%0Astruct%20Parsed%3B%0Astruct%20Validated%3B%0A%0Aimpl%20AsyncPipeline%26lt%3BRaw%26gt%3B%20%7B%0A%20%20%20%20fn%20new%28data%3A%20Vec%26lt%3Bu8%26gt%3B%29%20-%26gt%3B%20Self%20%7B%20%2F%2A%20...%20%2A%2F%20%7D%0A%20%20%20%20%0A%20%20%20%20async%20fn%20decode%28self%29%20-%26gt%3B%20Result%26lt%3BAsyncPipeline%26lt%3BDecoded%26gt%3B%26gt%3B%20%7B%0A%20%20%20%20%20%20%20%20%2F%2F%20%E5%BC%82%E6%AD%A5%E8%A7%A3%E7%A0%81%0A%20%20%20%20%20%20%20%20Ok%28AsyncPipeline%20%7B%20data%3A%20decoded%2C%20_state%3A%20PhantomData%20%7D%29%0A%20%20%20%20%7D%0A%7D%0A%0Aimpl%20AsyncPipeline%26lt%3BDecoded%26gt%3B%20%7B%0A%20%20%20%20async%20fn%20parse%28self%29%20-%26gt%3B%20Result%26lt%3BAsyncPipeline%26lt%3BParsed%26gt%3B%26gt%3B%20%7B%0A%20%20%20%20%20%20%20%20Ok%28AsyncPipeline%20%7B%20data%3A%20parsed%2C%20_state%3A%20PhantomData%20%7D%29%0A%20%20%20%20%7D%0A%7D%0A%0Aimpl%20AsyncPipeline%26lt%3BParsed%26gt%3B%20%7B%0A%20%20%20%20async%20fn%20validate%28self%29%20-%26gt%3B%20Result%26lt%3BAsyncPipeline%26lt%3BValidated%26gt%3B%26gt%3B%20%7B%0A%20%20%20%20%20%20%20%20Ok%28AsyncPipeline%20%7B%20data%3A%20validated%2C%20_state%3A%20PhantomData%20%7D%29%0A%20%20%20%20%7D%0A%7D%0A%0Aimpl%20AsyncPipeline%26lt%3BValidated%26gt%3B%20%7B%0A%20%20%20%20async%20fn%20finalize%28self%29%20-%26gt%3B%20Result%26lt%3BOutput%26gt%3B%20%7B%20%2F%2A%20...%20%2A%2F%20%7D%0A%7D%0A%0A%2F%2F%20%E7%BC%96%E7%A0%81%E8%B0%83%E7%94%A8%E9%93%BE%EF%BC%9A%E7%BC%96%E8%AF%91%E6%9C%9F%E4%BF%9D%E8%AF%81%E6%89%A7%E8%A1%8C%E9%A1%BA%E5%BA%8F%0Alet%20result%20%3D%20AsyncPipeline%3A%3Anew%28raw_bytes%29%0A%20%20%20%20.decode%28%29.await%3F%0A%20%20%20%20.parse%28%29.await%3F%0A%20%20%20%20.validate%28%29.await%3F%0A%20%20%20%20.finalize%28%29.await%3F%3B%3C%2Fcode%3E%3C%2Fpre%3E%0A%0A%3Cp%3E%E6%B3%A8%E6%84%8F%E6%AF%8F%E4%B8%AA%20%3Ccode%3Eawait%3C%2Fcode%3E%20%E8%99%BD%E7%84%B6%E6%9A%82%E5%81%9C%E6%89%A7%E8%A1%8C%EF%BC%8C%E4%BD%86%3Cstrong%3E%E7%8A%B6%E6%80%81%E7%B1%BB%E5%9E%8B%E5%9C%A8%E7%BC%96%E8%AF%91%E6%9C%9F%E7%A1%AE%E5%AE%9A%3C%2Fstrong%3E%E2%80%94%E2%80%94Rust%20%E7%9A%84%20async%20%E7%8A%B6%E6%80%81%E6%9C%BA%E6%8C%89%20%3Ccode%3EStage%3C%2Fcode%3E%20%E5%8F%82%E6%95%B0%E8%A2%AB%E6%8D%95%E8%8E%B7%E4%B8%BA%E4%B8%8D%E5%90%8C%E7%9A%84%20Future%20%E7%B1%BB%E5%9E%8B%EF%BC%8C%E9%9D%9E%E6%B3%95%E8%B0%83%E7%94%A8%E9%93%BE%E4%B8%8D%E4%BC%9A%E9%80%9A%E8%BF%87%E7%BC%96%E8%AF%91%E3%80%82%3C%2Fp%3E%0A%0A%3Ch2%3E%E6%80%BB%E7%BB%93%3C%2Fh2%3E%0A%0A%3Cp%3E%E7%B1%BB%E5%9E%8B%E7%8A%B6%E6%80%81%E6%A8%A1%E5%BC%8F%E6%98%AF%20Rust%20%E6%89%80%E6%9C%89%E6%9D%83%E7%B3%BB%E7%BB%9F%E5%92%8C%E6%B3%9B%E5%9E%8B%E8%83%BD%E5%8A%9B%E7%9A%84%E4%B8%80%E4%B8%AA%E4%BC%98%E9%9B%85%E5%BA%94%E7%94%A8%E3%80%82%E6%A0%B8%E5%BF%83%E8%A6%81%E7%82%B9%EF%BC%9A%3C%2Fp%3E%0A%0A%3Col%3E%0A%3Cli%3E%E7%94%A8%20%3Ccode%3EPhantomData%26lt%3BT%26gt%3B%3C%2Fcode%3E%20%E5%B0%86%E7%8A%B6%E6%80%81%E4%BF%A1%E6%81%AF%E7%BC%96%E7%A0%81%E4%B8%BA%E7%BC%96%E8%AF%91%E6%9C%9F%E7%B1%BB%E5%9E%8B%3C%2Fli%3E%0A%3Cli%3E%E6%B6%88%E8%B4%B9%E6%97%A7%E5%AF%B9%E8%B1%A1%E8%BF%94%E5%9B%9E%E6%96%B0%E7%B1%BB%E5%9E%8B%EF%BC%8C%E5%88%A9%E7%94%A8%E6%89%80%E6%9C%89%E6%9D%83%E8%BD%AC%E7%A7%BB%E4%BF%9D%E8%AF%81%E7%8A%B6%E6%80%81%E5%8D%95%E5%90%91%E8%BD%AC%E6%8D%A2%3C%2Fli%3E%0A%3Cli%3E%E6%AF%8F%E4%B8%AA%E7%8A%B6%E6%80%81%E7%B1%BB%E5%9E%8B%E5%8F%AA%E5%AE%9E%E7%8E%B0%E5%90%88%E6%B3%95%E7%9A%84%E6%96%B9%E6%B3%95%EF%BC%8C%E9%9D%9E%E6%B3%95%E6%93%8D%E4%BD%9C%E5%9C%A8%E7%BC%96%E8%AF%91%E6%9C%9F%E8%A2%AB%E6%8B%A6%E6%88%AA%3C%2Fli%3E%0A%3Cli%3E%E7%BB%93%E5%90%88%20trait%20bound%20%E5%AE%9E%E7%8E%B0%E7%8A%B6%E6%80%81%E7%9A%84%E6%9D%83%E9%99%90%E5%88%86%E7%BA%A7%E5%92%8C%E7%BA%A6%E6%9D%9F%3C%2Fli%3E%0A%3Cli%3E%E9%80%82%E5%90%88%E7%8A%B6%E6%80%81%E8%BD%AC%E6%8D%A2%E6%9C%89%E9%99%90%E4%BD%86%E5%AE%89%E5%85%A8%E6%80%A7%E8%A6%81%E6%B1%82%E9%AB%98%E7%9A%84%E5%9C%BA%E6%99%AF%3C%2Fli%3E%0A%3C%2Fol%3E%0A%0A%3Cp%3E%E4%B8%8E%E8%BF%90%E8%A1%8C%E6%97%B6%E6%A3%80%E6%9F%A5%E7%9B%B8%E6%AF%94%EF%BC%8C%E7%B1%BB%E5%9E%8B%E7%8A%B6%E6%80%81%E6%A8%A1%E5%BC%8F%E5%B0%86%E9%94%99%E8%AF%AF%E5%8F%91%E7%8E%B0%E6%97%B6%E6%9C%BA%E4%BB%8E%E8%BF%90%E8%A1%8C%E6%97%B6%E6%8F%90%E5%89%8D%E5%88%B0%E7%BC%96%E8%AF%91%E6%9C%9F%EF%BC%8C%E8%99%BD%E7%84%B6%E5%A2%9E%E5%8A%A0%E4%BA%86%E7%B1%BB%E5%9E%8B%E5%A4%8D%E6%9D%82%E5%BA%A6%EF%BC%8C%E4%BD%86%E5%9C%A8%E7%B3%BB%E7%BB%9F%E7%BC%96%E7%A8%8B%E3%80%81%E5%B5%8C%E5%85%A5%E5%BC%8F%E3%80%81%E7%BD%91%E7%BB%9C%E5%8D%8F%E8%AE%AE%E7%AD%89%E9%A2%86%E5%9F%9F%E5%B8%A6%E6%9D%A5%E7%9A%84%E5%AE%89%E5%85%A8%E4%BF%9D%E9%9A%9C%E6%98%AF%E5%80%BC%E5%BE%97%E7%9A%84%E3%80%82%E6%AD%A3%E5%A6%82%20Rust%20%E7%9A%84%E6%A0%B8%E5%BF%83%E5%93%B2%E5%AD%A6%EF%BC%9A%3Cem%3E%22If%20it%20compiles%2C%20it%20works.%22%3C%2Fem%3E%E2%80%94%E2%80%94%E7%B1%BB%E5%9E%8B%E7%8A%B6%E6%80%81%E6%A8%A1%E5%BC%8F%E8%AE%A9%22%E7%BC%96%E8%AF%91%E9%80%9A%E8%BF%87%22%E6%84%8F%E5%91%B3%E7%9D%80%E6%9B%B4%E5%A4%9A%E3%80%82%3C%2Fp%3E%0A
点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论
立即
投稿

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部