protobuffy 3.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (192) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +21 -0
  3. data/.travis.yml +12 -0
  4. data/.yardopts +5 -0
  5. data/CHANGES.md +261 -0
  6. data/CONTRIBUTING.md +16 -0
  7. data/Gemfile +3 -0
  8. data/LICENSE.txt +14 -0
  9. data/README.md +58 -0
  10. data/Rakefile +61 -0
  11. data/bin/protoc-gen-ruby +17 -0
  12. data/bin/rpc_server +4 -0
  13. data/examples/bin/reverse-client-http +4 -0
  14. data/examples/bin/reverse-client-socket +4 -0
  15. data/examples/bin/reverse-client-zmq +4 -0
  16. data/examples/config.ru +6 -0
  17. data/examples/definitions/example/reverse.proto +12 -0
  18. data/examples/lib/example/reverse-client.rb +23 -0
  19. data/examples/lib/example/reverse-service.rb +9 -0
  20. data/examples/lib/example/reverse.pb.rb +36 -0
  21. data/lib/protobuf.rb +106 -0
  22. data/lib/protobuf/cli.rb +249 -0
  23. data/lib/protobuf/code_generator.rb +41 -0
  24. data/lib/protobuf/decoder.rb +74 -0
  25. data/lib/protobuf/deprecator.rb +42 -0
  26. data/lib/protobuf/descriptors.rb +3 -0
  27. data/lib/protobuf/descriptors/google/protobuf/compiler/plugin.pb.rb +52 -0
  28. data/lib/protobuf/descriptors/google/protobuf/descriptor.pb.rb +249 -0
  29. data/lib/protobuf/encoder.rb +62 -0
  30. data/lib/protobuf/enum.rb +319 -0
  31. data/lib/protobuf/exceptions.rb +9 -0
  32. data/lib/protobuf/field.rb +74 -0
  33. data/lib/protobuf/field/base_field.rb +280 -0
  34. data/lib/protobuf/field/bool_field.rb +53 -0
  35. data/lib/protobuf/field/bytes_field.rb +81 -0
  36. data/lib/protobuf/field/double_field.rb +26 -0
  37. data/lib/protobuf/field/enum_field.rb +57 -0
  38. data/lib/protobuf/field/field_array.rb +86 -0
  39. data/lib/protobuf/field/fixed32_field.rb +25 -0
  40. data/lib/protobuf/field/fixed64_field.rb +29 -0
  41. data/lib/protobuf/field/float_field.rb +38 -0
  42. data/lib/protobuf/field/int32_field.rb +22 -0
  43. data/lib/protobuf/field/int64_field.rb +22 -0
  44. data/lib/protobuf/field/integer_field.rb +24 -0
  45. data/lib/protobuf/field/message_field.rb +66 -0
  46. data/lib/protobuf/field/sfixed32_field.rb +28 -0
  47. data/lib/protobuf/field/sfixed64_field.rb +29 -0
  48. data/lib/protobuf/field/signed_integer_field.rb +30 -0
  49. data/lib/protobuf/field/sint32_field.rb +22 -0
  50. data/lib/protobuf/field/sint64_field.rb +22 -0
  51. data/lib/protobuf/field/string_field.rb +35 -0
  52. data/lib/protobuf/field/uint32_field.rb +22 -0
  53. data/lib/protobuf/field/uint64_field.rb +22 -0
  54. data/lib/protobuf/field/varint_field.rb +68 -0
  55. data/lib/protobuf/generators/base.rb +71 -0
  56. data/lib/protobuf/generators/enum_generator.rb +42 -0
  57. data/lib/protobuf/generators/extension_generator.rb +28 -0
  58. data/lib/protobuf/generators/field_generator.rb +132 -0
  59. data/lib/protobuf/generators/file_generator.rb +140 -0
  60. data/lib/protobuf/generators/group_generator.rb +113 -0
  61. data/lib/protobuf/generators/message_generator.rb +99 -0
  62. data/lib/protobuf/generators/printable.rb +161 -0
  63. data/lib/protobuf/generators/service_generator.rb +27 -0
  64. data/lib/protobuf/http.rb +20 -0
  65. data/lib/protobuf/lifecycle.rb +46 -0
  66. data/lib/protobuf/logger.rb +86 -0
  67. data/lib/protobuf/message.rb +182 -0
  68. data/lib/protobuf/message/fields.rb +122 -0
  69. data/lib/protobuf/message/serialization.rb +84 -0
  70. data/lib/protobuf/optionable.rb +23 -0
  71. data/lib/protobuf/rpc/buffer.rb +79 -0
  72. data/lib/protobuf/rpc/client.rb +168 -0
  73. data/lib/protobuf/rpc/connector.rb +21 -0
  74. data/lib/protobuf/rpc/connectors/base.rb +54 -0
  75. data/lib/protobuf/rpc/connectors/common.rb +172 -0
  76. data/lib/protobuf/rpc/connectors/http.rb +90 -0
  77. data/lib/protobuf/rpc/connectors/socket.rb +73 -0
  78. data/lib/protobuf/rpc/connectors/zmq.rb +205 -0
  79. data/lib/protobuf/rpc/dynamic_discovery.pb.rb +47 -0
  80. data/lib/protobuf/rpc/env.rb +58 -0
  81. data/lib/protobuf/rpc/error.rb +28 -0
  82. data/lib/protobuf/rpc/error/client_error.rb +31 -0
  83. data/lib/protobuf/rpc/error/server_error.rb +43 -0
  84. data/lib/protobuf/rpc/middleware.rb +25 -0
  85. data/lib/protobuf/rpc/middleware/exception_handler.rb +36 -0
  86. data/lib/protobuf/rpc/middleware/logger.rb +91 -0
  87. data/lib/protobuf/rpc/middleware/request_decoder.rb +83 -0
  88. data/lib/protobuf/rpc/middleware/response_encoder.rb +88 -0
  89. data/lib/protobuf/rpc/middleware/runner.rb +18 -0
  90. data/lib/protobuf/rpc/rpc.pb.rb +53 -0
  91. data/lib/protobuf/rpc/server.rb +39 -0
  92. data/lib/protobuf/rpc/servers/http/server.rb +101 -0
  93. data/lib/protobuf/rpc/servers/http_runner.rb +34 -0
  94. data/lib/protobuf/rpc/servers/socket/server.rb +113 -0
  95. data/lib/protobuf/rpc/servers/socket/worker.rb +56 -0
  96. data/lib/protobuf/rpc/servers/socket_runner.rb +34 -0
  97. data/lib/protobuf/rpc/servers/zmq/broker.rb +155 -0
  98. data/lib/protobuf/rpc/servers/zmq/server.rb +313 -0
  99. data/lib/protobuf/rpc/servers/zmq/util.rb +47 -0
  100. data/lib/protobuf/rpc/servers/zmq/worker.rb +105 -0
  101. data/lib/protobuf/rpc/servers/zmq_runner.rb +51 -0
  102. data/lib/protobuf/rpc/service.rb +179 -0
  103. data/lib/protobuf/rpc/service_directory.rb +245 -0
  104. data/lib/protobuf/rpc/service_dispatcher.rb +46 -0
  105. data/lib/protobuf/rpc/service_filters.rb +273 -0
  106. data/lib/protobuf/rpc/stat.rb +148 -0
  107. data/lib/protobuf/socket.rb +22 -0
  108. data/lib/protobuf/tasks.rb +1 -0
  109. data/lib/protobuf/tasks/compile.rake +61 -0
  110. data/lib/protobuf/version.rb +3 -0
  111. data/lib/protobuf/wire_type.rb +10 -0
  112. data/lib/protobuf/zmq.rb +21 -0
  113. data/proto/dynamic_discovery.proto +44 -0
  114. data/proto/google/protobuf/compiler/plugin.proto +147 -0
  115. data/proto/google/protobuf/descriptor.proto +620 -0
  116. data/proto/rpc.proto +62 -0
  117. data/protobuffy.gemspec +37 -0
  118. data/spec/benchmark/tasks.rb +113 -0
  119. data/spec/bin/protoc-gen-ruby_spec.rb +18 -0
  120. data/spec/data/data.bin +3 -0
  121. data/spec/data/types.bin +0 -0
  122. data/spec/encoding/all_types_spec.rb +91 -0
  123. data/spec/encoding/extreme_values_spec.rb +0 -0
  124. data/spec/functional/socket_server_spec.rb +59 -0
  125. data/spec/functional/zmq_server_spec.rb +103 -0
  126. data/spec/lib/protobuf/cli_spec.rb +267 -0
  127. data/spec/lib/protobuf/code_generator_spec.rb +60 -0
  128. data/spec/lib/protobuf/enum_spec.rb +239 -0
  129. data/spec/lib/protobuf/field/int32_field_spec.rb +7 -0
  130. data/spec/lib/protobuf/field/string_field_spec.rb +46 -0
  131. data/spec/lib/protobuf/field_spec.rb +194 -0
  132. data/spec/lib/protobuf/generators/base_spec.rb +87 -0
  133. data/spec/lib/protobuf/generators/enum_generator_spec.rb +68 -0
  134. data/spec/lib/protobuf/generators/extension_generator_spec.rb +43 -0
  135. data/spec/lib/protobuf/generators/field_generator_spec.rb +99 -0
  136. data/spec/lib/protobuf/generators/file_generator_spec.rb +29 -0
  137. data/spec/lib/protobuf/generators/message_generator_spec.rb +0 -0
  138. data/spec/lib/protobuf/generators/service_generator_spec.rb +43 -0
  139. data/spec/lib/protobuf/lifecycle_spec.rb +89 -0
  140. data/spec/lib/protobuf/logger_spec.rb +136 -0
  141. data/spec/lib/protobuf/message_spec.rb +368 -0
  142. data/spec/lib/protobuf/optionable_spec.rb +46 -0
  143. data/spec/lib/protobuf/rpc/client_spec.rb +66 -0
  144. data/spec/lib/protobuf/rpc/connector_spec.rb +26 -0
  145. data/spec/lib/protobuf/rpc/connectors/base_spec.rb +50 -0
  146. data/spec/lib/protobuf/rpc/connectors/common_spec.rb +170 -0
  147. data/spec/lib/protobuf/rpc/connectors/connector_spec.rb +13 -0
  148. data/spec/lib/protobuf/rpc/connectors/http_spec.rb +61 -0
  149. data/spec/lib/protobuf/rpc/connectors/socket_spec.rb +24 -0
  150. data/spec/lib/protobuf/rpc/connectors/zmq_spec.rb +129 -0
  151. data/spec/lib/protobuf/rpc/middleware/exception_handler_spec.rb +62 -0
  152. data/spec/lib/protobuf/rpc/middleware/logger_spec.rb +49 -0
  153. data/spec/lib/protobuf/rpc/middleware/request_decoder_spec.rb +115 -0
  154. data/spec/lib/protobuf/rpc/middleware/response_encoder_spec.rb +75 -0
  155. data/spec/lib/protobuf/rpc/servers/http/server_spec.rb +104 -0
  156. data/spec/lib/protobuf/rpc/servers/socket_server_spec.rb +38 -0
  157. data/spec/lib/protobuf/rpc/servers/zmq/server_spec.rb +41 -0
  158. data/spec/lib/protobuf/rpc/servers/zmq/util_spec.rb +55 -0
  159. data/spec/lib/protobuf/rpc/servers/zmq/worker_spec.rb +35 -0
  160. data/spec/lib/protobuf/rpc/service_directory_spec.rb +295 -0
  161. data/spec/lib/protobuf/rpc/service_dispatcher_spec.rb +52 -0
  162. data/spec/lib/protobuf/rpc/service_filters_spec.rb +484 -0
  163. data/spec/lib/protobuf/rpc/service_spec.rb +161 -0
  164. data/spec/lib/protobuf/rpc/stat_spec.rb +151 -0
  165. data/spec/lib/protobuf_spec.rb +78 -0
  166. data/spec/spec_helper.rb +57 -0
  167. data/spec/support/all.rb +7 -0
  168. data/spec/support/packed_field.rb +22 -0
  169. data/spec/support/server.rb +94 -0
  170. data/spec/support/test/all_types.data.bin +0 -0
  171. data/spec/support/test/all_types.data.txt +119 -0
  172. data/spec/support/test/defaults.pb.rb +25 -0
  173. data/spec/support/test/defaults.proto +9 -0
  174. data/spec/support/test/enum.pb.rb +59 -0
  175. data/spec/support/test/enum.proto +34 -0
  176. data/spec/support/test/extended.pb.rb +22 -0
  177. data/spec/support/test/extended.proto +10 -0
  178. data/spec/support/test/extreme_values.data.bin +0 -0
  179. data/spec/support/test/google_unittest.pb.rb +543 -0
  180. data/spec/support/test/google_unittest.proto +713 -0
  181. data/spec/support/test/google_unittest_import.pb.rb +37 -0
  182. data/spec/support/test/google_unittest_import.proto +64 -0
  183. data/spec/support/test/google_unittest_import_public.pb.rb +8 -0
  184. data/spec/support/test/google_unittest_import_public.proto +38 -0
  185. data/spec/support/test/multi_field_extensions.pb.rb +56 -0
  186. data/spec/support/test/multi_field_extensions.proto +33 -0
  187. data/spec/support/test/resource.pb.rb +117 -0
  188. data/spec/support/test/resource.proto +94 -0
  189. data/spec/support/test/resource_service.rb +26 -0
  190. data/spec/support/test_app_file.rb +2 -0
  191. data/spec/support/tolerance_matcher.rb +40 -0
  192. metadata +367 -0
