summaryrefslogtreecommitdiff
path: root/libubus.h
diff options
context:
space:
mode:
authorFelix Fietkau <nbd@openwrt.org>2011-03-27 20:03:18 +0200
committerFelix Fietkau <nbd@openwrt.org>2011-03-27 20:03:18 +0200
commite49b34f91267449e89d3f482b7c16bbf84bf90fd (patch)
tree9a2546e4d7655a574c74e52f63871c8dda156566 /libubus.h
parent7cd569acc8ecff9d75a722200b1a52d9d400edfc (diff)
downloadubus-e49b34f91267449e89d3f482b7c16bbf84bf90fd.tar.gz
simplify object signatures by reusing the parser policy to define them
Diffstat (limited to 'libubus.h')
-rw-r--r--libubus.h43
1 files changed, 18 insertions, 25 deletions
diff --git a/libubus.h b/libubus.h
index b58a4dc..cead476 100644
--- a/libubus.h
+++ b/libubus.h
@@ -26,43 +26,36 @@ typedef void (*ubus_data_handler_t)(struct ubus_request *req,
int type, struct blob_attr *msg);
typedef void (*ubus_complete_handler_t)(struct ubus_request *req, int ret);
-
-#define UBUS_SIGNATURE(_type, _name) { .type = _type, .name = _name }
-
-#define UBUS_METHOD_START(_name) UBUS_SIGNATURE(UBUS_SIGNATURE_METHOD, _name)
-#define UBUS_METHOD_END() UBUS_SIGNATURE(UBUS_SIGNATURE_END, NULL)
-
-#define UBUS_FIELD(_type, _name) UBUS_SIGNATURE(BLOBMSG_TYPE_ ## _type, _name)
-
-#define UBUS_ARRAY(_name) UBUS_FIELD(ARRAY, _name)
-#define UBUS_ARRAY_END() UBUS_SIGNATURE(UBUS_SIGNATURE_END, NULL)
-
-#define UBUS_TABLE_START(_name) UBUS_FIELD(TABLE, _name)
-#define UBUS_TABLE_END() UBUS_SIGNATURE(UBUS_SIGNATURE_END, NULL)
-
-#define UBUS_OBJECT_TYPE(_name, _signature) \
+#define UBUS_OBJECT_TYPE(_name, _methods) \
{ \
.name = _name, \
.id = 0, \
- .n_signature = ARRAY_SIZE(_signature), \
- .signature = _signature \
+ .n_methods = ARRAY_SIZE(_methods), \
+ .methods = _methods \
+ }
+
+#define UBUS_METHOD(_name, _handler, _policy) \
+ { \
+ .name = _name, \
+ .handler = _handler, \
+ .policy = _policy, \
+ .n_policy = ARRAY_SIZE(_policy) \
}
-struct ubus_signature {
- int type;
+struct ubus_method {
const char *name;
+ ubus_handler_t handler;
+
+ const struct blobmsg_policy *policy;
+ int n_policy;
};
struct ubus_object_type {
const char *name;
uint32_t id;
- int n_signature;
- const struct ubus_signature *signature;
-};
-struct ubus_method {
- const char *name;
- ubus_handler_t handler;
+ const struct ubus_method *methods;
+ int n_methods;
};
struct ubus_object {