Guest User

Untitled

a guest
May 20th, 2018
128
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.54 KB | None | 0 0
  1.  
  2. module MessagePack
  3. def self.pack(obj, schema = nil)
  4. ostream = java.io.ByteArrayOutputStream.new
  5. packer = org.msgpack.Packer.new(ostream)
  6. value = self.ruby_to_java(obj)
  7.  
  8. if schema
  9. packer.packWithSchema(value, org.msgpack.Schema.parse(schema))
  10. else
  11. packer.pack(value)
  12. end
  13.  
  14. bytes = ostream.toByteArray
  15.  
  16. return bytes.to_a.pack("c*")
  17. end
  18.  
  19. def self.unpack(binary, schema = nil)
  20. bytes = binary.unpack("c*").to_java(:byte)
  21. istream = java.io.ByteArrayInputStream.new(bytes)
  22. unpacker = org.msgpack.Unpacker.new(istream)
  23. unpacker.useSchema(org.msgpack.Schema.parse(schema)) if schema
  24. iterator = unpacker.iterator
  25. value = iterator.next
  26. return self.java_to_ruby(value)
  27. end
  28.  
  29. def self.ruby_to_java(obj)
  30. case obj
  31. when Fixnum then return java.lang.Long.new(obj)
  32. when Array
  33. return java.util.ArrayList.new(obj.map { |item|
  34. self.ruby_to_java(item)
  35. })
  36. when Hash
  37. return obj.inject({}) { |memo, (key, value)|
  38. memo[self.ruby_to_java(key)] = self.ruby_to_java(value)
  39. memo
  40. }
  41. else return obj
  42. end
  43. end
  44.  
  45. def self.java_to_ruby(value)
  46. if value.java_kind_of?(java.util.HashMap)
  47. return Hash[value.map { |key, value|
  48. [self.java_to_ruby(key), self.java_to_ruby(value)]
  49. }]
  50. else
  51. if value.respond_to?(:getClass)
  52. case value.getClass.getName
  53. when "java.util.Arrays$ArrayList" then return value.to_a
  54. else return value
  55. end
  56. else
  57. return value
  58. end
  59. end
  60. end
  61. end
Add Comment
Please, Sign In to add comment