refactoring (in progress, tbf)
[src/app-framework-binder.git] / src / afb-req-itf.h
1 /*
2  * Copyright 2016 IoT.bzh
3  * Author: José Bollo <jose.bollo@iot.bzh>
4  *
5  * Licensed under the Apache License, Version 2.0 (the "License");
6  * you may not use this file except in compliance with the License.
7  * You may obtain a copy of the License at
8  *
9  *   http://www.apache.org/licenses/LICENSE-2.0
10  *
11  * Unless required by applicable law or agreed to in writing, software
12  * distributed under the License is distributed on an "AS IS" BASIS,
13  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  * See the License for the specific language governing permissions and
15  * limitations under the License.
16  */
17
18 struct afb_arg {
19         const char *name;
20         const char *value;
21         size_t size;
22         int is_file;
23 };
24
25 struct afb_req_itf {
26         struct afb_arg (*get)(void *data, const char *name);
27         void (*iterate)(void *data, int (*iterator)(void *closure, struct afb_arg arg), void *closure);
28 };
29
30 struct afb_req {
31         const struct afb_req_itf *itf;
32         void *data;
33 };
34
35 static inline struct afb_arg afb_req_get(struct afb_req req, const char *name)
36 {
37         return req.itf->get(req.data, name);
38 }
39
40 static inline const char *afb_req_argument(struct afb_req req, const char *name)
41 {
42         return afb_req_get(req, name).value;
43 }
44
45 static inline int afb_req_is_argument_file(struct afb_req req, const char *name)
46 {
47         return afb_req_get(req, name).is_file;
48 }
49
50 static inline void afb_req_iterate(struct afb_req req, int (*iterator)(void *closure, struct afb_arg arg), void *closure)
51 {
52         req.itf->iterate(req.data, iterator, closure);
53 }
54