class MessagePack::Unpacker
Public Class Methods
new(*args)
click to toggle source
static VALUE Unpacker_initialize(int argc, VALUE* argv, VALUE self)
{
VALUE io = Qnil;
VALUE options = Qnil;
if(argc == 0 || (argc == 1 && argv[0] == Qnil)) {
/* Qnil */
} else if(argc == 1) {
VALUE v = argv[0];
if(rb_type(v) == T_HASH) {
options = v;
if(rb_type(options) != T_HASH) {
rb_raise(rb_eArgError, "expected Hash but found %s.", rb_obj_classname(options));
}
} else {
io = v;
}
} else if(argc == 2) {
io = argv[0];
options = argv[1];
if(rb_type(options) != T_HASH) {
rb_raise(rb_eArgError, "expected Hash but found %s.", rb_obj_classname(options));
}
} else {
rb_raise(rb_eArgError, "wrong number of arguments (%d for 0..2)", argc);
}
UNPACKER(self, uk);
MessagePack_Unpacker_initialize(uk, io, options);
return self;
}
Public Instance Methods
buffer()
click to toggle source
static VALUE Unpacker_buffer(VALUE self)
{
UNPACKER(self, uk);
return uk->buffer_ref;
}
each()
click to toggle source
static VALUE Unpacker_each(VALUE self)
{
UNPACKER(self, uk);
#ifdef RETURN_ENUMERATOR
RETURN_ENUMERATOR(self, 0, 0);
#endif
if(msgpack_buffer_has_io(UNPACKER_BUFFER_(uk))) {
/* rescue EOFError only if io is set */
return rb_rescue2(Unpacker_each_impl, self,
Unpacker_rescue_EOFError, self,
rb_eEOFError, NULL);
} else {
return Unpacker_each_impl(self);
}
}
feed(p1)
click to toggle source
static VALUE Unpacker_feed(VALUE self, VALUE data)
{
UNPACKER(self, uk);
StringValue(data);
msgpack_buffer_append_string(UNPACKER_BUFFER_(uk), data);
return self;
}
feed_each(p1)
click to toggle source
static VALUE Unpacker_feed_each(VALUE self, VALUE data)
{
// TODO optimize
Unpacker_feed(self, data);
return Unpacker_each(self);
}
read()
click to toggle source
static VALUE Unpacker_read(VALUE self)
{
UNPACKER(self, uk);
int r = msgpack_unpacker_read(uk, 0);
if(r < 0) {
raise_unpacker_error(r);
}
return msgpack_unpacker_get_last_object(uk);
}
Also aliased as: unpack
read_array_header()
click to toggle source
static VALUE Unpacker_read_array_header(VALUE self)
{
UNPACKER(self, uk);
uint32_t size;
int r = msgpack_unpacker_read_array_header(uk, &size);
if(r < 0) {
raise_unpacker_error(r);
}
return ULONG2NUM(size);
}
read_map_header()
click to toggle source
static VALUE Unpacker_read_map_header(VALUE self)
{
UNPACKER(self, uk);
uint32_t size;
int r = msgpack_unpacker_read_map_header(uk, &size);
if(r < 0) {
raise_unpacker_error((int)r);
}
return ULONG2NUM(size);
}
reset()
click to toggle source
static VALUE Unpacker_reset(VALUE self)
{
UNPACKER(self, uk);
_msgpack_unpacker_reset(uk);
return Qnil;
}
skip()
click to toggle source
static VALUE Unpacker_skip(VALUE self)
{
UNPACKER(self, uk);
int r = msgpack_unpacker_skip(uk, 0);
if(r < 0) {
raise_unpacker_error(r);
}
return Qnil;
}
skip_nil()
click to toggle source
static VALUE Unpacker_skip_nil(VALUE self)
{
UNPACKER(self, uk);
int r = msgpack_unpacker_skip_nil(uk);
if(r < 0) {
raise_unpacker_error(r);
}
if(r) {
return Qtrue;
}
return Qfalse;
}