From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mp1 ([2001:41d0:2:bcc0::]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) by ms0.migadu.com with LMTPS id CErzMm8DkWD/bgAAgWs5BA (envelope-from ) for ; Tue, 04 May 2021 10:18:55 +0200 Received: from aspmx1.migadu.com ([2001:41d0:2:bcc0::]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) by mp1 with LMTPS id ECqhLm8DkWDsIgAAbx9fmQ (envelope-from ) for ; Tue, 04 May 2021 08:18:55 +0000 Received: from mail.notmuchmail.org (nmbug.tethera.net [144.217.243.247]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by aspmx1.migadu.com (Postfix) with ESMTPS id 7952AD4E3 for ; Tue, 4 May 2021 10:18:55 +0200 (CEST) Received: from nmbug.tethera.net (localhost [127.0.0.1]) by mail.notmuchmail.org (Postfix) with ESMTP id 2492927DF8; Tue, 4 May 2021 04:18:42 -0400 (EDT) Received: from mail-oo1-xc2f.google.com (mail-oo1-xc2f.google.com [IPv6:2607:f8b0:4864:20::c2f]) by mail.notmuchmail.org (Postfix) with ESMTPS id 6B19F27DF2 for ; Tue, 4 May 2021 04:18:40 -0400 (EDT) Received: by mail-oo1-xc2f.google.com with SMTP id u48-20020a4a97330000b02901fa060b8066so1833856ooi.8 for ; Tue, 04 May 2021 01:18:40 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=1ixzm+nEzckRdMcBtRVqR+F5MTJbnhoRjM33IvYBREo=; b=lnsEil0zvm0tO6Ph+0KmbigFnWpUSczGOmpqjGbGZlpFQ6Z3PsYgy4nyBnm1NO4iCK uIgrn/531lCwtWWBk7pPTkESlg3Mv2TDniLXQ92ydYdXX9DNH3AHfju2Cwrebq4lZ8jG 0gU+bJTz4++xcft5k877aCOc2/F5G4esO54jF2BiXi1dfT+hp+FEe4LKz/PRbMfEBRlu KQtwh+GlAnGKOo0TNhVDDLZ+fMsMmcmUE4pVRVrCdUDsO4bBv0eiUqrujX3ka7XeU6oN 0C/3XTGlNlleugdutV6QdVouh4emJdHUrHcLNCDNP8tYHqRr3M0d8d+1APtiD4XYMu/L 7W8w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=1ixzm+nEzckRdMcBtRVqR+F5MTJbnhoRjM33IvYBREo=; b=cvoe2FqjzPxq9+E2iLUSUQ433i60+8A0w3VXlhqPIdqHyMzngeg3hL84t6tZ6nqyIO yf+/yc5xko6ZY2IpGCbuosZFOn5vUoneuk72QNK68GGkCZf/32JSq5Kn0wNweV90+8WO kCilUFrBD9eIYo0JV7S0IvcKaFPBkdvhpbll4RIwuPquaM3Lt41CEIGZM3XPiWauHvQy kMoTfaQQg5Mhrp6hfcZVx5bi9jx+mlLmh5nohFFeVJjIqSxzsEbm2zk2bISzYxQNHZjj FHwuh0Fu7H6QMnWboScZDpmpYvjQv+5k9xWrJOq1LYmDj6Bz4nWO24FIY5AZ7h7Q2u8O Hzng== X-Gm-Message-State: AOAM5338UOQJUKdWF+n8cVrznsmksjaJ5K0BdG7JKf+q91hfwY5VKJKO YgDQWm3ZH1CDhic51M7eXp2kCvRI8xaawg== X-Google-Smtp-Source: ABdhPJyQ4hMqaxj0k0HnjhA7paek4/At+cjhDToJLz+4aPZAzJsFe7Rc3JjkxwsLd2S8chglkiz2sw== X-Received: by 2002:a4a:2743:: with SMTP id w3mr7841495oow.29.1620116319385; Tue, 04 May 2021 01:18:39 -0700 (PDT) Received: from localhost (fixed-187-190-78-172.totalplay.net. [187.190.78.172]) by smtp.gmail.com with ESMTPSA id c9sm517338ooq.31.2021.05.04.01.18.38 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 04 May 2021 01:18:38 -0700 (PDT) From: Felipe Contreras To: notmuch@notmuchmail.org Subject: [PATCH v2 09/10] ruby: add all data types Date: Tue, 4 May 2021 03:17:48 -0500 Message-Id: <20210504081749.715768-10-felipe.contreras@gmail.com> X-Mailer: git-send-email 2.31.0 In-Reply-To: <20210504081749.715768-1-felipe.contreras@gmail.com> References: <20210504081749.715768-1-felipe.contreras@gmail.com> MIME-Version: 1.0 Message-ID-Hash: KB72Y43WFBIVKPIZUDYHQF2U6HQLUIRY X-Message-ID-Hash: KB72Y43WFBIVKPIZUDYHQF2U6HQLUIRY X-MailFrom: felipe.contreras@gmail.com X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; emergency; loop; banned-address; member-moderation; header-match-notmuch.notmuchmail.org-0; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; suspicious-header CC: Ali Polatel , Austin Clements , Tomi Ollila , Ludovic LANGE , Daniel Kahn Gillmor X-Mailman-Version: 3.2.1 Precedence: list List-Id: "Use and development of the notmuch mail system." List-Help: List-Post: List-Subscribe: List-Unsubscribe: Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit X-Migadu-Flow: FLOW_IN ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=yhetil.org; s=key1; t=1620116335; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:list-id:list-help: list-unsubscribe:list-subscribe:list-post:dkim-signature; bh=nJ7G4r5BkWRE++vCJNW/8U/ZfNZTsTcS6zBjTbu4nho=; b=baUIeXJdkJEzJ+qayW6JAG0p785/irkAQ+dVwPHM7sKhTz+nlS7gEcvDntjMDxqkHO0TRc EzyoUp2MnKMEqev3Zd4U6mGZrtoA1r2k1gQOcpndWtHNCyoF0VSoyyw3nYpF9XPkje4Hbp WOUtV9JvWLI2WMZh3bbKymEWYJiM0LOokrjUtcNZd+GWOxvaWMdtiLfYmwDNGIlNQwRktC jbZX/eyeJvfuEUhNBG/UlgfYf+9bfNgxlT6495Xt52BZ3WaR7h/1Mq82kL5BA5sDLYy/yQ HWid2tWP24sqmg2RkKCFD9g+ASX67ysi7SHX+O661NE4JT9+J2VGtaFYK9clPQ== ARC-Seal: i=1; s=key1; d=yhetil.org; t=1620116335; a=rsa-sha256; cv=none; b=mZz3BXqPWDZ+2ClNkbxBoo6fo4ebO8HnX2+mLBMINM14PSAidcIFE5MHRdj9AQjhIB/ybk BPIa9sUZpZfcgfFVYce7L5yf1WY2M8CN2nUgTdoMW3ZDUCDL4QbE2gLeHulvIDBGrbtvIa EemO0X7SHE8fhwzeelCpait3D03GKhpp/ZvHPAF3f3TgUbYpdSwG3tn26Nry52keb9ml/S MkZk5IiqW7Hd8+pS/2ksw2Gxd68Ps+JTBhl6ey2tB2AwOMLLB5BBWaF2X0IuGtN4Yw4Ko3 UfsXK1lECyEvTxGQ9ALaUq6vJW3dht60uicyHK3Y2doRvadnHO2tpN0BQThC4w== ARC-Authentication-Results: i=1; aspmx1.migadu.com; dkim=fail ("body hash did not verify") header.d=gmail.com header.s=20161025 header.b=lnsEil0z; spf=pass (aspmx1.migadu.com: domain of notmuch-bounces@notmuchmail.org designates 144.217.243.247 as permitted sender) smtp.mailfrom=notmuch-bounces@notmuchmail.org X-Migadu-Spam-Score: 0.51 Authentication-Results: aspmx1.migadu.com; dkim=fail ("body hash did not verify") header.d=gmail.com header.s=20161025 header.b=lnsEil0z; dmarc=fail reason="SPF not aligned (relaxed)" header.from=gmail.com (policy=none); spf=pass (aspmx1.migadu.com: domain of notmuch-bounces@notmuchmail.org designates 144.217.243.247 as permitted sender) smtp.mailfrom=notmuch-bounces@notmuchmail.org X-Migadu-Queue-Id: 7952AD4E3 X-Spam-Score: 0.51 X-Migadu-Scanner: scn0.migadu.com X-TUID: so05xdgn38lp Signed-off-by: Felipe Contreras --- bindings/ruby/database.c | 16 ++++++++-------- bindings/ruby/defs.h | 37 +++++++++++++++++++++++-------------- bindings/ruby/directory.c | 4 ++-- bindings/ruby/init.c | 16 ++++++++++++++++ bindings/ruby/message.c | 6 +++--- bindings/ruby/messages.c | 4 ++-- bindings/ruby/query.c | 4 ++-- bindings/ruby/thread.c | 6 +++--- bindings/ruby/threads.c | 2 +- 9 files changed, 60 insertions(+), 35 deletions(-) diff --git a/bindings/ruby/database.c b/bindings/ruby/database.c index bb4273e6..4ecc8f78 100644 --- a/bindings/ruby/database.c +++ b/bindings/ruby/database.c @@ -23,7 +23,7 @@ VALUE notmuch_rb_database_alloc (VALUE klass) { - return Data_Wrap_Notmuch_Object (klass, NULL); + return Data_Wrap_Notmuch_Object (klass, ¬much_rb_database_type, NULL); } /* @@ -74,7 +74,7 @@ notmuch_rb_database_initialize (int argc, VALUE *argv, VALUE self) mode = NOTMUCH_DATABASE_MODE_READ_ONLY; } - rb_check_typeddata (self, ¬much_rb_object_type); + rb_check_typeddata (self, ¬much_rb_database_type); if (create) ret = notmuch_database_create (path, &database); else @@ -266,7 +266,7 @@ notmuch_rb_database_get_directory (VALUE self, VALUE pathv) ret = notmuch_database_get_directory (db, path, &dir); notmuch_rb_status_raise (ret); if (dir) - return Data_Wrap_Notmuch_Object (notmuch_rb_cDirectory, dir); + return Data_Wrap_Notmuch_Object (notmuch_rb_cDirectory, ¬much_rb_directory_type, dir); return Qnil; } @@ -293,7 +293,7 @@ notmuch_rb_database_add_message (VALUE self, VALUE pathv) ret = notmuch_database_index_file (db, path, NULL, &message); notmuch_rb_status_raise (ret); - return rb_assoc_new (Data_Wrap_Notmuch_Object (notmuch_rb_cMessage, message), + return rb_assoc_new (Data_Wrap_Notmuch_Object (notmuch_rb_cMessage, ¬much_rb_message_type, message), (ret == NOTMUCH_STATUS_DUPLICATE_MESSAGE_ID) ? Qtrue : Qfalse); } @@ -344,7 +344,7 @@ notmuch_rb_database_find_message (VALUE self, VALUE idv) notmuch_rb_status_raise (ret); if (message) - return Data_Wrap_Notmuch_Object (notmuch_rb_cMessage, message); + return Data_Wrap_Notmuch_Object (notmuch_rb_cMessage, ¬much_rb_message_type, message); return Qnil; } @@ -370,7 +370,7 @@ notmuch_rb_database_find_message_by_filename (VALUE self, VALUE pathv) notmuch_rb_status_raise (ret); if (message) - return Data_Wrap_Notmuch_Object (notmuch_rb_cMessage, message); + return Data_Wrap_Notmuch_Object (notmuch_rb_cMessage, ¬much_rb_message_type, message); return Qnil; } @@ -395,7 +395,7 @@ notmuch_rb_database_get_all_tags (VALUE self) rb_raise (notmuch_rb_eBaseError, "%s", msg); } - return Data_Wrap_Notmuch_Object (notmuch_rb_cTags, tags); + return Data_Wrap_Notmuch_Object (notmuch_rb_cTags, ¬much_rb_tags_type, tags); } /* @@ -419,5 +419,5 @@ notmuch_rb_database_query_create (VALUE self, VALUE qstrv) if (!query) rb_raise (notmuch_rb_eMemoryError, "Out of memory"); - return Data_Wrap_Notmuch_Object (notmuch_rb_cQuery, query); + return Data_Wrap_Notmuch_Object (notmuch_rb_cQuery, ¬much_rb_query_type, query); } diff --git a/bindings/ruby/defs.h b/bindings/ruby/defs.h index 6dbaa85d..fa7b9515 100644 --- a/bindings/ruby/defs.h +++ b/bindings/ruby/defs.h @@ -56,45 +56,54 @@ extern ID ID_db_mode; #endif /* !defined (RSTRING_PTR) */ extern const rb_data_type_t notmuch_rb_object_type; - -#define Data_Get_Notmuch_Object(obj, ptr) \ +extern const rb_data_type_t notmuch_rb_database_type; +extern const rb_data_type_t notmuch_rb_directory_type; +extern const rb_data_type_t notmuch_rb_filenames_type; +extern const rb_data_type_t notmuch_rb_query_type; +extern const rb_data_type_t notmuch_rb_threads_type; +extern const rb_data_type_t notmuch_rb_thread_type; +extern const rb_data_type_t notmuch_rb_messages_type; +extern const rb_data_type_t notmuch_rb_message_type; +extern const rb_data_type_t notmuch_rb_tags_type; + +#define Data_Get_Notmuch_Object(obj, type, ptr) \ do { \ - (ptr) = rb_check_typeddata ((obj), ¬much_rb_object_type); \ + (ptr) = rb_check_typeddata ((obj), (type)); \ if (RB_UNLIKELY (!(ptr))) { \ VALUE cname = rb_class_name (CLASS_OF ((obj))); \ rb_raise (rb_eRuntimeError, "%"PRIsVALUE" object destroyed", cname); \ } \ } while (0) -#define Data_Wrap_Notmuch_Object(klass, ptr) \ - TypedData_Wrap_Struct ((klass), ¬much_rb_object_type, (ptr)) +#define Data_Wrap_Notmuch_Object(klass, type, ptr) \ + TypedData_Wrap_Struct ((klass), (type), (ptr)) #define Data_Get_Notmuch_Database(obj, ptr) \ - Data_Get_Notmuch_Object ((obj), (ptr)) + Data_Get_Notmuch_Object ((obj), ¬much_rb_database_type, (ptr)) #define Data_Get_Notmuch_Directory(obj, ptr) \ - Data_Get_Notmuch_Object ((obj), (ptr)) + Data_Get_Notmuch_Object ((obj), ¬much_rb_directory_type, (ptr)) #define Data_Get_Notmuch_FileNames(obj, ptr) \ - Data_Get_Notmuch_Object ((obj), (ptr)) + Data_Get_Notmuch_Object ((obj), ¬much_rb_filenames_type, (ptr)) #define Data_Get_Notmuch_Query(obj, ptr) \ - Data_Get_Notmuch_Object ((obj), (ptr)) + Data_Get_Notmuch_Object ((obj), ¬much_rb_query_type, (ptr)) #define Data_Get_Notmuch_Threads(obj, ptr) \ - Data_Get_Notmuch_Object ((obj), (ptr)) + Data_Get_Notmuch_Object ((obj), ¬much_rb_threads_type, (ptr)) #define Data_Get_Notmuch_Messages(obj, ptr) \ - Data_Get_Notmuch_Object ((obj), (ptr)) + Data_Get_Notmuch_Object ((obj), ¬much_rb_messages_type, (ptr)) #define Data_Get_Notmuch_Thread(obj, ptr) \ - Data_Get_Notmuch_Object ((obj), (ptr)) + Data_Get_Notmuch_Object ((obj), ¬much_rb_thread_type, (ptr)) #define Data_Get_Notmuch_Message(obj, ptr) \ - Data_Get_Notmuch_Object ((obj), (ptr)) + Data_Get_Notmuch_Object ((obj), ¬much_rb_message_type, (ptr)) #define Data_Get_Notmuch_Tags(obj, ptr) \ - Data_Get_Notmuch_Object ((obj), (ptr)) + Data_Get_Notmuch_Object ((obj), ¬much_rb_tags_type, (ptr)) /* status.c */ void diff --git a/bindings/ruby/directory.c b/bindings/ruby/directory.c index 36ef3984..17d60d1d 100644 --- a/bindings/ruby/directory.c +++ b/bindings/ruby/directory.c @@ -92,7 +92,7 @@ notmuch_rb_directory_get_child_files (VALUE self) fnames = notmuch_directory_get_child_files (dir); - return Data_Wrap_Notmuch_Object (notmuch_rb_cFileNames, fnames); + return Data_Wrap_Notmuch_Object (notmuch_rb_cFileNames, ¬much_rb_filenames_type, fnames); } /* @@ -111,5 +111,5 @@ notmuch_rb_directory_get_child_directories (VALUE self) fnames = notmuch_directory_get_child_directories (dir); - return Data_Wrap_Notmuch_Object (notmuch_rb_cFileNames, fnames); + return Data_Wrap_Notmuch_Object (notmuch_rb_cFileNames, ¬much_rb_filenames_type, fnames); } diff --git a/bindings/ruby/init.c b/bindings/ruby/init.c index f3b2e5b1..a9f863eb 100644 --- a/bindings/ruby/init.c +++ b/bindings/ruby/init.c @@ -50,6 +50,22 @@ const rb_data_type_t notmuch_rb_object_type = { .wrap_struct_name = "notmuch_object", }; +#define define_type(id) \ + const rb_data_type_t notmuch_rb_ ## id ## _type = { \ + .wrap_struct_name = "notmuch_" #id, \ + .parent = ¬much_rb_object_type, \ + } + +define_type (database); +define_type (directory); +define_type (filenames); +define_type (query); +define_type (threads); +define_type (thread); +define_type (messages); +define_type (message); +define_type (tags); + /* * Document-module: Notmuch * diff --git a/bindings/ruby/message.c b/bindings/ruby/message.c index 1990bb97..b3aed604 100644 --- a/bindings/ruby/message.c +++ b/bindings/ruby/message.c @@ -89,7 +89,7 @@ notmuch_rb_message_get_replies (VALUE self) messages = notmuch_message_get_replies (message); - return Data_Wrap_Notmuch_Object (notmuch_rb_cMessages, messages); + return Data_Wrap_Notmuch_Object (notmuch_rb_cMessages, ¬much_rb_messages_type, messages); } /* @@ -125,7 +125,7 @@ notmuch_rb_message_get_filenames (VALUE self) fnames = notmuch_message_get_filenames (message); - return Data_Wrap_Notmuch_Object (notmuch_rb_cFileNames, fnames); + return Data_Wrap_Notmuch_Object (notmuch_rb_cFileNames, ¬much_rb_filenames_type, fnames); } /* @@ -226,7 +226,7 @@ notmuch_rb_message_get_tags (VALUE self) if (!tags) rb_raise (notmuch_rb_eMemoryError, "Out of memory"); - return Data_Wrap_Notmuch_Object (notmuch_rb_cTags, tags); + return Data_Wrap_Notmuch_Object (notmuch_rb_cTags, ¬much_rb_tags_type, tags); } /* diff --git a/bindings/ruby/messages.c b/bindings/ruby/messages.c index 3d1669ee..e04f3af1 100644 --- a/bindings/ruby/messages.c +++ b/bindings/ruby/messages.c @@ -53,7 +53,7 @@ notmuch_rb_messages_each (VALUE self) for (; notmuch_messages_valid (messages); notmuch_messages_move_to_next (messages)) { message = notmuch_messages_get (messages); - rb_yield (Data_Wrap_Notmuch_Object (notmuch_rb_cMessage, message)); + rb_yield (Data_Wrap_Notmuch_Object (notmuch_rb_cMessage, ¬much_rb_message_type, message)); } return self; @@ -76,5 +76,5 @@ notmuch_rb_messages_collect_tags (VALUE self) if (!tags) rb_raise (notmuch_rb_eMemoryError, "Out of memory"); - return Data_Wrap_Notmuch_Object (notmuch_rb_cTags, tags); + return Data_Wrap_Notmuch_Object (notmuch_rb_cTags, ¬much_rb_tags_type, tags); } diff --git a/bindings/ruby/query.c b/bindings/ruby/query.c index b0fb4ea7..79727d6a 100644 --- a/bindings/ruby/query.c +++ b/bindings/ruby/query.c @@ -142,7 +142,7 @@ notmuch_rb_query_search_threads (VALUE self) if (status) notmuch_rb_status_raise (status); - return Data_Wrap_Notmuch_Object (notmuch_rb_cThreads, threads); + return Data_Wrap_Notmuch_Object (notmuch_rb_cThreads, ¬much_rb_threads_type, threads); } /* @@ -163,7 +163,7 @@ notmuch_rb_query_search_messages (VALUE self) if (status) notmuch_rb_status_raise (status); - return Data_Wrap_Notmuch_Object (notmuch_rb_cMessages, messages); + return Data_Wrap_Notmuch_Object (notmuch_rb_cMessages, ¬much_rb_messages_type, messages); } /* diff --git a/bindings/ruby/thread.c b/bindings/ruby/thread.c index e09be147..f6bf7849 100644 --- a/bindings/ruby/thread.c +++ b/bindings/ruby/thread.c @@ -88,7 +88,7 @@ notmuch_rb_thread_get_toplevel_messages (VALUE self) if (!messages) rb_raise (notmuch_rb_eMemoryError, "Out of memory"); - return Data_Wrap_Notmuch_Object (notmuch_rb_cMessages, messages); + return Data_Wrap_Notmuch_Object (notmuch_rb_cMessages, ¬much_rb_messages_type, messages); } /* @@ -108,7 +108,7 @@ notmuch_rb_thread_get_messages (VALUE self) if (!messages) rb_raise (notmuch_rb_eMemoryError, "Out of memory"); - return Data_Wrap_Notmuch_Object (notmuch_rb_cMessages, messages); + return Data_Wrap_Notmuch_Object (notmuch_rb_cMessages, ¬much_rb_messages_type, messages); } /* @@ -209,5 +209,5 @@ notmuch_rb_thread_get_tags (VALUE self) if (!tags) rb_raise (notmuch_rb_eMemoryError, "Out of memory"); - return Data_Wrap_Notmuch_Object (notmuch_rb_cTags, tags); + return Data_Wrap_Notmuch_Object (notmuch_rb_cTags, ¬much_rb_tags_type, tags); } diff --git a/bindings/ruby/threads.c b/bindings/ruby/threads.c index 19e09a7e..d809b571 100644 --- a/bindings/ruby/threads.c +++ b/bindings/ruby/threads.c @@ -53,7 +53,7 @@ notmuch_rb_threads_each (VALUE self) for (; notmuch_threads_valid (threads); notmuch_threads_move_to_next (threads)) { thread = notmuch_threads_get (threads); - rb_yield (Data_Wrap_Notmuch_Object (notmuch_rb_cThread, thread)); + rb_yield (Data_Wrap_Notmuch_Object (notmuch_rb_cThread, ¬much_rb_thread_type, thread)); } return self; -- 2.31.0