(&mut self, item: Message, dst: &mut BytesMut)
| 136 | |
| 137 | impl Codec { |
| 138 | pub fn encode(&mut self, item: Message, dst: &mut BytesMut) -> Result<(), ProtocolError> { |
| 139 | if self.send_closed() { |
| 140 | return Err(ProtocolError::SendClosed); |
| 141 | } |
| 142 | |
| 143 | let mask = !self.flags.contains(Flags::SERVER); |
| 144 | |
| 145 | match item { |
| 146 | Message::Text(bytes) => Parser::write_message(dst, bytes, OpCode::Text, true, mask), |
| 147 | Message::Binary(bytes) => Parser::write_message(dst, bytes, OpCode::Binary, true, mask), |
| 148 | Message::Ping(bytes) => Parser::write_message(dst, bytes, OpCode::Ping, true, mask), |
| 149 | Message::Pong(bytes) => Parser::write_message(dst, bytes, OpCode::Pong, true, mask), |
| 150 | Message::Close(reason) => { |
| 151 | Parser::write_close(dst, reason, mask); |
| 152 | self.set_send_closed(); |
| 153 | } |
| 154 | Message::Continuation(cont) => match cont { |
| 155 | Item::Continue(_) | Item::Last(_) if !self.flags.contains(Flags::CONTINUATION) => { |
| 156 | return Err(ProtocolError::ContinuationNotStarted); |
| 157 | } |
| 158 | Item::FirstText(ref data) => { |
| 159 | self.try_start_continue()?; |
| 160 | Parser::write_message(dst, data, OpCode::Text, false, mask); |
| 161 | } |
| 162 | Item::FirstBinary(ref data) => { |
| 163 | self.try_start_continue()?; |
| 164 | Parser::write_message(dst, data, OpCode::Binary, false, mask); |
| 165 | } |
| 166 | Item::Continue(ref data) => Parser::write_message(dst, data, OpCode::Continue, false, mask), |
| 167 | Item::Last(ref data) => { |
| 168 | self.flags.remove(Flags::CONTINUATION); |
| 169 | Parser::write_message(dst, data, OpCode::Continue, true, mask); |
| 170 | } |
| 171 | }, |
| 172 | Message::Nop => {} |
| 173 | } |
| 174 | |
| 175 | Ok(()) |
| 176 | } |
| 177 | |
| 178 | pub fn decode(&mut self, src: &mut BytesMut) -> Result<Option<Message>, ProtocolError> { |
| 179 | if self.recv_closed() { |
no test coverage detected