rb: raise if an object is serialized without required fields [THRIFT-143]
git-svn-id: https://svn.apache.org/repos/asf/incubator/thrift/trunk@712945 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/lib/rb/benchmark/gen-rb/BenchmarkService.rb b/lib/rb/benchmark/gen-rb/BenchmarkService.rb
index 7d39882..2c3ae4f 100644
--- a/lib/rb/benchmark/gen-rb/BenchmarkService.rb
+++ b/lib/rb/benchmark/gen-rb/BenchmarkService.rb
@@ -52,6 +52,9 @@
FIELDS = {
N => {:type => Thrift::Types::BYTE, :name => 'n'}
}
+ def validate
+ end
+
end
class Fibonacci_result
@@ -62,6 +65,9 @@
FIELDS = {
SUCCESS => {:type => Thrift::Types::I32, :name => 'success'}
}
+ def validate
+ end
+
end
end
diff --git a/lib/rb/lib/thrift/struct.rb b/lib/rb/lib/thrift/struct.rb
index c530b33..a51f209 100644
--- a/lib/rb/lib/thrift/struct.rb
+++ b/lib/rb/lib/thrift/struct.rb
@@ -82,6 +82,7 @@
end
def read(iprot)
+ validate
# TODO(kevinclark): Make sure transport is C readable
if iprot.respond_to?(:decode_binary)
iprot.decode_binary(self, iprot.trans)
@@ -98,6 +99,7 @@
end
def write(oprot)
+ validate
if oprot.respond_to?(:encode_binary)
# TODO(kevinclark): Clean this so I don't have to access the transport.
oprot.trans.write oprot.encode_binary(self)
diff --git a/lib/rb/spec/gen-rb/NonblockingService.rb b/lib/rb/spec/gen-rb/NonblockingService.rb
index ee5fae1..a886805 100644
--- a/lib/rb/spec/gen-rb/NonblockingService.rb
+++ b/lib/rb/spec/gen-rb/NonblockingService.rb
@@ -121,6 +121,9 @@
FIELDS = {
ENGLISH => {:type => Thrift::Types::BOOL, :name => 'english'}
}
+ def validate
+ end
+
end
class Greeting_result
@@ -131,6 +134,9 @@
FIELDS = {
SUCCESS => {:type => Thrift::Types::STRUCT, :name => 'success', :class => Hello}
}
+ def validate
+ end
+
end
class Block_args
@@ -139,6 +145,9 @@
FIELDS = {
}
+ def validate
+ end
+
end
class Block_result
@@ -149,6 +158,9 @@
FIELDS = {
SUCCESS => {:type => Thrift::Types::BOOL, :name => 'success'}
}
+ def validate
+ end
+
end
class Unblock_args
@@ -159,6 +171,9 @@
FIELDS = {
N => {:type => Thrift::Types::I32, :name => 'n'}
}
+ def validate
+ end
+
end
class Unblock_result
@@ -167,6 +182,9 @@
FIELDS = {
}
+ def validate
+ end
+
end
class Shutdown_args
@@ -175,6 +193,9 @@
FIELDS = {
}
+ def validate
+ end
+
end
class Shutdown_result
@@ -183,6 +204,9 @@
FIELDS = {
}
+ def validate
+ end
+
end
class Sleep_args
@@ -193,6 +217,9 @@
FIELDS = {
SECONDS => {:type => Thrift::Types::DOUBLE, :name => 'seconds'}
}
+ def validate
+ end
+
end
class Sleep_result
@@ -201,6 +228,9 @@
FIELDS = {
}
+ def validate
+ end
+
end
end
diff --git a/lib/rb/spec/gen-rb/ThriftSpec_types.rb b/lib/rb/spec/gen-rb/ThriftSpec_types.rb
index 0251524..6e5fed4 100644
--- a/lib/rb/spec/gen-rb/ThriftSpec_types.rb
+++ b/lib/rb/spec/gen-rb/ThriftSpec_types.rb
@@ -15,6 +15,9 @@
FIELDS = {
GREETING => {:type => Thrift::Types::STRING, :name => 'greeting', :default => 'hello world'}
}
+ def validate
+ end
+
end
class Foo
@@ -47,6 +50,9 @@
]), :element => {:type => Thrift::Types::I16}},
OPT_STRING => {:type => Thrift::Types::STRING, :name => 'opt_string', :optional => true}
}
+ def validate
+ end
+
end
class BoolStruct
@@ -57,6 +63,9 @@
FIELDS = {
YESNO => {:type => Thrift::Types::BOOL, :name => 'yesno', :default => true}
}
+ def validate
+ end
+
end
class SimpleList