diff options
author | Peter Saxton <peterhsaxton@gmail.com> | 2020-06-06 13:25:02 +0100 |
---|---|---|
committer | Louis Pilfold <louis@lpil.uk> | 2020-06-07 20:36:07 +0100 |
commit | 941a58f1eca32e11ab1a7a835b4d38e8348bdfb3 (patch) | |
tree | 27797070686c9d6d358778dcf3bf3e807a59660f | |
parent | 68fc81031ce4c5a4af9dca8a43b8906d70770e8e (diff) | |
download | gleam_stdlib-941a58f1eca32e11ab1a7a835b4d38e8348bdfb3.tar.gz gleam_stdlib-941a58f1eca32e11ab1a7a835b4d38e8348bdfb3.zip |
add the os module for environment variables
-rw-r--r-- | src/gleam/os.gleam | 45 | ||||
-rw-r--r-- | test/gleam/os_test.gleam | 15 |
2 files changed, 60 insertions, 0 deletions
diff --git a/src/gleam/os.gleam b/src/gleam/os.gleam new file mode 100644 index 0000000..c5a8c5a --- /dev/null +++ b/src/gleam/os.gleam @@ -0,0 +1,45 @@ +//// Function to interact with the host operating system. + +import gleam/list +import gleam/string + +// Internal type for erlang interop. +external type CharList + +external fn os_getenv() -> List(CharList) = + "os" "getenv" + +external fn os_putenv(key: CharList, value: CharList) -> Bool = + "os" "putenv" + +external fn os_unsetenv(key: CharList) -> Bool = + "os" "unsetenv" + +external fn char_list_to_string(CharList) -> String = + "erlang" "list_to_binary" + +external fn string_to_char_list(String) -> CharList = + "erlang" "binary_to_list" + +/// Return all environment variables set on the system. +pub fn get_env() -> List(tuple(String, String)) { + list.map( + os_getenv(), + fn(char_list) { + assert Ok(value) = string.split_once(char_list_to_string(char_list), "=") + value + }, + ) +} + +/// Set an environment variable. +pub fn put_env(key: String, value: String) -> Nil { + let True = os_putenv(string_to_char_list(key), string_to_char_list(value)) + Nil +} + +/// Delete an environment variable. +pub fn delete_env(key: String) -> Nil { + let True = os_unsetenv(string_to_char_list(key)) + Nil +} diff --git a/test/gleam/os_test.gleam b/test/gleam/os_test.gleam new file mode 100644 index 0000000..961e984 --- /dev/null +++ b/test/gleam/os_test.gleam @@ -0,0 +1,15 @@ +import gleam/list +import gleam/os +import gleam/should + +pub fn env_test() { + os.put_env("GLEAM_TEST", "hello") + os.get_env() + |> list.key_find("GLEAM_TEST") + |> should.equal(Ok("hello")) + + os.delete_env("GLEAM_TEST") + os.get_env() + |> list.key_find("GLEAM_TEST") + |> should.equal(Error(Nil)) +} |