ООО «КОДЖЕЗ» (COGEZ LTD), 2025
Продукт: «Code Generation Zemlya» -
мультифункциональная универсальная система генерации кода/текста
Программа для ЭВМ «Code Generation Zemlya» - это мультифункциональная
универсальная программа, предназначенная для генерации кода/текста
различных систем. Генерация кода происходит на основе входных данных
и наборов шаблонов. Поддерживаемые форматы файлов данных: JSON, YAML,
TOML. Программа свободно конвертирует данные из любого формата в
любой из выше указанных. Позволяет проверять, очищать, обогащать,
трансформировать и объединять данные из этих файлов (подготовка
данных для кодогенерации). Синтаксис встроенного языка шаблонизации
прост, имеет богатый специализированный функционал. Программа
позволяет разделять сгенерированный код на отдельные файлы,
предназначенные для загрузки в распределённые системы (гетерогенная
генерация кода). Программа предназначена для оптимизации и ускорения
процессов разработки качественного кода для крупных и средних
компаний.
Программа реализована как утилита командной строки. Визуального
интерфейса не имеет. Предназначена для использования разработчиками
и инженерами в целях оптимизации процессов создания и управления
кодовой базой предприятия, а так же, на серверах предприятия,
в том числе в составе микросервисов.
Программа написана на языке Rust. Использованы исключительно
библиотеки с открытым исходным кодом с лицензиями MIT и Apache 2.0,
которые не накладывают никаких ограничений на использование, в том
числе в коммерческих целях. Весь исходный код 100% на языке Rust,
включая использованные библиотеки.
Предпочтительно использование приложения в операционных системах:
Есть возможность работы под управлением других операционных систем,
а также в контейнеризованной или виртуальной среде.
Минимальные:
Рекомендуемые:
Компилятор Rust может собрать бинарный исполняемый файл под любую из
современных операционных систем и архитектур/разрядностей
процессоров. Приложение, откомпилированное под определённую
операционную систему, процессорную архитектуру и разрядность, будет
работать только на них.
Подробнее о вариантах компиляции можно узнать на на ресурсах:
Поддерживаемые цели (target's)
Программа поставляется в виде набора бинарных исполняемых файлов на
каком-либо носителе (USB Flash, по электронной почте и др.).
Бинарные файлы лежат в поддиректориях, например:
Для установки необходимо скопировать бинарный файл в какую-либо
директорию. Если требуется дать права на запуск, в OS Linux нужно
воспользоваться командой chmod +x <путь_к_файлу>
. Для OS Windows
давать права на запуск не требуется. Настройки приложение берёт из
переменных среды окружения. При запуске программа ищет файл .env
в текущей директории. Если такой файл есть, то переменные из этого
файла копируются в соответствующие переменный окружения процесса и
далее читаются программой для получения настроек. Файл .env
поставляется вместе с бинарными исполняемыми файлами и документацией.
В нём перечислены все переменные окружения и дано (в комментариях)
описание к каждой переменной с примерами.
Для DEVOPS инженеров есть ссылка по сборке image-файла docker,
где описано как собрать минимальный по размеру рабочий образ:
Самый маленький Docker образ Rust приложения
При запуске программы без параметров в командной строке выдаётся
справка по основным командам и разделам. Всё стандартно, как у всех
утилит командной строки. Набираем в командной строке zem
и
нажимаем Enter.
Чтобы запускать приложение из любой директории, набрав просто
zem
:Для Linux - скопируйте бинарный файл в одну из директорий из
переменной окруженияPATH
. Например, в/usr/bin
или в
~/.local/bin
.Для Windows - такая же логика, нужно посмотреть директории,
находящиеся в переменной окруженияPATH
и, либо добавить
директорию, где находится бинарный файл в эту переменную, либо
скопировать файл в одну из директорий перечисленных в переменной
PATH
. Либо запускать бинарный файл, используя полный или
относительный путь, например
./distrib/x86_64-unknown-linux-gnu/zem
.
При запуске программы видим примерно следующее (от версии к версии
список команд и разделов может меняться и расширяться):
Usage: zem <COMMAND>
Commands:
webserver Start webserver (aliases: "web", "w") data-process Data processing (aliases: "data-proc", "data", "d")
algorithm Calculation Algorithms (aliases: "alg", "a")
parse-templates Parse templates (aliases: "parse", "p")
generate Generate code (aliases: "gen", "g")
split-files Split files (aliases: "split", "s")
convert Convert data files (aliases: "conv", "c")
help Print this message or the help of the given
subcommand(s)
Options:
-h, --help Print help
-V, --version Print version
Команда - это самостоятельный модуль программы, который может
выполнять какие-либо действия.
Раздел - это список команд или других (вложенных) разделов.
Чтоб получить справку по команде/разделу, нужно запустить программу
с указанием команды/раздела без дополнительных опций или
воспользоваться командой zem help <имя_раздела_или_команды>
.
Оба способа работают одинаково.
Если вы видите в скобках указание алиасов команды, например, для
раздела data-process
указано (aliases: "data-proc", "data", "d")
,
то вызвать этот раздел (это может быть и команда) можно как с полным
синтаксисом zem data-process
, так и сокращённо zem data-proc
или
zem data
или zem d
(это совершенно идентичные вызовы).
Давайте наберём zem d
и увидим что содержится в этом разделе:
Usage: zem data-process <COMMAND>
Commands:
keys-operation Operations on keys (aliases: "keys-op", "keys", "k")
help Print this message or the help of the given
subcommand(s)
Мы видим ещё одну команду keys-operation
со своими алиасами.
Давайте посмотрим, что эта команда из себя представляет. Набираем
zem data-process keys-operation
или кратко zem d k
(используем короткие алиасы). Видим следующий вывод:
Operations on keys (aliases: "keys-op", "keys", "k")
Usage: zem data-process keys-operation [OPTIONS]
--input <[KEY=]INPUT_FILE>... --output <OUTPUT_FILE>
Options:
-i, --input <[KEY=]INPUT_FILE>...
(R) Input list of paths to files JSON or YAML formats (set
multiple paths to files separated by a space, KEYs are not
required)
-o, --output <OUTPUT_FILE>
(R) Output JSON file path, or can use "stdout" or "null"
literals
-p, --pretty
(F) Use human-readable (pretty) format for output JSON file
(by default: in one line)
-u, --upper
(F) Use convert keys to Uppercase (conflict with flag
"lower")
-l, --lower
(F) Use convert keys to Lowercase (conflict with flag
"upper")
-t, --trim
(F) Use Trimming keys (trimming keys from leading and
trailing white spaces)
-a, --as-array
(F) Use Array for output data (by default: use Mapping)
-s, --serial
(F) Use Serial execution (by default: use Parallel
execution)
Как это читать/понимать?
[
» и «]
» указываются НЕ обязательные<
» и «>
» указаны ОБЯЗАТЕЛЬНЫЕ...
» используется для обозначения множества--input
(из[KEY=]
» означает, что ключ для каждого файла(R)
» отмечаются required (обязательные) аргументы.(F)
» отмечаются flag (флаги). Флаги не принимаютzem d k --trim --pretty --upper ...
, так иzem d k -p -t -u ...
или все вместе послеzem d k -utp ...
.Для закрепления давайте составим запуск субкоманды
keys-operations
из раздела data-process
. Полностью это будет
выглядеть примерно так:
zem data keys -pltsa \
-i path/to/file1.json key2=path/to/file2.yaml \
"key 3=path/with space/file 3.yaml" \
-o temp/output/all_in_one.json
Пройдёмся по концепциям работы программы:
stderr
.0
»), при ошибках - какую-то другую цифру. Всё вТеперь средствами операционной системы перенаправим потоки вывода
в файлы. Это делается легко. Все потоки программы имеют свои номера:
0
(ноль), он1
(один).2
(два), в негоДавайте разберёмся как эти потоки можно перенаправить. Есть так
называемые директивы перенаправления потоков. Их всего две: «>
»
и «>>
». Первая перезаписывает файл (затирает), вторая дописывает
в конец. Теперь, зная это, мы можем отправить логи работы
программы в файл (возьмём прошлый пример):
zem data keys -pltsa \
-i path/to/file1.json key2=path/to/file2.yaml \
'key 3=path/with space/file 3.yaml' \
-o output/data/all_in_one.json \
1>output/rendered/output.txt 2>>logs/zem.log
Всё, результаты работы программы записываются в соответствующие
файлы.
А что, если нам нужно сначала обработать файлы, а потом
сгенерировать код по шаблонам? Причём не генерировать код, если
предыдущий шаг выполнился с ошибкой. Это делается так. Есть два
оператора, которые помогут: логическое «и» - «&&
»
и логическое «или» - «||
». Давайте разберём на примере:
zem conv y2j -p data/e3ddec83-91a8-43f3-8dfd-608f5df5e2bb.yaml \
out/converted/e3ddec83-91a8-43f3-8dfd-608f5df5e2bb.json && \
zem alg poar -p \
-i data/e3ddec83-91a8-43f3-8dfd-608f5df5e2bb.yaml data/ref.json \
-o out/data/e3ddec83-91a8-43f3-8dfd-608f5df5e2bb.json && \
zem parse templates/example/main.jinja && \
zem gen -i out/data/e3ddec83-91a8-43f3-8dfd-608f5df5e2bb.json \
-t templates/example/main.jinja \
-o out/rendered/e3ddec83-91a8-43f3-8dfd-608f5df5e2bb.txt && \
zem split \
-i out/rendered/e3ddec83-91a8-43f3-8dfd-608f5df5e2bb.txt \
-w out/rendered || \
echo Error: Process finished with exit code $?;
Мы разделяем запуски программы логическим «и» и логическим «или» и
с помощью «echo
» печатаем код возврата (этот код возврата
последнего запуска находится в переменной окружения «$?
»). Если
какой-либо из запусков программы "упадёт" с ошибкой (код возврата
не нулевой), то в консоли напечатается
«Error: Process finished with exit code <не_нулевой_код_возврата>
».
Кроме того, к каждой отдельной команде можно добавить
перенаправление потоков вывода («>
» или «>>
») в файлы.
Подробнее смотрите в руководстве по командной строке операционной
системы.
Примечание: На Unix, Linux, Windows и MacOS всё это работает,
но, может и отличаться в некоторых деталях. Если не работает -
обратитесь к справочному руководству по вашей операционной
системе, интернету или за помощью к разработчику.
stdout
или в null
[KEY=]
» может быть[KEY=]
» этому файлу. На втором уровне вложенности ужеZEM_TAG_FOR_SPLIT
.\n
»./
»). Путь может быть относительным (от--pretty
»(-p
) и удобно читайте. Или наоборот, хотите--pretty
»).--pretty
»). Для форматов--pretty
» не нужен, так как они итак вООО "КОДЖЕЗ", 2025. Все права защищены.
COGEZ LTD, 2025. All right reserved.
Программа защищена авторским правом действующего законодательства
Российской Федерации, и имеет Свидетельство о государственной
регистрации программы для ЭВМ № 2024681535. Исключительные права
пренадлежат ООО «КОДЖЕЗ». Нелегальное использование, копирование и
распространение преследуется законом.