#ifndef ULIB_ARGS_H_
#define ULIB_ARGS_H_

#include <stdint.h>
#include <stddef.h>
#include <stdbool.h>

char **args(void);
size_t argslen(void);

typedef struct {
  char *shortname;
  enum {
    ARG_STRING,
    ARG_BOOL,
    ARG_INT,
  } expected_value;
  void *ptr;
  bool end;
} Arg;

#define ARG(sn, ev, p) ((Arg){ \
    .shortname = (sn), \
    .expected_value = (ev), \
    .ptr = (void *)(p), \
    .end = false, \
  })

#define ARG_END() ((Arg){ .end = true, })

int32_t parse_args(char **argv, size_t argc, Arg *defs);

#endif // ULIB_ARGS_H_
