From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from smtp16.mail.ru (smtp16.mail.ru [94.100.176.153]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by dev.tarantool.org (Postfix) with ESMTPS id C70B84696C3 for ; Mon, 27 Apr 2020 18:14:09 +0300 (MSK) Date: Mon, 27 Apr 2020 15:14:08 +0000 From: Nikita Pettik Message-ID: <20200427151408.GD30870@tarantool.org> References: <0d4129e35ccfa9cbfd8e4204e8179acb545cf46b.1587600640.git.v.shpilevoy@tarantool.org> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline In-Reply-To: <0d4129e35ccfa9cbfd8e4204e8179acb545cf46b.1587600640.git.v.shpilevoy@tarantool.org> Subject: Re: [Tarantool-patches] [PATCH v2 2/3] box: introduce box_return_mp() public C function List-Id: Tarantool development patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Vladislav Shpilevoy Cc: tarantool-patches@dev.tarantool.org On 23 Apr 02:12, Vladislav Shpilevoy wrote: > + > +int > +test_return_mp(box_function_ctx_t *ctx, const char *args, const char *args_end) > +{ > + (void) args; > + (void) args_end; > + char buf[512]; > + char *pos = mp_encode_uint(buf, 1); > + int rc = box_return_mp(ctx, buf, pos); > + if (rc != 0) > + return rc; > + > + pos = mp_encode_int(buf, -1); > + rc = box_return_mp(ctx, buf, pos); > + if (rc != 0) > + return rc; > + > + pos = mp_encode_uint(buf, UINT64_MAX); > + rc = box_return_mp(ctx, buf, pos); > + if (rc != 0) > + return rc; > + > + const char *str = "123456789101112131415"; > + pos = mp_encode_str(buf, str, strlen(str)); > + rc = box_return_mp(ctx, buf, pos); > + if (rc != 0) > + return rc; > + > + pos = mp_encode_array(buf, 1); > + pos = mp_encode_uint(pos, 2); > + box_tuple_t *tuple = box_tuple_new(box_tuple_format_default(), > + buf, pos); > + if (tuple == NULL) > + return -1; > + rc = box_return_tuple(ctx, tuple); Probably I'm missing something (since I've never used C API) but when I do: res = net:connect(box.cfg.listen):call(name) print(type(res[5])) I get table. But shouldn't it be tuple (cdata), since it (last member) is explicitly wrapped into tuple)? I guess it is due to certain convention but failed to find it in docs. Could you please clarify?