def write(arg)
case check_type(arg)
when T_NULL
return write_null
when T_INTEGER8
return write_int8(arg)
when T_DECIMAL
return write_decimal(arg)
when T_INTEGER1
return write_int1(arg)
when T_INTEGER2
return write_int2(arg)
when T_INTEGER4
return write_int4(arg)
when T_DOUBLE
return write_double(arg)
when T_STRING
return write_string(arg)
when T_ARRAY
return write_array(arg)
when T_BOOLEAN_TRUE
return writes([T_BOOLEAN_TRUE].pack("C"))
when T_BOOLEAN_FALSE
return writes([T_BOOLEAN_FALSE].pack("C"))
end
raise IOError.new("Can not serialize the type: #{arg.class} : #{arg}")
end