Skip to content

Commit 9542648

Browse files
committed
redesign u24.
1 parent 08c5679 commit 9542648

File tree

25 files changed

+333
-373
lines changed

25 files changed

+333
-373
lines changed

rsocket-messaging/src/builder.rs

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
use super::requester::Requester;
2+
use rsocket_rust::extension::MimeType;
3+
4+
pub struct RequesterBuilder {
5+
data_mime_type: MimeType,
6+
route: Option<String>,
7+
data: Option<Vec<u8>>,
8+
}
9+
10+
impl Default for RequesterBuilder {
11+
fn default() -> Self {
12+
Self {
13+
data_mime_type: MimeType::APPLICATION_JSON,
14+
route: None,
15+
data: None,
16+
}
17+
}
18+
}
19+
20+
impl RequesterBuilder {
21+
pub fn data_mime_type<I>(mut self, mime_type: I) -> Self
22+
where
23+
I: Into<MimeType>,
24+
{
25+
self.data_mime_type = mime_type.into();
26+
self
27+
}
28+
29+
pub fn setup_route<I>(mut self, route: I) -> Self
30+
where
31+
I: Into<String>,
32+
{
33+
self.route = Some(route.into());
34+
self
35+
}
36+
37+
pub fn setup_data<D>(mut self, data: D) -> Self
38+
where
39+
D: Into<Vec<u8>>,
40+
{
41+
self.data = Some(data.into());
42+
self
43+
}
44+
45+
pub fn build(self) -> Requester {
46+
todo!("build requester")
47+
}
48+
}

rsocket-messaging/src/lib.rs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
1+
mod builder;
12
mod misc;
23
mod requester;
34

4-
pub use requester::{RequestSpec, Requester, RequesterBuilder};
5+
pub use builder::RequesterBuilder;
6+
pub use requester::{RequestSpec, Requester};

rsocket-messaging/src/misc.rs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
use bytes::{BufMut, BytesMut};
2-
use rsocket_rust::extension::{MimeType, MIME_APPLICATION_CBOR, MIME_APPLICATION_JSON};
2+
use rsocket_rust::extension::MimeType;
33
use serde::{Deserialize, Serialize};
44
use std::error::Error;
55

