summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAllen George <allengeorge@apache.org>2020-11-08 09:51:19 -0500
committerAllen George <allengeorge@apache.org>2020-11-12 08:47:42 -0500
commit7ddbcc07ec98349da59bb023d0fed8db37097c18 (patch)
tree80a46fb7f940e8626bfd8f38346f0b85cce368a7
parent22671db01f5c349f2fa54b393581cb4d61bdd895 (diff)
downloadthrift-7ddbcc07ec98349da59bb023d0fed8db37097c18.tar.gz
THRIFT-5306: Rust code and generated code no longer has clippy warnings (Rust 1.40)
Client: rs NOTE: Also properly update the min/max supported Rust versions
-rw-r--r--.gitignore1
-rw-r--r--LANGUAGES.md2
-rw-r--r--compiler/cpp/src/thrift/generate/t_rs_generator.cc25
-rw-r--r--lib/rs/Cargo.toml2
-rw-r--r--lib/rs/README.md2
-rw-r--r--lib/rs/src/errors.rs20
-rw-r--r--lib/rs/src/lib.rs8
-rw-r--r--lib/rs/src/protocol/binary.rs22
-rw-r--r--lib/rs/src/protocol/compact.rs52
-rw-r--r--lib/rs/src/protocol/mod.rs20
-rw-r--r--lib/rs/src/protocol/multiplexed.rs2
-rw-r--r--lib/rs/src/protocol/stored.rs2
-rw-r--r--lib/rs/src/server/multiplexed.rs8
-rw-r--r--lib/rs/src/server/threaded.rs2
-rw-r--r--lib/rs/src/transport/buffered.rs10
-rw-r--r--lib/rs/src/transport/mem.rs4
-rw-r--r--lib/rs/test/Cargo.toml4
-rw-r--r--lib/rs/test/src/bin/kitchen_sink_client.rs8
-rw-r--r--lib/rs/test/src/bin/kitchen_sink_server.rs6
-rw-r--r--lib/rs/test/src/lib.rs2
-rw-r--r--test/rs/Cargo.toml4
-rw-r--r--test/rs/src/bin/test_client.rs58
-rw-r--r--test/rs/src/bin/test_server.rs19
-rw-r--r--test/rs/src/lib.rs6
-rw-r--r--tutorial/rs/Cargo.toml2
-rw-r--r--tutorial/rs/README.md25
-rw-r--r--tutorial/rs/src/bin/tutorial_client.rs3
-rw-r--r--tutorial/rs/src/bin/tutorial_server.rs7
28 files changed, 146 insertions, 180 deletions
diff --git a/.gitignore b/.gitignore
index 58e2582a7..76d9e502b 100644
--- a/.gitignore
+++ b/.gitignore
@@ -288,6 +288,7 @@ project.lock.json
/lib/rs/test/src/midlayer.rs
/lib/rs/test/src/recursive.rs
/lib/rs/test/src/ultimate.rs
+/lib/rs/test/src/identifiers.rs
/lib/rs/*.iml
/lib/rs/**/*.iml
/lib/swift/.build
diff --git a/LANGUAGES.md b/LANGUAGES.md
index 3173ec3f5..4ea86f78d 100644
--- a/LANGUAGES.md
+++ b/LANGUAGES.md
@@ -314,7 +314,7 @@ Thrift's core protocol is TBinary, supported by all languages except for JavaScr
<td align=left><a href="https://github.com/apache/thrift/blob/master/lib/rs/README.md">Rust</a></td>
<!-- Since -----------------><td>0.11.0</td>
<!-- Build Systems ---------><td><img src="doc/images/cgrn.png" alt="Yes"/></td><td><img src="doc/images/cred.png" alt=""/></td>
-<!-- Language Levels -------><td>1.35.0</td><td>1.35.0</td>
+<!-- Language Levels -------><td>1.40.0</td><td>1.xx.x</td>
<!-- Low-Level Transports --><td><img src="doc/images/cred.png" alt=""/></td><td><img src="doc/images/cred.png" alt=""/></td><td><img src="doc/images/cgrn.png" alt="Yes"/></td><td><img src="doc/images/cred.png" alt=""/></td><td><img src="doc/images/cgrn.png" alt="Yes"/></td><td><img src="doc/images/cred.png" alt=""/></td>
<!-- Transport Wrappers ----><td><img src="doc/images/cgrn.png" alt="Yes"/></td><td><img src="doc/images/cred.png" alt=""/></td><td><img src="doc/images/cred.png" alt=""/></td><td><img src="doc/images/cred.png" alt=""/></td>
<!-- Protocols -------------><td><img src="doc/images/cgrn.png" alt="Yes"/></td><td><img src="doc/images/cgrn.png" alt="Yes"/></td><td><img src="doc/images/cred.png" alt=""/></td><td><img src="doc/images/cgrn.png" alt="Yes"/></td>
diff --git a/compiler/cpp/src/thrift/generate/t_rs_generator.cc b/compiler/cpp/src/thrift/generate/t_rs_generator.cc
index 506e0901f..f55b7e0db 100644
--- a/compiler/cpp/src/thrift/generate/t_rs_generator.cc
+++ b/compiler/cpp/src/thrift/generate/t_rs_generator.cc
@@ -554,7 +554,6 @@ void t_rs_generator::render_attributes_and_includes() {
f_gen_ << endl;
// add standard includes
- f_gen_ << "use thrift::OrderedFloat;" << endl;
f_gen_ << "use std::cell::RefCell;" << endl;
f_gen_ << "use std::collections::{BTreeMap, BTreeSet};" << endl;
f_gen_ << "use std::convert::{From, TryFrom};" << endl;
@@ -564,6 +563,7 @@ void t_rs_generator::render_attributes_and_includes() {
f_gen_ << "use std::fmt::{Display, Formatter};" << endl;
f_gen_ << "use std::rc::Rc;" << endl;
f_gen_ << endl;
+ f_gen_ << "use thrift::OrderedFloat;" << endl;
f_gen_ << "use thrift::{ApplicationError, ApplicationErrorKind, ProtocolError, ProtocolErrorKind, TThriftClient};" << endl;
f_gen_ << "use thrift::protocol::{TFieldIdentifier, TListIdentifier, TMapIdentifier, TMessageIdentifier, TMessageType, TInputProtocol, TOutputProtocol, TSetIdentifier, TStructIdentifier, TType};" << endl;
f_gen_ << "use thrift::protocol::field_id;" << endl;
@@ -706,7 +706,7 @@ void t_rs_generator::render_const_value(t_type* ttype, t_const_value* tvalue, bo
f_gen_ << tvalue->get_integer();
break;
case t_base_type::TYPE_DOUBLE:
- f_gen_ << "OrderedFloat::from(" << tvalue->get_double() << " as f64)";
+ f_gen_ << "OrderedFloat::from(" << tvalue->get_double() << "_f64)";
break;
default:
throw "cannot generate const value for " + t_base_type::t_base_name(tbase_type->get_base());
@@ -901,12 +901,16 @@ void t_rs_generator::render_enum_impl(const string& enum_name) {
f_gen_ << "impl " << enum_name << " {" << endl;
indent_up();
+ // taking enum as 'self' here because Thrift enums
+ // are represented as Rust enums with integer values
+ // it's cheaper to copy the integer as opposed to
+ // taking a reference to the enum
f_gen_
<< indent()
- << "pub fn write_to_out_protocol(&self, o_prot: &mut dyn TOutputProtocol) -> thrift::Result<()> {"
+ << "pub fn write_to_out_protocol(self, o_prot: &mut dyn TOutputProtocol) -> thrift::Result<()> {"
<< endl;
indent_up();
- f_gen_ << indent() << "o_prot.write_i32(*self as i32)" << endl;
+ f_gen_ << indent() << "o_prot.write_i32(self as i32)" << endl;
indent_down();
f_gen_ << indent() << "}" << endl;
@@ -1230,7 +1234,7 @@ void t_rs_generator::render_struct_constructor(
<< endl;
indent_up();
- if (members.size() == 0) {
+ if (members.empty()) {
f_gen_ << indent() << struct_name << " {}" << endl;
} else {
f_gen_ << indent() << struct_name << " {" << endl;
@@ -1244,7 +1248,7 @@ void t_rs_generator::render_struct_constructor(
if (is_optional(member_req)) {
f_gen_ << indent() << member_name << ": " << member_name << ".into()," << endl;
} else {
- f_gen_ << indent() << member_name << ": " << member_name << "," << endl;
+ f_gen_ << indent() << member_name << "," << endl;
}
}
@@ -1504,19 +1508,14 @@ void t_rs_generator::render_struct_field_sync_write(
indent_up();
f_gen_ << indent() << "o_prot.write_field_begin(&" << field_ident_string << ")?;" << endl;
render_type_sync_write("fld_var", true, field_type);
- f_gen_ << indent() << "o_prot.write_field_end()?;" << endl;
- f_gen_ << indent() << "()" << endl; // FIXME: remove this extraneous '()'
+ f_gen_ << indent() << "o_prot.write_field_end()?" << endl;
indent_down();
- f_gen_ << indent() << "} else {" << endl; // FIXME: remove else branch
- indent_up();
/* FIXME: rethink how I deal with OPT_IN_REQ_OUT
if (req == t_field::T_OPT_IN_REQ_OUT) {
f_gen_ << indent() << "let field_ident = " << field_ident_string << ";" << endl;
f_gen_ << indent() << "o_prot.write_field_begin(&field_ident)?;" << endl;
f_gen_ << indent() << "o_prot.write_field_end()?;" << endl;
}*/
- f_gen_ << indent() << "()" << endl;
- indent_down();
f_gen_ << indent() << "}" << endl;
} else {
f_gen_ << indent() << "o_prot.write_field_begin(&" << field_ident_string << ")?;" << endl;
@@ -2308,7 +2307,7 @@ void t_rs_generator::render_sync_send(t_function* tfunc) {
for (members_iter = members.begin(); members_iter != members.end(); ++members_iter) {
t_field* member = (*members_iter);
string member_name(rust_field_name(member));
- struct_definition << member_name << ": " << member_name << ", ";
+ struct_definition << member_name << ", ";
}
string struct_fields = struct_definition.str();
if (struct_fields.size() > 0) {
diff --git a/lib/rs/Cargo.toml b/lib/rs/Cargo.toml
index 674a4c317..182cd8d86 100644
--- a/lib/rs/Cargo.toml
+++ b/lib/rs/Cargo.toml
@@ -12,8 +12,8 @@ exclude = ["Makefile*", "test/**", "*.iml"]
keywords = ["thrift"]
[dependencies]
-ordered-float = "1.0"
byteorder = "1.3"
integer-encoding = ">=1.1.4" # https://issues.apache.org/jira/browse/THRIFT-5131
log = "0.4"
+ordered-float = "1.0"
threadpool = "1.7"
diff --git a/lib/rs/README.md b/lib/rs/README.md
index 1b608b261..555d219d2 100644
--- a/lib/rs/README.md
+++ b/lib/rs/README.md
@@ -48,7 +48,7 @@ Breaking changes are minimized. When they are made they will be outlined below w
##### Thrift 0.14.0
-* **[THRIFT-5158]** - Rust library and generator now support Rust 2018 only
+* **[THRIFT-5158]** - Rust library and generator now support Rust 2018 only. Required rust 1.40.0 or higher
The Rust `thrift` library was updated to Rust 2018 via `cargo fix --edition`.
All test code in the repo was updated as well. The code generator was also updated
diff --git a/lib/rs/src/errors.rs b/lib/rs/src/errors.rs
index 2167875d4..41a055eca 100644
--- a/lib/rs/src/errors.rs
+++ b/lib/rs/src/errors.rs
@@ -236,8 +236,8 @@ impl Error {
i.read_struct_end()?;
Ok(ApplicationError {
- kind: kind,
- message: message,
+ kind,
+ message,
})
}
@@ -283,7 +283,7 @@ impl error::Error for Error {
}
impl Debug for Error {
- fn fmt(&self, f: &mut Formatter) -> fmt::Result {
+ fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result {
match *self {
Error::Transport(ref e) => Debug::fmt(e, f),
Error::Protocol(ref e) => Debug::fmt(e, f),
@@ -294,7 +294,7 @@ impl Debug for Error {
}
impl Display for Error {
- fn fmt(&self, f: &mut Formatter) -> fmt::Result {
+ fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result {
match *self {
Error::Transport(ref e) => Display::fmt(e, f),
Error::Protocol(ref e) => Display::fmt(e, f),
@@ -362,7 +362,7 @@ impl TransportError {
/// Create a new `TransportError`.
pub fn new<S: Into<String>>(kind: TransportErrorKind, message: S) -> TransportError {
TransportError {
- kind: kind,
+ kind,
message: message.into(),
}
}
@@ -404,7 +404,7 @@ impl TransportError {
}
impl Display for TransportError {
- fn fmt(&self, f: &mut Formatter) -> fmt::Result {
+ fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result {
write!(f, "{}", self.description())
}
}
@@ -490,7 +490,7 @@ impl ProtocolError {
/// Create a new `ProtocolError`.
pub fn new<S: Into<String>>(kind: ProtocolErrorKind, message: S) -> ProtocolError {
ProtocolError {
- kind: kind,
+ kind,
message: message.into(),
}
}
@@ -534,7 +534,7 @@ impl ProtocolError {
}
impl Display for ProtocolError {
- fn fmt(&self, f: &mut Formatter) -> fmt::Result {
+ fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result {
write!(f, "{}", self.description())
}
}
@@ -581,7 +581,7 @@ impl ApplicationError {
/// Create a new `ApplicationError`.
pub fn new<S: Into<String>>(kind: ApplicationErrorKind, message: S) -> ApplicationError {
ApplicationError {
- kind: kind,
+ kind,
message: message.into(),
}
}
@@ -638,7 +638,7 @@ impl ApplicationError {
}
impl Display for ApplicationError {
- fn fmt(&self, f: &mut Formatter) -> fmt::Result {
+ fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result {
write!(f, "{}", self.description())
}
}
diff --git a/lib/rs/src/lib.rs b/lib/rs/src/lib.rs
index b762e0577..f71c3e88a 100644
--- a/lib/rs/src/lib.rs
+++ b/lib/rs/src/lib.rs
@@ -49,14 +49,6 @@
#![doc(test(attr(allow(unused_variables), deny(warnings))))]
#![deny(bare_trait_objects)]
-extern crate byteorder;
-extern crate ordered_float;
-extern crate integer_encoding;
-extern crate threadpool;
-
-#[macro_use]
-extern crate log;
-
// NOTE: this macro has to be defined before any modules. See:
// https://danielkeep.github.io/quick-intro-to-macros.html#some-more-gotchas
diff --git a/lib/rs/src/protocol/binary.rs b/lib/rs/src/protocol/binary.rs
index 0ef65e54b..22b496c07 100644
--- a/lib/rs/src/protocol/binary.rs
+++ b/lib/rs/src/protocol/binary.rs
@@ -26,7 +26,7 @@ use super::{TOutputProtocol, TOutputProtocolFactory, TSetIdentifier, TStructIden
use crate::transport::{TReadTransport, TWriteTransport};
use crate::{ProtocolError, ProtocolErrorKind};
-const BINARY_PROTOCOL_VERSION_1: u32 = 0x80010000;
+const BINARY_PROTOCOL_VERSION_1: u32 = 0x8001_0000;
/// Read messages encoded in the Thrift simple binary encoding.
///
@@ -69,8 +69,8 @@ where
/// version number in the protocol header.
pub fn new(transport: T, strict: bool) -> TBinaryInputProtocol<T> {
TBinaryInputProtocol {
- strict: strict,
- transport: transport,
+ strict,
+ transport,
}
}
}
@@ -79,7 +79,7 @@ impl<T> TInputProtocol for TBinaryInputProtocol<T>
where
T: TReadTransport,
{
- #[cfg_attr(feature = "cargo-clippy", allow(collapsible_if))]
+ #[allow(clippy::collapsible_if)]
fn read_message_begin(&mut self) -> crate::Result<TMessageIdentifier> {
let mut first_bytes = vec![0; 4];
self.transport.read_exact(&mut first_bytes[..])?;
@@ -295,8 +295,8 @@ where
/// protocol version number in the protocol header.
pub fn new(transport: T, strict: bool) -> TBinaryOutputProtocol<T> {
TBinaryOutputProtocol {
- strict: strict,
- transport: transport,
+ strict,
+ transport,
}
}
}
@@ -520,7 +520,7 @@ mod tests {
let ident = TMessageIdentifier::new("test", TMessageType::Call, 1);
assert!(o_prot.write_message_begin(&ident).is_ok());
- #[cfg_attr(rustfmt, rustfmt::skip)]
+ #[rustfmt::skip]
let expected: [u8; 16] = [
0x80,
0x01,
@@ -550,7 +550,7 @@ mod tests {
let ident = TMessageIdentifier::new("test", TMessageType::Call, 1);
assert!(o_prot.write_message_begin(&ident).is_ok());
- #[cfg_attr(rustfmt, rustfmt::skip)]
+ #[rustfmt::skip]
let expected: [u8; 13] = [
0x00,
0x00,
@@ -577,7 +577,7 @@ mod tests {
let ident = TMessageIdentifier::new("test", TMessageType::Reply, 10);
assert!(o_prot.write_message_begin(&ident).is_ok());
- #[cfg_attr(rustfmt, rustfmt::skip)]
+ #[rustfmt::skip]
let expected: [u8; 16] = [
0x80,
0x01,
@@ -607,7 +607,7 @@ mod tests {
let ident = TMessageIdentifier::new("test", TMessageType::Reply, 10);
assert!(o_prot.write_message_begin(&ident).is_ok());
- #[cfg_attr(rustfmt, rustfmt::skip)]
+ #[rustfmt::skip]
let expected: [u8; 13] = [
0x00,
0x00,
@@ -892,7 +892,7 @@ mod tests {
fn must_round_trip_bytes() {
let (mut i_prot, mut o_prot) = test_objects(true);
- #[cfg_attr(rustfmt, rustfmt::skip)]
+ #[rustfmt::skip]
let bytes: [u8; 25] = [
0x20,
0xFD,
diff --git a/lib/rs/src/protocol/compact.rs b/lib/rs/src/protocol/compact.rs
index f33c0202a..6fa364fa0 100644
--- a/lib/rs/src/protocol/compact.rs
+++ b/lib/rs/src/protocol/compact.rs
@@ -76,7 +76,7 @@ where
last_read_field_id: 0,
read_field_id_stack: Vec::new(),
pending_read_bool_value: None,
- transport: transport,
+ transport,
}
}
@@ -193,7 +193,7 @@ where
Ok(TFieldIdentifier {
name: None,
- field_type: field_type,
+ field_type,
id: Some(self.last_read_field_id),
})
}
@@ -371,7 +371,7 @@ where
last_write_field_id: 0,
write_field_id_stack: Vec::new(),
pending_write_bool_field_identifier: None,
- transport: transport,
+ transport,
}
}
@@ -673,7 +673,7 @@ mod tests {
431
)));
- #[cfg_attr(rustfmt, rustfmt::skip)]
+ #[rustfmt::skip]
let expected: [u8; 8] = [
0x82, /* protocol ID */
0x21, /* message type | protocol version */
@@ -695,10 +695,10 @@ mod tests {
assert_success!(o_prot.write_message_begin(&TMessageIdentifier::new(
"bar",
TMessageType::Reply,
- 991828
+ 991_828
)));
- #[cfg_attr(rustfmt, rustfmt::skip)]
+ #[rustfmt::skip]
let expected: [u8; 9] = [
0x82, /* protocol ID */
0x41, /* message type | protocol version */
@@ -743,7 +743,7 @@ mod tests {
fn must_round_trip_message_begin() {
let (mut i_prot, mut o_prot) = test_objects();
- let ident = TMessageIdentifier::new("service_call", TMessageType::Call, 1283948);
+ let ident = TMessageIdentifier::new("service_call", TMessageType::Call, 1_283_948);
assert_success!(o_prot.write_message_begin(&ident));
@@ -787,7 +787,7 @@ mod tests {
assert_success!(o_prot.write_field_stop());
assert_success!(o_prot.write_struct_end());
- #[cfg_attr(rustfmt, rustfmt::skip)]
+ #[rustfmt::skip]
let expected: [u8; 5] = [
0x03, /* field type */
0x00, /* first field id */
@@ -902,7 +902,7 @@ mod tests {
assert_success!(o_prot.write_field_stop());
assert_success!(o_prot.write_struct_end());
- #[cfg_attr(rustfmt, rustfmt::skip)]
+ #[rustfmt::skip]
let expected: [u8; 4] = [
0x15, /* field delta (1) | field type */
0x1A, /* field delta (1) | field type */
@@ -1015,7 +1015,7 @@ mod tests {
assert_success!(o_prot.write_field_stop());
assert_success!(o_prot.write_struct_end());
- #[cfg_attr(rustfmt, rustfmt::skip)]
+ #[rustfmt::skip]
let expected: [u8; 8] = [
0x05, /* field type */
0x00, /* first field id */
@@ -1139,7 +1139,7 @@ mod tests {
assert_success!(o_prot.write_field_stop());
assert_success!(o_prot.write_struct_end());
- #[cfg_attr(rustfmt, rustfmt::skip)]
+ #[rustfmt::skip]
let expected: [u8; 10] = [
0x16, /* field delta (1) | field type */
0x85, /* field delta (8) | field type */
@@ -1156,6 +1156,7 @@ mod tests {
assert_eq_written_bytes!(o_prot, expected);
}
+ #[allow(clippy::cognitive_complexity)]
#[test]
fn must_round_trip_struct_with_mix_of_long_and_delta_fields() {
let (mut i_prot, mut o_prot) = test_objects();
@@ -1304,7 +1305,7 @@ mod tests {
assert_success!(o_prot.write_field_stop());
assert_success!(o_prot.write_struct_end());
- #[cfg_attr(rustfmt, rustfmt::skip)]
+ #[rustfmt::skip]
let expected: [u8; 7] = [
0x16, /* field delta (1) | field type */
0x85, /* field delta (8) | field type */
@@ -1318,6 +1319,7 @@ mod tests {
assert_eq_written_bytes!(o_prot, expected);
}
+ #[allow(clippy::cognitive_complexity)]
#[test]
fn must_round_trip_nested_structs_0() {
// last field of the containing struct is a delta
@@ -1477,7 +1479,7 @@ mod tests {
assert_success!(o_prot.write_field_stop());
assert_success!(o_prot.write_struct_end());
- #[cfg_attr(rustfmt, rustfmt::skip)]
+ #[rustfmt::skip]
let expected: [u8; 7] = [
0x16, /* field delta (1) | field type */
0x85, /* field delta (8) | field type */
@@ -1491,6 +1493,7 @@ mod tests {
assert_eq_written_bytes!(o_prot, expected);
}
+ #[allow(clippy::cognitive_complexity)]
#[test]
fn must_round_trip_nested_structs_1() {
// last field of the containing struct is a delta
@@ -1650,7 +1653,7 @@ mod tests {
assert_success!(o_prot.write_field_stop());
assert_success!(o_prot.write_struct_end());
- #[cfg_attr(rustfmt, rustfmt::skip)]
+ #[rustfmt::skip]
let expected: [u8; 7] = [
0x16, /* field delta (1) | field type */
0x08, /* field type */
@@ -1664,6 +1667,7 @@ mod tests {
assert_eq_written_bytes!(o_prot, expected);
}
+ #[allow(clippy::cognitive_complexity)]
#[test]
fn must_round_trip_nested_structs_2() {
let (mut i_prot, mut o_prot) = test_objects();
@@ -1820,7 +1824,7 @@ mod tests {
assert_success!(o_prot.write_field_stop());
assert_success!(o_prot.write_struct_end());
- #[cfg_attr(rustfmt, rustfmt::skip)]
+ #[rustfmt::skip]
let expected: [u8; 8] = [
0x16, /* field delta (1) | field type */
0x08, /* field type */
@@ -1835,6 +1839,7 @@ mod tests {
assert_eq_written_bytes!(o_prot, expected);
}
+ #[allow(clippy::cognitive_complexity)]
#[test]
fn must_round_trip_nested_structs_3() {
// last field of the containing struct is a full write
@@ -1986,7 +1991,7 @@ mod tests {
assert_success!(o_prot.write_field_stop());
assert_success!(o_prot.write_struct_end());
- #[cfg_attr(rustfmt, rustfmt::skip)]
+ #[rustfmt::skip]
let expected: [u8; 7] = [
0x11, /* field delta (1) | true */
0x82, /* field delta (8) | false */
@@ -2000,6 +2005,7 @@ mod tests {
assert_eq_written_bytes!(o_prot, expected);
}
+ #[allow(clippy::cognitive_complexity)]
#[test]
fn must_round_trip_bool_field() {
let (mut i_prot, mut o_prot) = test_objects();
@@ -2245,7 +2251,7 @@ mod tests {
fn must_round_trip_large_sized_set_begin() {
let (mut i_prot, mut o_prot) = test_objects();
- let ident = TSetIdentifier::new(TType::Map, 3928429);
+ let ident = TSetIdentifier::new(TType::Map, 3_928_429);
assert_success!(o_prot.write_set_begin(&ident));
@@ -2312,7 +2318,7 @@ mod tests {
fn must_round_trip_map_begin() {
let (mut i_prot, mut o_prot) = test_objects();
- let ident = TMapIdentifier::new(TType::Map, TType::List, 1928349);
+ let ident = TMapIdentifier::new(TType::Map, TType::List, 1_928_349);
assert_success!(o_prot.write_map_begin(&ident));
@@ -2403,11 +2409,13 @@ mod tests {
fn must_read_write_double() {
let (mut i_prot, mut o_prot) = test_objects();
- let double = 3.141592653589793238462643;
+ #[allow(clippy::approx_constant)]
+ let double = 3.141_592_653_589_793;
o_prot.write_double(double).unwrap();
copy_write_buffer_to_read_buffer!(o_prot);
- assert_eq!(i_prot.read_double().unwrap(), double);
+ let read_double = i_prot.read_double().unwrap();
+ assert!(read_double - double < std::f64::EPSILON);
}
#[test]
@@ -2415,11 +2423,11 @@ mod tests {
let (_, mut o_prot) = test_objects();
let expected = [24, 45, 68, 84, 251, 33, 9, 64];
- let double = 3.141592653589793238462643;
+ #[allow(clippy::approx_constant)]
+ let double = 3.141_592_653_589_793;
o_prot.write_double(double).unwrap();
assert_eq_written_bytes!(o_prot, expected);
-
}
fn assert_no_write<F>(mut write_fn: F)
diff --git a/lib/rs/src/protocol/mod.rs b/lib/rs/src/protocol/mod.rs
index b0e9118ce..f9c1f724c 100644
--- a/lib/rs/src/protocol/mod.rs
+++ b/lib/rs/src/protocol/mod.rs
@@ -610,8 +610,8 @@ impl TMessageIdentifier {
) -> TMessageIdentifier {
TMessageIdentifier {
name: name.into(),
- message_type: message_type,
- sequence_number: sequence_number,
+ message_type,
+ sequence_number,
}
}
}
@@ -660,7 +660,7 @@ impl TFieldIdentifier {
{
TFieldIdentifier {
name: name.into().map(|n| n.into()),
- field_type: field_type,
+ field_type,
id: id.into(),
}
}
@@ -680,8 +680,8 @@ impl TListIdentifier {
/// `element_type`.
pub fn new(element_type: TType, size: i32) -> TListIdentifier {
TListIdentifier {
- element_type: element_type,
- size: size,
+ element_type,
+ size,
}
}
}
@@ -700,8 +700,8 @@ impl TSetIdentifier {
/// `element_type`.
pub fn new(element_type: TType, size: i32) -> TSetIdentifier {
TSetIdentifier {
- element_type: element_type,
- size: size,
+ element_type,
+ size,
}
}
}
@@ -728,7 +728,7 @@ impl TMapIdentifier {
TMapIdentifier {
key_type: key_type.into(),
value_type: value_type.into(),
- size: size,
+ size,
}
}
}
@@ -747,7 +747,7 @@ pub enum TMessageType {
}
impl Display for TMessageType {
- fn fmt(&self, f: &mut Formatter) -> fmt::Result {
+ fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result {
match *self {
TMessageType::Call => write!(f, "Call"),
TMessageType::Reply => write!(f, "Reply"),
@@ -822,7 +822,7 @@ pub enum TType {
}
impl Display for TType {
- fn fmt(&self, f: &mut Formatter) -> fmt::Result {
+ fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result {
match *self {
TType::Stop => write!(f, "STOP"),
TType::Void => write!(f, "void"),
diff --git a/lib/rs/src/protocol/multiplexed.rs b/lib/rs/src/protocol/multiplexed.rs
index 9c3ba7c20..83498fbdd 100644
--- a/lib/rs/src/protocol/multiplexed.rs
+++ b/lib/rs/src/protocol/multiplexed.rs
@@ -203,7 +203,7 @@ mod tests {
let ident = TMessageIdentifier::new("bar", TMessageType::Call, 2);
assert_success!(o_prot.write_message_begin(&ident));
- #[cfg_attr(rustfmt, rustfmt::skip)]
+ #[rustfmt::skip]
let expected: [u8; 19] = [
0x80,
0x01, /* protocol identifier */
diff --git a/lib/rs/src/protocol/stored.rs b/lib/rs/src/protocol/stored.rs
index c5e02fea0..179ae07b0 100644
--- a/lib/rs/src/protocol/stored.rs
+++ b/lib/rs/src/protocol/stored.rs
@@ -92,7 +92,7 @@ impl<'a> TStoredInputProtocol<'a> {
pub fn new(
wrapped: &mut dyn TInputProtocol,
message_ident: TMessageIdentifier,
- ) -> TStoredInputProtocol {
+ ) -> TStoredInputProtocol<'_> {
TStoredInputProtocol {
inner: wrapped,
message_ident: message_ident.into(),
diff --git a/lib/rs/src/server/multiplexed.rs b/lib/rs/src/server/multiplexed.rs
index 3d688fa20..4f41f2447 100644
--- a/lib/rs/src/server/multiplexed.rs
+++ b/lib/rs/src/server/multiplexed.rs
@@ -15,6 +15,8 @@
// specific language governing permissions and limitations
// under the License.
+use log::debug;
+
use std::collections::HashMap;
use std::convert::Into;
use std::fmt;
@@ -25,7 +27,7 @@ use crate::protocol::{TInputProtocol, TMessageIdentifier, TOutputProtocol, TStor
use super::{handle_process_result, TProcessor};
-const MISSING_SEPARATOR_AND_NO_DEFAULT: &'static str =
+const MISSING_SEPARATOR_AND_NO_DEFAULT: &str =
"missing service separator and no default processor set";
type ThreadSafeProcessor = Box<dyn TProcessor + Send + Sync>;
@@ -70,7 +72,7 @@ impl TMultiplexedProcessor {
/// Returns success if a new entry was inserted. Returns an error if:
/// * A processor exists for `service_name`
/// * You attempt to register a processor as default, and an existing default exists
- #[cfg_attr(feature = "cargo-clippy", allow(map_entry))]
+ #[allow(clippy::map_entry)]
pub fn register<S: Into<String>>(
&mut self,
service_name: S,
@@ -145,7 +147,7 @@ impl TProcessor for TMultiplexedProcessor {
}
impl Debug for TMultiplexedProcessor {
- fn fmt(&self, f: &mut Formatter) -> fmt::Result {
+ fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result {
let stored = self.stored.lock().unwrap();
write!(
f,
diff --git a/lib/rs/src/server/threaded.rs b/lib/rs/src/server/threaded.rs
index 8373c469c..64bf8bbe5 100644
--- a/lib/rs/src/server/threaded.rs
+++ b/lib/rs/src/server/threaded.rs
@@ -15,6 +15,8 @@
// specific language governing permissions and limitations
// under the License.
+use log::warn;
+
use std::net::{TcpListener, TcpStream, ToSocketAddrs};
use std::sync::Arc;
use threadpool::ThreadPool;
diff --git a/lib/rs/src/transport/buffered.rs b/lib/rs/src/transport/buffered.rs
index 914a19b6f..ebdcdc292 100644
--- a/lib/rs/src/transport/buffered.rs
+++ b/lib/rs/src/transport/buffered.rs
@@ -200,7 +200,7 @@ where
TBufferedWriteTransport {
buf: Vec::with_capacity(write_capacity),
cap: write_capacity,
- channel: channel,
+ channel,
}
}
}
@@ -347,8 +347,8 @@ mod tests {
// fill the underlying transport's byte buffer
let mut readable_bytes = [0u8; 10];
- for i in 0..10 {
- readable_bytes[i] = i as u8;
+ for (i, b) in readable_bytes.iter_mut().enumerate() {
+ *b = i as u8;
}
t.chan.set_readable_bytes(&readable_bytes);
@@ -365,8 +365,8 @@ mod tests {
assert_eq!(&buf, &[0, 1, 2, 3, 4, 5, 6, 7]);
// let's clear out the buffer and try read again
- for i in 0..8 {
- buf[i] = 0;
+ for b in &mut buf{
+ *b = 0;
}
let read_result = t.read(&mut buf);
diff --git a/lib/rs/src/transport/mem.rs b/lib/rs/src/transport/mem.rs
index 68fb2652e..fe1c54346 100644
--- a/lib/rs/src/transport/mem.rs
+++ b/lib/rs/src/transport/mem.rs
@@ -153,7 +153,9 @@ impl TIoChannel for TBufferChannel {
WriteHalf {
handle: TBufferChannel {
read: self.read.clone(),
- write: self.write.clone(),
+ // NOTE: not cloning here, since this is the last statement
+ // in this method and `write` can take ownership of `self.write`
+ write: self.write,
},
},
))
diff --git a/lib/rs/test/Cargo.toml b/lib/rs/test/Cargo.toml
index decc985d8..9341bd563 100644
--- a/lib/rs/test/Cargo.toml
+++ b/lib/rs/test/Cargo.toml
@@ -7,9 +7,7 @@ authors = ["Apache Thrift Developers <dev@thrift.apache.org>"]
publish = false
[dependencies]
-clap = "<2.28.0"
-ordered-float = "1.0"
-try_from = "0.3"
+clap = "2.33"
[dependencies.thrift]
path = "../"
diff --git a/lib/rs/test/src/bin/kitchen_sink_client.rs b/lib/rs/test/src/bin/kitchen_sink_client.rs
index a7779203d..74197de7f 100644
--- a/lib/rs/test/src/bin/kitchen_sink_client.rs
+++ b/lib/rs/test/src/bin/kitchen_sink_client.rs
@@ -15,11 +15,7 @@
// specific language governing permissions and limitations
// under the License.
-#[macro_use]
-extern crate clap;
-
-extern crate kitchen_sink;
-extern crate thrift;
+use clap::{clap_app, value_t};
use std::convert::Into;
@@ -28,6 +24,8 @@ use kitchen_sink::midlayer::{MealServiceSyncClient, TMealServiceSyncClient};
use kitchen_sink::recursive;
use kitchen_sink::recursive::{CoRec, CoRec2, RecList, RecTree, TTestServiceSyncClient};
use kitchen_sink::ultimate::{FullMealServiceSyncClient, TFullMealServiceSyncClient};
+
+use thrift;
use thrift::protocol::{
TBinaryInputProtocol, TBinaryOutputProtocol, TCompactInputProtocol, TCompactOutputProtocol,
TInputProtocol, TOutputProtocol,
diff --git a/lib/rs/test/src/bin/kitchen_sink_server.rs b/lib/rs/test/src/bin/kitchen_sink_server.rs
index c53e887f9..6df39e4bc 100644
--- a/lib/rs/test/src/bin/kitchen_sink_server.rs
+++ b/lib/rs/test/src/bin/kitchen_sink_server.rs
@@ -15,11 +15,9 @@
// specific language governing permissions and limitations
// under the License.
-#[macro_use]
-extern crate clap;
-extern crate kitchen_sink;
-extern crate thrift;
+use clap::{clap_app, value_t};
+use thrift;
use thrift::protocol::{
TBinaryInputProtocolFactory, TBinaryOutputProtocolFactory, TCompactInputProtocolFactory,
TCompactOutputProtocolFactory, TInputProtocolFactory, TOutputProtocolFactory,
diff --git a/lib/rs/test/src/lib.rs b/lib/rs/test/src/lib.rs
index 9debdca54..91fd02728 100644
--- a/lib/rs/test/src/lib.rs
+++ b/lib/rs/test/src/lib.rs
@@ -15,8 +15,6 @@
// specific language governing permissions and limitations
// under the License.
-extern crate thrift;
-
pub mod base_one;
pub mod base_two;
pub mod midlayer;
diff --git a/test/rs/Cargo.toml b/test/rs/Cargo.toml
index deffd2178..8a85d7c7e 100644
--- a/test/rs/Cargo.toml
+++ b/test/rs/Cargo.toml
@@ -8,10 +8,8 @@ publish = false
[dependencies]
clap = "2.33"
-env_logger = "0.4.0"
+env_logger = "0.8"
log = "0.4"
-ordered-float = "1.0"
-try_from = "0.3"
[dependencies.thrift]
path = "../../lib/rs"
diff --git a/test/rs/src/bin/test_client.rs b/test/rs/src/bin/test_client.rs
index 3206deb44..6cbc238ae 100644
--- a/test/rs/src/bin/test_client.rs
+++ b/test/rs/src/bin/test_client.rs
@@ -15,20 +15,15 @@
// specific language governing permissions and limitations
// under the License.
-#[macro_use]
-extern crate log;
-extern crate env_logger;
+use env_logger;
+use log::*;
+use clap::{clap_app, value_t};
-#[macro_use]
-extern crate clap;
-extern crate ordered_float;
-extern crate thrift;
-extern crate thrift_test; // huh. I have to do this to use my lib
-
-use ordered_float::OrderedFloat;
use std::collections::{BTreeMap, BTreeSet};
use std::fmt::Debug;
+use thrift;
+use thrift::OrderedFloat;
use thrift::protocol::{TBinaryInputProtocol, TBinaryOutputProtocol, TCompactInputProtocol,
TCompactOutputProtocol, TInputProtocol, TMultiplexedOutputProtocol,
TOutputProtocol};
@@ -38,7 +33,7 @@ use thrift::transport::{ReadHalf, TBufferedReadTransport, TBufferedWriteTranspor
use thrift_test::*;
fn main() {
- env_logger::init().expect("logger setup failed");
+ env_logger::init();
debug!("initialized logger - running cross-test client");
@@ -167,7 +162,7 @@ fn tcp_channel(
type BuildThriftTestClient = ThriftTestSyncClient<Box<dyn TInputProtocol>, Box<dyn TOutputProtocol>>;
type BuiltSecondServiceClient = SecondServiceSyncClient<Box<dyn TInputProtocol>, Box<dyn TOutputProtocol>>;
-#[cfg_attr(feature = "cargo-clippy", allow(cyclomatic_complexity))]
+#[allow(clippy::cognitive_complexity)]
fn make_thrift_calls(
thrift_test_client: &mut BuildThriftTestClient,
second_service_client: &mut Option<BuiltSecondServiceClient>,
@@ -191,7 +186,7 @@ fn make_thrift_calls(
verify_expected_result(thrift_test_client.test_byte(42), 42)?;
info!("testi32");
- verify_expected_result(thrift_test_client.test_i32(1159348374), 1159348374)?;
+ verify_expected_result(thrift_test_client.test_i32(1_159_348_374), 1_159_348_374)?;
info!("testi64");
// try!(verify_expected_result(thrift_test_client.test_i64(-8651829879438294565),
@@ -231,14 +226,14 @@ fn make_thrift_calls(
let x_snd = Xtruct {
string_thing: Some("foo".to_owned()),
byte_thing: Some(12),
- i32_thing: Some(219129),
- i64_thing: Some(12938492818),
+ i32_thing: Some(219_129),
+ i64_thing: Some(12_938_492_818),
};
let x_cmp = Xtruct {
string_thing: Some("foo".to_owned()),
byte_thing: Some(12),
- i32_thing: Some(219129),
- i64_thing: Some(12938492818),
+ i32_thing: Some(219_129),
+ i64_thing: Some(12_938_492_818),
};
verify_expected_result(thrift_test_client.test_struct(x_snd), x_cmp)?;
}
@@ -264,11 +259,11 @@ fn make_thrift_calls(
Xtruct {
string_thing: Some("foo".to_owned()),
byte_thing: Some(1),
- i32_thing: Some(324382098),
- i64_thing: Some(12938492818),
+ i32_thing: Some(324_382_098),
+ i64_thing: Some(12_938_492_818),
},
),
- i32_thing: Some(293481098),
+ i32_thing: Some(293_481_098),
};
let x_cmp = Xtruct2 {
byte_thing: Some(32),
@@ -276,11 +271,11 @@ fn make_thrift_calls(
Xtruct {
string_thing: Some("foo".to_owned()),
byte_thing: Some(1),
- i32_thing: Some(324382098),
- i64_thing: Some(12938492818),
+ i32_thing: Some(324_382_098),
+ i64_thing: Some(12_938_492_818),
},
),
- i32_thing: Some(293481098),
+ i32_thing: Some(293_481_098),
};
verify_expected_result(thrift_test_client.test_nest(x_snd), x_cmp)?;
}
@@ -314,12 +309,12 @@ fn make_thrift_calls(
info!("testSet");
{
let mut s_snd: BTreeSet<i32> = BTreeSet::new();
- s_snd.insert(293481);
+ s_snd.insert(293_481);
s_snd.insert(23);
s_snd.insert(3234);
let mut s_cmp: BTreeSet<i32> = BTreeSet::new();
- s_cmp.insert(293481);
+ s_cmp.insert(293_481);
s_cmp.insert(23);
s_cmp.insert(3234);
@@ -386,12 +381,12 @@ fn make_thrift_calls(
let s_cmp = Xtruct {
string_thing: Some("Hello2".to_owned()),
byte_thing: Some(1),
- i32_thing: Some(-123948),
- i64_thing: Some(-19234123981),
+ i32_thing: Some(-123_948),
+ i64_thing: Some(-19_234_123_981),
};
verify_expected_result(
- thrift_test_client.test_multi(1, -123948, -19234123981, m_snd, Numberz::Eight, 81),
+ thrift_test_client.test_multi(1, -123_948, -19_234_123_981, m_snd, Numberz::Eight, 81),
s_cmp,
)?;
}
@@ -429,8 +424,8 @@ fn make_thrift_calls(
Xtruct {
string_thing: Some("baz".to_owned()),
byte_thing: Some(0),
- i32_thing: Some(3948539),
- i64_thing: Some(-12938492),
+ i32_thing: Some(3_948_539),
+ i64_thing: Some(-12_938_492),
},
);
@@ -453,7 +448,7 @@ fn make_thrift_calls(
s_cmp.insert(1 as UserId, s_cmp_nested_1);
s_cmp.insert(2 as UserId, s_cmp_nested_2);
- verify_expected_result(thrift_test_client.test_insanity(insanity.clone()), s_cmp)?;
+ verify_expected_result(thrift_test_client.test_insanity(insanity), s_cmp)?;
}
info!("testException - remote throws Xception");
@@ -583,7 +578,6 @@ fn make_thrift_calls(
thrift_test_client.test_void()
}
-#[cfg_attr(feature = "cargo-clippy", allow(needless_pass_by_value))]
fn verify_expected_result<T: Debug + PartialEq + Sized>(
actual: Result<T, thrift::Error>,
expected: T,
diff --git a/test/rs/src/bin/test_server.rs b/test/rs/src/bin/test_server.rs
index e57cc14cb..74be12d48 100644
--- a/test/rs/src/bin/test_server.rs
+++ b/test/rs/src/bin/test_server.rs
@@ -15,21 +15,16 @@
// specific language governing permissions and limitations
// under the License.
-#[macro_use]
-extern crate log;
-extern crate env_logger;
+use env_logger;
+use log::*;
+use clap::{clap_app, value_t};
-#[macro_use]
-extern crate clap;
-extern crate ordered_float;
-extern crate thrift;
-extern crate thrift_test;
-
-use ordered_float::OrderedFloat;
use std::collections::{BTreeMap, BTreeSet};
use std::thread;
use std::time::Duration;
+use thrift;
+use thrift::OrderedFloat;
use thrift::protocol::{TBinaryInputProtocolFactory, TBinaryOutputProtocolFactory,
TCompactInputProtocolFactory, TCompactOutputProtocolFactory,
TInputProtocolFactory, TOutputProtocolFactory};
@@ -40,7 +35,7 @@ use thrift::transport::{TBufferedReadTransportFactory, TBufferedWriteTransportFa
use thrift_test::*;
fn main() {
- env_logger::init().expect("logger setup failed");
+ env_logger::init();
debug!("initialized logger - running cross-test server");
@@ -274,7 +269,7 @@ impl ThriftTestSyncHandler for ThriftTestSyncHandlerImpl {
info!("testInsanity({:?})", argument);
let mut map_0: BTreeMap<Numberz, Insanity> = BTreeMap::new();
map_0.insert(Numberz::Two, argument.clone());
- map_0.insert(Numberz::Three, argument.clone());
+ map_0.insert(Numberz::Three, argument);
let mut map_1: BTreeMap<Numberz, Insanity> = BTreeMap::new();
let insanity = Insanity {
diff --git a/test/rs/src/lib.rs b/test/rs/src/lib.rs
index 10523f0a5..3c7cfc09e 100644
--- a/test/rs/src/lib.rs
+++ b/test/rs/src/lib.rs
@@ -15,9 +15,9 @@
// specific language governing permissions and limitations
// under the License.
-extern crate ordered_float;
-extern crate thrift;
-extern crate try_from;
+
+
+
mod thrift_test;
pub use crate::thrift_test::*;
diff --git a/tutorial/rs/Cargo.toml b/tutorial/rs/Cargo.toml
index d8e2a9a8d..5e21d51a6 100644
--- a/tutorial/rs/Cargo.toml
+++ b/tutorial/rs/Cargo.toml
@@ -9,8 +9,6 @@ publish = false
[dependencies]
clap = "2.33"
-ordered-float = "1.0"
-try_from = "0.3"
[dependencies.thrift]
path = "../../lib/rs"
diff --git a/tutorial/rs/README.md b/tutorial/rs/README.md
index 166854bea..97b1490fe 100644
--- a/tutorial/rs/README.md
+++ b/tutorial/rs/README.md
@@ -4,37 +4,22 @@
1. Get the [Thrift compiler](https://thrift.apache.org).
-2. Add the following crates to your `Cargo.toml`.
+2. Add the thrift crate to your `Cargo.toml`.
```toml
thrift = "x.y.z" # x.y.z is the version of the thrift compiler
-ordered-float = "0.3.0"
-try_from = "0.2.0"
```
-3. Add the same crates to your `lib.rs` or `main.rs`.
-
-```rust
-extern crate ordered_float;
-extern crate thrift;
-extern crate try_from;
-```
-
-4. Generate Rust sources for your IDL (for example, `Tutorial.thrift`).
+3. Generate Rust sources for your IDL (for example, `Tutorial.thrift`).
```shell
thrift -out my_rust_program/src --gen rs -r Tutorial.thrift
```
-5. Use the generated source in your code.
+4. Use the generated source in your code.
```rust
-// add extern crates here, or in your lib.rs
-extern crate ordered_float;
-extern crate thrift;
-extern crate try_from;
-
-// generated Rust module
+// generated Rust module from Thrift IDL
mod tutorial;
use thrift::protocol::{TCompactInputProtocol, TCompactOutputProtocol};
@@ -120,7 +105,7 @@ each generated file.
### Results and Errors
The Thrift runtime library defines a `thrift::Result` and a `thrift::Error` type,
-both of which are used throught the runtime library and in all generated code.
+both of which are used throughout the runtime library and in all generated code.
Conversions are defined from `std::io::Error`, `str` and `String` into
`thrift::Error`.
diff --git a/tutorial/rs/src/bin/tutorial_client.rs b/tutorial/rs/src/bin/tutorial_client.rs
index 90a26d811..f7de23f06 100644
--- a/tutorial/rs/src/bin/tutorial_client.rs
+++ b/tutorial/rs/src/bin/tutorial_client.rs
@@ -15,8 +15,7 @@
// specific language governing permissions and limitations
// under the License.
-#[macro_use]
-extern crate clap;
+use clap::{clap_app, value_t};
use thrift::protocol::{TCompactInputProtocol, TCompactOutputProtocol};
use thrift::transport::{
diff --git a/tutorial/rs/src/bin/tutorial_server.rs b/tutorial/rs/src/bin/tutorial_server.rs
index e4d1d2ecb..fbccb69c9 100644
--- a/tutorial/rs/src/bin/tutorial_server.rs
+++ b/tutorial/rs/src/bin/tutorial_server.rs
@@ -15,18 +15,17 @@
// specific language governing permissions and limitations
// under the License.
-#[macro_use]
-extern crate clap;
-
use std::collections::HashMap;
use std::convert::{From, Into};
use std::default::Default;
use std::sync::Mutex;
+use clap::{clap_app, value_t};
+
use thrift::protocol::{TCompactInputProtocolFactory, TCompactOutputProtocolFactory};
use thrift::server::TServer;
-
use thrift::transport::{TFramedReadTransportFactory, TFramedWriteTransportFactory};
+
use thrift_tutorial::shared::{SharedServiceSyncHandler, SharedStruct};
use thrift_tutorial::tutorial::{CalculatorSyncHandler, CalculatorSyncProcessor};
use thrift_tutorial::tutorial::{InvalidOperation, Operation, Work};