diff options
author | Profpatsch <mail@profpatsch.de> | 2022-06-19T13·07+0200 |
---|---|---|
committer | Profpatsch <mail@profpatsch.de> | 2022-06-19T13·29+0000 |
commit | 3c3713c69f9a7fb0c14ef463ab520de7f601e1e9 (patch) | |
tree | 927dcba81970893fab3be1f1020a258837c75633 /users/Profpatsch/ini | |
parent | 2cf67e113e94435c0169141d0d7f5cf6b63f6655 (diff) |
refactor(users/Profpatsch/aerc): move ini stuff out r/4247
First shot at generating a dhall FFI standard. Change-Id: I1cdf7eeaa6b2668a49282315f308a8e51abd0cf6 Reviewed-on: https://cl.tvl.fyi/c/depot/+/5887 Reviewed-by: Profpatsch <mail@profpatsch.de> Tested-by: BuildkiteCI
Diffstat (limited to 'users/Profpatsch/ini')
-rw-r--r-- | users/Profpatsch/ini/default.nix | 6 | ||||
-rw-r--r-- | users/Profpatsch/ini/ini.dhall | 36 |
2 files changed, 42 insertions, 0 deletions
diff --git a/users/Profpatsch/ini/default.nix b/users/Profpatsch/ini/default.nix new file mode 100644 index 000000000000..e1a7a1a7b6b7 --- /dev/null +++ b/users/Profpatsch/ini/default.nix @@ -0,0 +1,6 @@ +{ depot, ... }: +{ + externs = { + renderIni = depot.users.Profpatsch.toINI { }; + }; +} diff --git a/users/Profpatsch/ini/ini.dhall b/users/Profpatsch/ini/ini.dhall new file mode 100644 index 000000000000..f2efbc0af4f1 --- /dev/null +++ b/users/Profpatsch/ini/ini.dhall @@ -0,0 +1,36 @@ +let lib = ../dhall/lib.dhall + +let NameVal = λ(T : Type) → { name : Text, value : T } + +let ValueList = λ(T : Type) → List (NameVal T) + +let Section = ValueList Text + +let Sections = ValueList Section + +let Ini = { globalSection : Section, sections : Sections } + +let + -- Takes to INI files and merges their global sections and their section lists, + -- without duplicating by section name. + appendInis = + λ(inis : List Ini) → + { globalSection = + lib.List/concat + (NameVal Text) + (lib.List/map Ini Section (λ(i : Ini) → i.globalSection) inis) + , sections = + lib.List/concat + (NameVal Section) + (lib.List/map Ini Sections (λ(i : Ini) → i.sections) inis) + } + : Ini + +let + -- Signatures of functions that are input via FFI. + Externs = + { -- given a dsl of functions to create an Ini, render the ini file + renderIni : Ini → Text + } + +in { NameVal, ValueList, Section, Sections, Ini, appendInis, Externs } |