import "./core.zc" import "./option.zc" import "./string.zc" raw { char *_z_env_get(char *name) { return getenv(name); } int _z_env_set(char *name, char *value, int overwrite) { return setenv(name, value, overwrite); } int _z_env_unset(char *name) { return unsetenv(name); } } extern fn _z_env_get(name: char*) -> char*; extern fn _z_env_set(name: char*, value: char*, overwrite: int) -> int; extern fn _z_env_unset(name: char*) -> int; @derive(Eq) enum EnvRes { ERR, OK, } struct Env {} impl Env { fn get(name: string) -> Option { let value: string = _z_env_get(name); if (value == NULL) { return Option::None(); } return Option::Some(value); } fn get_dup(name: string) -> Option { let value: string = _z_env_get(name); if (value == NULL) { return Option::None(); } let v = String::from(value); let o = Option::Some(v); v.forget(); return o; } fn set(name: string, value: string) -> EnvRes { let ret: int = _z_env_set(name, value, 1); return (ret == 0) ? EnvRes::OK() : EnvRes::ERR(); } fn unset(name: string) -> EnvRes { let ret: int = _z_env_unset(name); return (ret == 0) ? EnvRes::OK() : EnvRes::ERR(); } }