#ifndef _clish_var_h
#define _clish_var_h

#include "lub/types.h"
#include "lub/bintree.h"
#include "clish/action.h"

typedef struct clish_var_s clish_var_t;

/*=====================================
 * VAR INTERFACE
 *===================================== */
/*-----------------
 * meta functions
 *----------------- */
int clish_var_bt_compare(const void *clientnode, const void *clientkey);
void clish_var_bt_getkey(const void *clientnode, lub_bintree_key_t * key);
size_t clish_var_bt_offset(void);
clish_var_t *clish_var_new(const char *name);
/*-----------------
 * methods
 *----------------- */
void clish_var_delete(clish_var_t *instance);
void clish_var_dump(const clish_var_t *instance);
/*-----------------
 * attributes
 *----------------- */
const char *clish_var__get_name(const clish_var_t *instance);
void clish_var__set_dynamic(clish_var_t *instance, bool_t defval);
bool_t clish_var__get_dynamic(const clish_var_t *instance);
void clish_var__set_value(clish_var_t *instance, const char *value);
char *clish_var__get_value(const clish_var_t *instance);
clish_action_t *clish_var__get_action(const clish_var_t *instance);
void clish_var__set_saved(clish_var_t *instance, const char *value);
char *clish_var__get_saved(const clish_var_t *instance);

#endif /* _clish_var_h */