@@ -0,0 +1,86 @@
1
+ module Protobuf
2
+ module Field
3
+ class FieldArray < Array
4
+
5
+ ##
6
+ # Attributes
7
+ #
8
+
9
+ attr_reader :field
10
+
11
+ ##
12
+ # Constructor
13
+ #
14
+
15
+ def initialize(field)
16
+ @field = field
17
+ end
18
+
19
+ ##
20
+ # Public Instance Methods
21
+ #
22
+
23
+ def []=(nth, val)
24
+ super(nth, normalize(val)) unless val.nil?
25
+ end
26
+
27
+ def <<(val)
28
+ super(normalize(val)) unless val.nil?
29
+ end
30
+
31
+ def push(val)
32
+ super(normalize(val)) unless val.nil?
33
+ end
34
+
35
+ def replace(val)
36
+ raise_type_error(val) unless val.is_a?(Array)
37
+ val.map! { |v| normalize(v) }
38
+ super(val)
39
+ end
40
+
41
+ # Return a hash-representation of the given values for this field type.
42
+ # The value in this case would be an array.
43
+ def to_hash_value
44
+ self.map do |value|
45
+ value.respond_to?(:to_hash_value) ? value.to_hash_value : value
46
+ end
47
+ end
48
+
49
+ def to_s
50
+ "[#{field.name}]"
51
+ end
52
+
53
+ def unshift(val)
54
+ super(normalize(val)) unless val.nil?
55
+ end
56
+
57
+ private
58
+
59
+ ##
60
+ # Private Instance Methods
61
+ #
62
+
63
+ def normalize(value)
64
+ value = value.to_proto if value.respond_to?(:to_proto)
65
+ raise TypeError, "Unacceptable value #{value} for field #{field.name} of type #{field.type_class}" unless field.acceptable?(value)
66
+
67
+ if field.is_a?(::Protobuf::Field::EnumField)
68
+ field.type_class.fetch(value)
69
+ elsif field.is_a?(::Protobuf::Field::MessageField) && value.respond_to?(:to_hash)
70
+ field.type_class.new(value.to_hash)
71
+ else
72
+ value
73
+ end
74
+ end
75
+
76
+ def raise_type_error(val)
77
+ raise TypeError, <<-TYPE_ERROR
78
+ Expected repeated value of type '#{field.type_class}'
79
+ Got '#{val.class}' for repeated protobuf field #{field.name}
80
+ TYPE_ERROR
81
+ end
82
+
83
+ end
84
+ end
85
+ end
86
+
@@ -0,0 +1,25 @@
1
+ require 'protobuf/field/uint32_field'
2
+
3
+ module Protobuf
4
+ module Field
5
+ class Fixed32Field < Uint32Field
6
+
7
+ ##
8
+ # Public Instance Methods
9
+ #
10
+
11
+ def decode(bytes)
12
+ bytes.unpack('V').first
13
+ end
14
+
15
+ def encode(value)
16
+ [value].pack('V')
17
+ end
18
+
19
+ def wire_type
20
+ ::Protobuf::WireType::FIXED32
21
+ end
22
+
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,29 @@
1
+ require 'protobuf/field/uint64_field'
2
+
3
+ module Protobuf
4
+ module Field
5
+ class Fixed64Field < Uint64Field
6
+
7
+ ##
8
+ # Public Instance Methods
9
+ #
10
+
11
+ def decode(bytes)
12
+ # we don't use 'Q' for pack/unpack. 'Q' is machine-dependent.
13
+ values = bytes.unpack('VV')
14
+ values[0] + (values[1] << 32)
15
+ end
16
+
17
+ def encode(value)
18
+ # we don't use 'Q' for pack/unpack. 'Q' is machine-dependent.
19
+ [value & 0xffff_ffff, value >> 32].pack('VV')
20
+ end
21
+
22
+ def wire_type
23
+ ::Protobuf::WireType::FIXED64
24
+ end
25
+
26
+ end
27
+ end
28
+ end
29
+
@@ -0,0 +1,38 @@
1
+ require 'protobuf/field/base_field'
2
+
3
+ module Protobuf
4
+ module Field
5
+ class FloatField < BaseField
6
+
7
+ ##
8
+ # Class Methods
9
+ #
10
+
11
+ def self.default
12
+ 0.0
13
+ end
14
+
15
+ ##
16
+ # Public Instance Methods
17
+ #
18
+
19
+ def acceptable?(val)
20
+ val.respond_to?(:to_f)
21
+ end
22
+
23
+ def decode(bytes)
24
+ bytes.unpack('e').first
25
+ end
26
+
27
+ def encode(value)
28
+ [value].pack('e')
29
+ end
30
+
31
+ def wire_type
32
+ WireType::FIXED32
33
+ end
34
+
35
+ end
36
+ end
37
+ end
38
+
@@ -0,0 +1,22 @@
1
+ require 'protobuf/field/integer_field'
2
+
3
+ module Protobuf
4
+ module Field
5
+ class Int32Field < IntegerField
6
+
7
+ ##
8
+ # Class Methods
9
+ #
10
+
11
+ def self.max
12
+ INT32_MAX
13
+ end
14
+
15
+ def self.min
16
+ INT32_MIN
17
+ end
18
+
19
+ end
20
+ end
21
+ end
22
+
@@ -0,0 +1,22 @@
1
+ require 'protobuf/field/integer_field'
2
+
3
+ module Protobuf
4
+ module Field
5
+ class Int64Field < IntegerField
6
+
7
+ ##
8
+ # Class Methods
9
+ #
10
+
11
+ def self.max
12
+ INT64_MAX
13
+ end
14
+
15
+ def self.min
16
+ INT64_MIN
17
+ end
18
+
19
+ end
20
+ end
21
+ end
22
+
@@ -0,0 +1,24 @@
1
+ require 'protobuf/field/varint_field'
2
+
3
+ module Protobuf
4
+ module Field
5
+ class IntegerField < VarintField
6
+
7
+ ##
8
+ # Public Instance Methods
9
+ #
10
+
11
+ def decode(value)
12
+ value -= 0x1_0000_0000_0000_0000 if (value & 0x8000_0000_0000_0000).nonzero?
13
+ value
14
+ end
15
+
16
+ def encode(value)
17
+ # original Google's library uses 64bits integer for negative value
18
+ ::Protobuf::Field::VarintField.encode(value & 0xffff_ffff_ffff_ffff)
19
+ end
20
+
21
+ end
22
+ end
23
+ end
24
+
@@ -0,0 +1,66 @@
1
+ require 'protobuf/field/base_field'
2
+
3
+ module Protobuf
4
+ module Field
5
+ class MessageField < BaseField
6
+
7
+ ##
8
+ # Public Instance Methods
9
+ #
10
+
11
+ def acceptable?(val)
12
+ unless val.instance_of?(type_class) || val.respond_to?(:to_hash)
13
+ raise TypeError, "Expected value of type '#{type_class}' for field #{name}, but got '#{val.class}'"
14
+ end
15
+
16
+ true
17
+ end
18
+
19
+ def decode(bytes)
20
+ type_class.decode(bytes)
21
+ end
22
+
23
+ def encode(value)
24
+ bytes = value.encode
25
+ result = ::Protobuf::Field::VarintField.encode(bytes.size)
26
+ result << bytes
27
+ end
28
+
29
+ def message?
30
+ true
31
+ end
32
+
33
+ def wire_type
34
+ ::Protobuf::WireType::LENGTH_DELIMITED
35
+ end
36
+
37
+ private
38
+
39
+ ##
40
+ # Private Instance Methods
41
+ #
42
+
43
+ def define_setter
44
+ field = self
45
+ message_class.class_eval do
46
+ define_method("#{field.name}=") do |val|
47
+ case
48
+ when val.nil? then
49
+ @values.delete(field.name)
50
+ when val.is_a?(field.type_class) then
51
+ @values[field.name] = val
52
+ when val.respond_to?(:to_proto) then
53
+ @values[field.name] = val.to_proto
54
+ when val.respond_to?(:to_hash) then
55
+ @values[field.name] = field.type_class.new(val.to_hash)
56
+ else
57
+ raise TypeError, "Expected value of type '#{field.type_class}' for field #{field.name}, but got '#{val.class}'"
58
+ end
59
+ end
60
+ end
61
+ end
62
+
63
+ end
64
+ end
65
+ end
66
+
@@ -0,0 +1,28 @@
1
+ require 'protobuf/field/int32_field'
2
+
3
+ module Protobuf
4
+ module Field
5
+ class Sfixed32Field < Int32Field
6
+
7
+ ##
8
+ # Public Instance Methods
9
+ #
10
+
11
+ def decode(bytes)
12
+ value = bytes.unpack('V').first
13
+ value -= 0x1_0000_0000 if (value & 0x8000_0000).nonzero?
14
+ value
15
+ end
16
+
17
+ def encode(value)
18
+ [value].pack('V')
19
+ end
20
+
21
+ def wire_type
22
+ ::Protobuf::WireType::FIXED32
23
+ end
24
+
25
+ end
26
+ end
27
+ end
28
+
@@ -0,0 +1,29 @@
1
+ require 'protobuf/field/int64_field'
2
+
3
+ module Protobuf
4
+ module Field
5
+ class Sfixed64Field < Int64Field
6
+
7
+ ##
8
+ # Public Instance Methods
9
+ #
10
+
11
+ def decode(bytes)
12
+ values = bytes.unpack('VV') # 'Q' is machine-dependent, don't use
13
+ value = values[0] + (values[1] << 32)
14
+ value -= 0x1_0000_0000_0000_0000 if (value & 0x8000_0000_0000_0000).nonzero?
15
+ value
16
+ end
17
+
18
+ def encode(value)
19
+ [value & 0xffff_ffff, value >> 32].pack('VV') # 'Q' is machine-dependent, don't use
20
+ end
21
+
22
+ def wire_type
23
+ ::Protobuf::WireType::FIXED64
24
+ end
25
+
26
+ end
27
+ end
28
+ end
29
+
@@ -0,0 +1,30 @@
1
+ require 'protobuf/field/varint_field'
2
+
3
+ module Protobuf
4
+ module Field
5
+ class SignedIntegerField < VarintField
6
+
7
+ ##
8
+ # Public Instance Methods
9
+ #
10
+
11
+ def decode(value)
12
+ if (value & 1).zero?
13
+ value >> 1 # positive value
14
+ else
15
+ ~value >> 1 # negative value
16
+ end
17
+ end
18
+
19
+ def encode(value)
20
+ if value >= 0
21
+ VarintField.encode(value << 1)
22
+ else
23
+ VarintField.encode(~(value << 1))
24
+ end
25
+ end
26
+
27
+ end
28
+ end
29
+ end
30
+
@@ -0,0 +1,22 @@
1
+ require 'protobuf/field/signed_integer_field'
2
+
3
+ module Protobuf
4
+ module Field
5
+ class Sint32Field < SignedIntegerField
6
+
7
+ ##
8
+ # Class Methods
9
+ #
10
+
11
+ def self.max
12
+ INT32_MAX
13
+ end
14
+
15
+ def self.min
16
+ INT32_MIN
17
+ end
18
+
19
+ end
20
+ end
21
+ end
22
+
@@ -0,0 +1,22 @@
1
+ require 'protobuf/field/signed_integer_field'
2
+
3
+ module Protobuf
4
+ module Field
5
+ class Sint64Field < SignedIntegerField
6
+
7
+ ##
8
+ # Class Methods
9
+ #
10
+
11
+ def self.max
12
+ INT64_MAX
13
+ end
14
+
15
+ def self.min
16
+ INT64_MIN
17
+ end
18
+
19
+ end
20
+ end
21
+ end
22
+