diff options
| author | Zuhaitz <zuhaitz.zechhub@gmail.com> | 2026-01-22 23:30:21 +0000 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2026-01-22 23:30:21 +0000 |
| commit | 3a4a72a38675893c3a1854d05c72b957a6bd9364 (patch) | |
| tree | 91c79a71830c72f8cedfa2b051e4bab4037dc5a4 /std/env.zc | |
| parent | 03df9c337355dc45a14e2c2fbe3276dfe890c68d (diff) | |
| parent | 2a4edc7f2c9241ec7845cecadef850a1db45b3dd (diff) | |
Merge pull request #97 from Burnett01/feat/std-env-for-environment-variables
feat: New std library "env" for accessing the process environment
Diffstat (limited to 'std/env.zc')
| -rw-r--r-- | std/env.zc | 65 |
1 files changed, 65 insertions, 0 deletions
diff --git a/std/env.zc b/std/env.zc new file mode 100644 index 0000000..7757be0 --- /dev/null +++ b/std/env.zc @@ -0,0 +1,65 @@ +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<string> { + var value: string = _z_env_get(name); + if (value == NULL) { + return Option<string>::None(); + } + + return Option<string>::Some(value); + } + + fn get_dup(name: string) -> Option<String> { + var value: string = _z_env_get(name); + if (value == NULL) { + return Option<String>::None(); + } + + var v = String::from(value); + var o = Option<String>::Some(v); + v.forget(); + + return o; + } + + fn set(name: string, value: string) -> EnvRes { + var ret: int = _z_env_set(name, value, 1); + + return (ret == 0) ? EnvRes::OK() : EnvRes::ERR(); + } + + fn unset(name: string) -> EnvRes { + var ret: int = _z_env_unset(name); + + return (ret == 0) ? EnvRes::OK() : EnvRes::ERR(); + } +} |
