1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81
extern crate bytes; use crate::result::RSocketResult; use crate::frame::{Body, Frame, PayloadSupport, Writeable, FLAG_METADATA}; use bytes::{BufMut, ByteOrder, Bytes, BytesMut}; #[derive(Debug, Clone)] pub struct RequestFNF { metadata: Option<Bytes>, data: Option<Bytes>, } pub struct RequestFNFBuilder { stream_id: u32, flag: u16, value: RequestFNF, } impl RequestFNFBuilder { fn new(stream_id: u32, flag: u16) -> RequestFNFBuilder { RequestFNFBuilder { stream_id: stream_id, flag: flag, value: RequestFNF { metadata: None, data: None, }, } } pub fn build(&mut self) -> Frame { Frame::new( self.stream_id, Body::RequestFNF(self.value.clone()), self.flag, ) } pub fn set_metadata(&mut self, metadata: Bytes) -> &mut RequestFNFBuilder { self.value.metadata = Some(metadata); self.flag |= FLAG_METADATA; self } pub fn set_data(&mut self, data: Bytes) -> &mut RequestFNFBuilder { self.value.data = Some(data); self } } impl RequestFNF { pub fn decode(flag: u16, bf: &mut BytesMut) -> RSocketResult<RequestFNF> { let (m, d) = PayloadSupport::read(flag, bf); Ok(RequestFNF { metadata: m, data: d, }) } pub fn builder(stream_id: u32, flag: u16) -> RequestFNFBuilder { RequestFNFBuilder::new(stream_id, flag) } pub fn get_metadata(&self) -> Option<Bytes> { self.metadata.clone() } pub fn get_data(&self) -> Option<Bytes> { self.data.clone() } } impl Writeable for RequestFNF { fn write_to(&self, bf: &mut BytesMut) { PayloadSupport::write(bf, &self.metadata, &self.data); } fn len(&self) -> u32 { PayloadSupport::len(&self.metadata, &self.data) } }