GoSetup-bubble/types/types.go

113 lines
7.3 KiB
Go
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package types
import "github.com/charmbracelet/bubbles/key"
// PackageApplication структура описывающая настраиваемое приложение
type PackageApplication struct {
Name string `yaml:"name"` //Имя приложения
Version string `yaml:"version"` //Версия приложения
Description string `yaml:"description"` //Описание приложения
Icon string `yaml:"icon"` //Иконка приложения
Type string `yaml:"type"` //Тип приложения
ConfFiles []ConfFile `yaml:"conf-files"` //Файлы конфигурации
Variables []Variable `yaml:"variables"` //Переменные настройки
Sections []Section `yaml:"sections"` //Секции настройки
Changed bool `yaml:"-"` //Вносились ли изменения
}
// ConfFile структура описывающая используемый приложением конфигурационный файл
type ConfFile struct {
File string `yaml:"file"` //Путь файла
Type string `yaml:"type"` //Тип файла
Name string `yaml:"name"` //Имя файла
}
// Variable структура описывающая переменную для настройки приложения
type Variable struct {
Name string `yaml:"name"` //Имя переменной
Type string `yaml:"type"` //Тип значения переменной
Default string `yaml:"default"` //Значение по умолчанию
Value interface{} `yaml:"-"` //Используемое значение
}
// Section структура описывающая секцию настройки приложения
type Section struct {
Name string `yaml:"name"` //Имя секции
Type string `yaml:"type"` //Тип секции
Description string `yaml:"description"` //Описание секции
Fields []SectionField `yaml:"fields"` //Поля секции
Paragraphs []string `yaml:"paragraphs"` //Параграфы для описания приложения
Parent []string `yaml:"parent"` //Переменные от которых зависит секция
Condition string `yaml:"condition"` //Условие отображения секции
Actions []SectionAction `yaml:"actions"` //Действия выполняемые после перехода с секции
}
// SectionField структура описывающая поле секции
type SectionField struct {
Name string `yaml:"name"` //Имя поля
VariableName string `yaml:"variable-name"` //Имя переменной, хранящей значение поля
FieldType string `yaml:"field-type"` //Тип поля
FileFieldExtensions []string `yaml:"file-field-extensions"` //Расширения файла для поля выбора файла
Description string `yaml:"description"` //Описание поля
Condition string `yaml:"condition"` //Условие отображения поля
Options []interface{} `yaml:"options"` //Список опций
SpecialValue string `yaml:"special-value"` //Специального значения
Compute string `yaml:"compute"` //Строка вычислений значения
Validate []FieldValidate `yaml:"validate"` //Правила проверки значения
Parent []string `yaml:"parent"` //Переменные от которых зависит поле
Variable *Variable `yaml:"-"` //Указатель на переменную
Active bool `yaml:"-"` //Активно ли поле для получения значения
}
// FieldValidate структура описывающая правила проверки значения поля
type FieldValidate struct {
Rule string `yaml:"rule"` //Правило проверки
Message string `yaml:"message"` //Сообщение ошибки
}
// SectionAction структура описывающая действия к выполнению
type SectionAction struct {
Name string `yaml:"name"` //Имя действия
Type string `yaml:"type"` //Тип действия
Command string `yaml:"command"` //Команда для выполнения
FileTarget string `yaml:"file-target"` //Целевой файл редактирования
FileSource string `yaml:"file-source"` //Файл источник
Condition string `yaml:"condition"` //Условие для выполнения
RunAs string `yaml:"run-as"` //Пользователь для запуска
RequirePackages []string `yaml:"require-packages"` //Требуемые пакеты
Error string `yaml:"error"` //Ошибка выполнения
AssignTo string `yaml:"assign-to"` //Переменная, которой надо присвоить значение
}
// BoolValidateFunc функция, которая возвращает ошибку, если данные checkbox неверны
type BoolValidateFunc func(bool) error
// MainKeyMap структура главных клавиш
type MainKeyMap struct {
Up key.Binding //Вверх, прошлый элемент
Down key.Binding //Вниз, следующий элемент
Left key.Binding //Влево
Right key.Binding //Вправо
Top key.Binding //На самый верх
Bottom key.Binding //В самый низ
Confirm key.Binding //Клавиша подтверждения
Help key.Binding //Отображение помощи
Log key.Binding //Отображение лого
Close key.Binding //Закрыть
Exit key.Binding //Выйти
}
// MainKeys используемые клавиши
var MainKeys = MainKeyMap{
Up: key.NewBinding(key.WithKeys("up", "shift+tab"), key.WithHelp("up", "move up")),
Down: key.NewBinding(key.WithKeys("down", "tab"), key.WithHelp("down", "move down")),
Left: key.NewBinding(key.WithKeys("left"), key.WithHelp("left", "move left")),
Right: key.NewBinding(key.WithKeys("right"), key.WithHelp("right", "move right")),
Top: key.NewBinding(key.WithKeys("home"), key.WithHelp("top", "move top")),
Bottom: key.NewBinding(key.WithKeys("end"), key.WithHelp("bottom", "move bottom")),
Confirm: key.NewBinding(key.WithKeys("enter"), key.WithHelp("enter", "confirm")),
Help: key.NewBinding(key.WithKeys("?", "ctrl+h"), key.WithHelp("?/ctrl+h", "help")),
Log: key.NewBinding(key.WithKeys("ctrl+l"), key.WithHelp("ctrl+l", "show/hide log window")),
Close: key.NewBinding(key.WithKeys("esc"), key.WithHelp("esc", "close")),
Exit: key.NewBinding(key.WithKeys("ctrl+c", "ctrl+q"), key.WithHelp("ctrl+c/ctrl+q", "quit")),
}