encoder for Time

This commit is contained in:
Mike Dirolf 2009-03-05 10:58:56 -05:00
parent 709e819523
commit 3904079715
1 changed files with 12 additions and 1 deletions

View File

@ -191,7 +191,18 @@ static int write_element(VALUE key, VALUE value, VALUE extra) {
break;
}
}
// case T_DATA:
case T_DATA:
{
// TODO again, is this really the only way to do this?
const char* cls = rb_class2name(RBASIC(value)->klass);
if (strcmp(cls, "Time") == 0) {
write_name_and_type(buffer, key, 0x09);
double t = NUM2DBL(rb_funcall(value, rb_intern("to_f"), 0));
long long time_since_epoch = (long long)(t * 1000);
buffer_write_bytes(buffer, (const char*)&time_since_epoch, 8);
break;
}
}
default:
rb_raise(rb_eTypeError, "no c encoder for this type yet");
break;