@@ -8,8 +8,8 @@ where
88
T: Deserialize<'a>,
99
{
1010
match *mime_type {
11-
MIME_APPLICATION_JSON => Ok(serde_json::from_slice(raw)?),
12-
MIME_APPLICATION_CBOR => Ok(serde_cbor::from_slice(raw)?),
11+
MimeType::APPLICATION_JSON => Ok(serde_json::from_slice(raw)?),
12+
MimeType::APPLICATION_CBOR => Ok(serde_cbor::from_slice(raw)?),
1313
_ => panic!(""),
1414
}
1515
}
@@ -23,12 +23,12 @@ where
2323
T: Sized + Serialize,
2424
{
2525
match *mime_type {
26-
MIME_APPLICATION_JSON => {
26+
MimeType::APPLICATION_JSON => {
2727
let raw = serde_json::to_vec(data)?;
2828
bf.put_slice(&raw[..]);
2929
Ok(())
3030
}
31-
MIME_APPLICATION_CBOR => {
31+
MimeType::APPLICATION_CBOR => {
3232
let raw = serde_cbor::to_vec(data)?;
3333
bf.put_slice(&raw[..]);
3434
Ok(())

rsocket-messaging/src/requester.rs

Lines changed: 17 additions & 81 deletions
Original file line numberDiff line numberDiff line change
@@ -1,115 +1,51 @@
11
use super::misc::{marshal, unmarshal};
22
use bytes::BytesMut;
33
use rsocket_rust::error::RSocketError;
4-
use rsocket_rust::extension::{
5-
CompositeMetadata, MimeType, RoutingMetadata, MIME_APPLICATION_JSON,
6-
MIME_MESSAGE_X_RSOCKET_ROUTING_V0,
7-
};
4+
use rsocket_rust::extension::{CompositeMetadata, MimeType, RoutingMetadata};
85
use rsocket_rust::prelude::*;
96
use rsocket_rust::utils::Writeable;
107
use serde::{Deserialize, Serialize};
118
use std::collections::LinkedList;
129
use std::error::Error;
10+
use std::sync::Arc;
1311

14-
pub struct RequesterBuilder {
15-
data_mime_type: MimeType,
16-
route: Option<String>,
17-
data: Option<Vec<u8>>,
18-
}
19-
20-
impl Default for RequesterBuilder {
21-
fn default() -> Self {
22-
Self {
23-
data_mime_type: MIME_APPLICATION_JSON,
24-
route: None,
25-
data: None,
26-
}
27-
}
28-
}
29-
30-
impl RequesterBuilder {
31-
pub fn data_mime_type<I>(mut self, mime_type: I) -> Self
32-
where
33-
I: Into<MimeType>,
34-
{
35-
self.data_mime_type = mime_type.into();
36-
self
37-
}
38-
39-
pub fn setup_route<I>(mut self, route: I) -> Self
40-
where
41-
I: Into<String>,
42-
{
43-
self.route = Some(route.into());
44-
self
45-
}
46-
47-
pub fn setup_data<D>(mut self, data: D) -> Self
48-
where
49-
D: Into<Vec<u8>>,
50-
{
51-
self.data = Some(data.into());
52-
self
53-
}
54-
55-
pub fn build<S>(self) -> Requester<S>
56-
where
57-
S: RSocket + Clone,
58-
{
59-
todo!("build requester")
60-
}
12+
pub struct Requester {
13+
rsocket: Arc<Box<dyn RSocket>>,
6114
}
6215

63-
pub struct Requester<S>
64-
where
65-
S: RSocket + Clone,
66-
{
67-
rsocket: S,
68-
}
69-
70-
pub struct RequestSpec<S>
71-
where
72-
S: RSocket + Clone,
73-
{
16+
pub struct RequestSpec {
7417
data: Option<Vec<u8>>,
75-
rsocket: S,
18+
rsocket: Arc<Box<dyn RSocket>>,
7619
data_mime_type: MimeType,
7720
metadatas: LinkedList<(MimeType, Vec<u8>)>,
7821
}
7922

80-
impl<S> From<S> for Requester<S>
81-
where
82-
S: RSocket + Clone,
83-
{
84-
fn from(rsocket: S) -> Requester<S> {
85-
Requester { rsocket }
23+
impl From<Box<dyn RSocket>> for Requester {
24+
fn from(rsocket: Box<dyn RSocket>) -> Requester {
25+
Requester {
26+
rsocket: Arc::new(rsocket),
27+
}
8628
}
8729
}
8830

89-
impl<C> Requester<C>
90-
where
91-
C: RSocket + Clone,
92-
{
93-
pub fn route(&self, route: &str) -> RequestSpec<C> {
31+
impl Requester {
32+
pub fn route(&self, route: &str) -> RequestSpec {
9433
let routing = RoutingMetadata::builder().push_str(route).build();
9534
let mut buf = BytesMut::new();
9635
routing.write_to(&mut buf);
9736

9837
let mut metadatas: LinkedList<(MimeType, Vec<u8>)> = Default::default();
99-
metadatas.push_back((MIME_MESSAGE_X_RSOCKET_ROUTING_V0, buf.to_vec()));
38+
metadatas.push_back((MimeType::MESSAGE_X_RSOCKET_ROUTING_V0, buf.to_vec()));
10039
RequestSpec {
10140
data: None,
10241
rsocket: self.rsocket.clone(),
103-
data_mime_type: MIME_APPLICATION_JSON,
42+
data_mime_type: MimeType::APPLICATION_JSON,
10443
metadatas,
10544
}
10645
}
10746
}
10847

109-
impl<C> RequestSpec<C>
110-
where
111-
C: RSocket + Clone,
112-
{
48+
impl RequestSpec {
11349
pub fn metadata<T, M>(&mut self, metadata: &T, mime_type: M) -> Result<(), Box<dyn Error>>
11450
where
11551
T: Sized + Serialize,
@@ -160,7 +96,7 @@ where
16096
}
16197

16298
#[inline]
163-
fn preflight(self) -> (Payload, MimeType, C) {
99+
fn preflight(self) -> (Payload, MimeType, Arc<Box<dyn RSocket>>) {
164100
let mut b = BytesMut::new();
165101
let mut c = CompositeMetadata::builder();
166102
for (mime_type, raw) in self.metadatas.into_iter() {

rsocket-test/tests/test_composite_metadata.rs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,10 @@ use rsocket_rust::utils::Writeable;
66
fn encode_and_decode_composite_metadata() {
77
let bingo = |metadatas: Vec<&CompositeMetadataEntry>| {
88
assert_eq!(2, metadatas.len());
9-
assert_eq!(extension::MIME_TEXT_PLAIN, *metadatas[0].get_mime_type());
9+
assert_eq!(
10+
extension::MimeType::TEXT_PLAIN,
11+
*metadatas[0].get_mime_type()
12+
);
1013
assert_eq!("Hello World!", metadatas[0].get_metadata_utf8());
1114
assert_eq!(
1215
MimeType::from("application/not_well"),

rsocket-test/tests/test_frames.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ fn test_setup() {
2020

2121
#[test]
2222
fn test_keepalive() {
23-
let f = Keepalive::builder(1234, FLAG_RESPOND)
23+
let f = Keepalive::builder(1234, Frame::FLAG_RESPOND)
2424
.set_last_received_position(123)
2525
.set_data(Bytes::from("foobar"))
2626
.build();
@@ -38,7 +38,7 @@ fn test_request_response() {
3838

3939
#[test]
4040
fn test_payload() {
41-
let f = Payload::builder(1234, FLAG_NEXT | FLAG_COMPLETE)
41+
let f = Payload::builder(1234, Frame::FLAG_NEXT | Frame::FLAG_COMPLETE)
4242
.set_data(Bytes::from("Hello World!"))
4343
.set_metadata(Bytes::from("foobar"))
4444
.build();
@@ -111,7 +111,7 @@ fn resume_ok() {
111111

112112
#[test]
113113
fn test_resume() {
114-
let f = Resume::builder(0, FLAG_RESUME)
114+
let f = Resume::builder(0, Frame::FLAG_RESUME)
115115
.set_last_received_server_position(123)
116116
.set_first_available_client_position(22)
117117
.set_token(Bytes::from("this is a token"))

rsocket-test/tests/test_messaging.rs

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,8 @@ async fn test_messaging() {
3232
.start()
3333
.await
3434
.expect("Connect failed!");
35+
36+
let rsocket: Box<dyn RSocket> = Box::new(rsocket);
3537
let requester = Requester::from(rsocket);
3638

3739
let post = Student {
@@ -52,8 +54,3 @@ async fn test_messaging() {
5254
.expect("Empty result!");
5355
println!("------> RESPONSE: {:?}", res);
5456
}
55-
56-
#[test]
57-
fn test_builder() {
58-
RequesterBuilder::default().data_mime_type("application/json");
59-
}

rsocket-test/tests/test_mimes.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ use rsocket_rust::extension::{self, MimeType};
55
#[test]
66
fn test_wellknown() {
77
let well = MimeType::from("application/json");
8-
assert_eq!(extension::MIME_APPLICATION_JSON, well);
8+
assert_eq!(extension::MimeType::APPLICATION_JSON, well);
99
assert_eq!(0x05, well.as_u8().unwrap());
1010
let custom = MimeType::from("application/custom");
1111
assert_eq!(MimeType::Normal("application/custom".to_owned()), custom);

rsocket-transport-tcp/src/codec.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
use bytes::{Buf, BytesMut};
22
use rsocket_rust::frame::Frame;
3-
use rsocket_rust::utils::{Writeable, U24};
3+
use rsocket_rust::utils::{u24, Writeable};
44
use std::io::{Error, ErrorKind};
55
use tokio_util::codec::{Decoder, Encoder};
66

@@ -15,7 +15,7 @@ impl Decoder for LengthBasedFrameCodec {
1515
if actual < 3 {
1616
return Ok(None);
1717
}
18-
let l = U24::read(buf) as usize;
18+
let l = u24::read(buf).into();
1919
if actual < 3 + l {
2020
return Ok(None);
2121
}
@@ -33,7 +33,7 @@ impl Encoder<Frame> for LengthBasedFrameCodec {
3333
fn encode(&mut self, item: Frame, buf: &mut BytesMut) -> Result<(), Self::Error> {
3434
let l = item.len();
3535
buf.reserve(3 + l);
36-
U24::write(l as u32, buf);
36+
u24::from(l).write_to(buf);
3737
item.write_to(buf);
3838
Ok(())
3939
}

rsocket/src/extension/composite.rs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
use super::mime::MimeType;
22
use crate::error::{ErrorKind, RSocketError};
3-
use crate::utils::{RSocketResult, Writeable, U24};
3+
use crate::utils::{u24, RSocketResult, Writeable};
44
use bytes::{Buf, BufMut, Bytes, BytesMut};
55
use std::collections::LinkedList;
66
use std::convert::TryFrom;
@@ -141,7 +141,7 @@ impl CompositeMetadata {
141141
"broken composite metadata: not enough bytes!",
142142
));
143143
}
144-
let payload_size = U24::read_advance(bs) as usize;
144+
let payload_size = u24::read_advance(bs).into();
145145
if bs.len() < payload_size {
146146
return Err(RSocketError::from(format!(
147147
"broken composite metadata: require {} bytes!",
@@ -159,7 +159,7 @@ impl CompositeMetadata {
159159

160160
impl CompositeMetadataEntry {
161161
pub fn new(mime_type: MimeType, metadata: Bytes) -> CompositeMetadataEntry {
162-
assert!(metadata.len() <= (U24::MAX as usize));
162+
assert!(metadata.len() <= (u24::MAX as usize));
163163
CompositeMetadataEntry {
164164
mime_type,
165165
metadata,
@@ -196,8 +196,8 @@ impl Writeable for CompositeMetadataEntry {
196196
bf.put_slice(s.as_ref());
197197
}
198198
};
199-
let metadata_len = self.metadata.len() as u32;
200-
U24::write(metadata_len, bf);
199+
let metadata_len = self.metadata.len();
200+
u24::from(metadata_len).write_to(bf);
201201
if metadata_len > 0 {
202202
bf.put(self.metadata.bytes());
203203
}

0 commit comments

Comments
 (0)