From 941a58f1eca32e11ab1a7a835b4d38e8348bdfb3 Mon Sep 17 00:00:00 2001 From: Peter Saxton Date: Sat, 6 Jun 2020 13:25:02 +0100 Subject: add the os module for environment variables --- src/gleam/os.gleam | 45 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 src/gleam/os.gleam (limited to 'src') 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 +} -- cgit v1.2.3