From 4abbc79f1671c3f764c074fbcdf4c4ba039cddd7 Mon Sep 17 00:00:00 2001 From: RGBCube Date: Sun, 19 Mar 2023 13:13:34 +0300 Subject: [PATCH] Chore: Start rewriting --- .gitignore | 4 ++- src2/config/mapping.v | 60 +++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 63 insertions(+), 1 deletion(-) create mode 100644 src2/config/mapping.v diff --git a/.gitignore b/.gitignore index ea6fef4..77a7b08 100644 --- a/.gitignore +++ b/.gitignore @@ -5,7 +5,9 @@ !src/ !src/config/ -!src/config/mapping + +!src2/ +!src2/config/ !.editorconfig !openttd.cfg diff --git a/src2/config/mapping.v b/src2/config/mapping.v new file mode 100644 index 0000000..4fd9f57 --- /dev/null +++ b/src2/config/mapping.v @@ -0,0 +1,60 @@ +module config + +pub type Mapping = map[string]map[string]Map + +// TODO: &Mapping +pub fn (mpng Mapping) unmap(mapped map[string]map[string]string) !map[string]map[string]string { + mut unmapped := map[string]map[string]string{} + + for mapped_section, mapped_fields in mapped { + if mapped_section !in mpng { + return error('Unknown section: ${mapped_section}') + } + + for mapped_field, mapped_value in mapped_fields { + if mapped_field !in mpng[mapped_section] { + return error('Unknown field: ${mapped_section}.${mapped_field}') + } + + mapped_field_mapping := mpng[mapped_section][mapped_field] + + unmapped[mapped_field_mapping.section()][mapped_field_mapping.field()] = mapped_field_mapping.transform(mapped_value) + } + } + + return unmapped +} + +pub enum ValueType { + string + integer + boolean +} + +// Maps one ManageTTD -> OpenTTD config field. +[noinit] +pub struct Map { + equivalent [2]string [required] + transformer ?fn (string) string +pub: + @type ValueType = .string + documentation string [required] +} + +[inline] +pub fn (m &Map) section() string { + return m.equivalent[0] +} + +[inline] +pub fn (m &Map) field() string { + return m.equivalent[1] +} + +pub fn (m &Map) transform(s string) string { + return if transform_fn := m.transformer { + transform_fn(s) + } else { + s + } +}