diff options
author | Felix Fietkau <nbd@openwrt.org> | 2011-03-27 20:03:18 +0200 |
---|---|---|
committer | Felix Fietkau <nbd@openwrt.org> | 2011-03-27 20:03:18 +0200 |
commit | e49b34f91267449e89d3f482b7c16bbf84bf90fd (patch) | |
tree | 9a2546e4d7655a574c74e52f63871c8dda156566 /libubus.h | |
parent | 7cd569acc8ecff9d75a722200b1a52d9d400edfc (diff) | |
download | ubus-e49b34f91267449e89d3f482b7c16bbf84bf90fd.tar.gz |
simplify object signatures by reusing the parser policy to define them
Diffstat (limited to 'libubus.h')
-rw-r--r-- | libubus.h | 43 |
1 files changed, 18 insertions, 25 deletions
@@ -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 { |