46 lines
912 B
Ruby
46 lines
912 B
Ruby
# A thin wrapper for the CBson class
|
|
class BSON_C
|
|
|
|
if RUBY_VERSION >= '1.9'
|
|
def self.to_utf8(str)
|
|
str.encode("utf-8")
|
|
end
|
|
else
|
|
def self.to_utf8(str)
|
|
begin
|
|
str.unpack("U*")
|
|
rescue => ex
|
|
raise InvalidStringEncoding, "String not valid utf-8: #{str}"
|
|
end
|
|
str
|
|
end
|
|
end
|
|
|
|
def self.serialize_cstr(buf, val)
|
|
buf.put_array(to_utf8(val.to_s).unpack("C*") + [0])
|
|
end
|
|
|
|
def self.serialize(obj, check_keys=false)
|
|
ByteBuffer.new(CBson.serialize(obj, check_keys))
|
|
end
|
|
|
|
def self.deserialize(buf=nil)
|
|
if buf.is_a? String
|
|
to_deserialize = ByteBuffer.new(buf) if buf
|
|
else
|
|
buf = ByteBuffer.new(buf.to_a) if buf
|
|
end
|
|
buf.rewind
|
|
CBson.deserialize(buf.to_s)
|
|
end
|
|
|
|
def deserialize(buf=nil)
|
|
self.class.deserialize(buf)
|
|
end
|
|
|
|
def serialize(buf, check_keys=false)
|
|
self.class.serialize(buf, check_keys)
|
|
end
|
|
|
|
end
|