import "./core.zc" import "./option.zc" import "./string.zc" include // Direct externs with const char* to match C stdlib declarations extern fn getenv(name: const char*) -> char*; extern fn setenv(name: const char*, value: const char*, overwrite: int) -> int; extern fn unsetenv(name: const char*) -> int; @derive(Eq) enum EnvRes { ERR, OK, } struct Env {} impl Env { fn get(name: string) -> Option { let value: string = getenv(name); if (value == NULL) { return Option::None(); } return Option::Some(value); } fn get_dup(name: string) -> Option { let value: string = getenv(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 = setenv(name, value, 1); return (ret == 0) ? EnvRes::OK() : EnvRes::ERR(); } fn unset(name: string) -> EnvRes { let ret: int = unsetenv(name); return (ret == 0) ? EnvRes::OK() : EnvRes::ERR(); } }