summary refs log tree commit diff
path: root/src/method.c
blob: be514bc668b33aa6782af2c9c32fb0d47a7d1485 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
#include "libhttpc.h"

#include <string.h>


#define METHOD(X) LibHTTPC_Method_##X

#define S_OPTIONS   "OPTIONS"
#define S_GET       "GET"
#define S_HEAD      "HEAD"
#define S_POST      "POST"
#define S_PUT       "PUT"
#define S_DELETE    "DELETE"
#define S_TRACE     "TRACE"
#define S_CONNECT   "CONNECT"

#define CHECK()         \
    do                  \
    {                   \
        CASE(OPTIONS);  \
        CASE(GET);      \
        CASE(HEAD);     \
        CASE(POST);     \
        CASE(PUT);      \
        CASE(DELETE);   \
        CASE(TRACE);    \
        CASE(CONNECT);  \
    } while(0)

enum LibHTTPC_Method LibHTTPC_loadMethod(const char *method)
{
#define CASE(X) if (!strcmp((S_##X), method)) return METHOD(X)
    CHECK();
#undef CASE
    return METHOD(EXTENSION_METHOD);
}

const char *LibHTTPC_dumpMethod(enum LibHTTPC_Method method)
{
    switch (method)
    {
#define CASE(X) case METHOD(X): return S_##X
    CHECK();
#undef CASE
    }
    return NULL;
}