diff options
Diffstat (limited to 'src/libtipidee/tipidee_method.c')
-rw-r--r-- | src/libtipidee/tipidee_method.c | 46 |
1 files changed, 46 insertions, 0 deletions
diff --git a/src/libtipidee/tipidee_method.c b/src/libtipidee/tipidee_method.c new file mode 100644 index 0000000..c5e7195 --- /dev/null +++ b/src/libtipidee/tipidee_method.c @@ -0,0 +1,46 @@ +/* ISC license. */ + +#include <string.h> +#include <stdlib.h> + +#include <tipidee/method.h> + +struct blah_s +{ + tipidee_method num ; + char const *str ; +} ; + +static struct blah_s const table[] = +{ + { .num = TIPIDEE_METHOD_CONNECT, .str = "CONNECT" }, + { .num = TIPIDEE_METHOD_DELETE, .str = "DELETE" }, + { .num = TIPIDEE_METHOD_GET, .str = "GET" }, + { .num = TIPIDEE_METHOD_HEAD, .str = "HEAD" }, + { .num = TIPIDEE_METHOD_OPTIONS, .str = "OPTIONS" }, + { .num = TIPIDEE_METHOD_POST, .str = "POST" }, + { .num = TIPIDEE_METHOD_PRI, .str = "PRI" }, + { .num = TIPIDEE_METHOD_PUT, .str = "PUT" }, + { .num = TIPIDEE_METHOD_TRACE, .str = "TRACE" }, +} ; + +static int blah_cmp (void const *key, void const *el) +{ + return strcmp((char const *)key, ((struct blah_s const *)el)->str) ; +} + +tipidee_method tipidee_method_tonum (char const *s) +{ + struct blah_s const *p = bsearch( + s, + table, + sizeof(table) / sizeof(struct blah_s), + sizeof(struct blah_s), + &blah_cmp) ; + return p ? p->num : TIPIDEE_METHOD_UNKNOWN ; +} + +char const *tipidee_method_tostr (tipidee_method m) +{ + return m < TIPIDEE_METHOD_UNKNOWN ? table[m].str : 0 ; +} |