Files
MFTECmd-for-Linux/internal/cmd/cmd.go
Grigoryev Ilya Alekseevich b8997e1ac9 refactor
2026-03-31 23:22:50 +05:00

114 lines
4.8 KiB
Go

package cmd
import (
"fmt"
"strings"
)
// Проверка пути на пустое значение
// Принимает на вход экземпляр bodyOutput и возвращает флаг, означающий непустой путь
func (o CSVOutput) Enabled() bool {
return strings.TrimSpace(o.CSVPath) != ""
}
// Проверка пути на пустое значение
// Принимает на вход экземпляр bodyOutput и возвращает флаг, означающий непустой путь
func (o JSONOutput) Enabled() bool {
return strings.TrimSpace(o.JSONPath) != ""
}
// Проверка пути на пустое значение.
// Принимает на вход экземпляр bodyOutput и возвращает флаг, означающий непустой путь
func (o BodyOutput) Enabled() bool {
return strings.TrimSpace(o.BodyPath) != ""
}
// Валидация флагов
// Принимает на вход указатель на экземпляр mftParseCmd и возвращает ошибку
func (c *MFTParseCmd) Validate() error {
if !c.CSVOutput.Enabled() && !c.JSONOutput.Enabled() && !c.BodyOutput.Enabled() {
return fmt.Errorf("mft parse requires at least one output: --csv, --json, or --body") // Проверка на наличие флага формата файла вывода
}
if c.BodyOutput.Enabled() && strings.TrimSpace(c.DriveLetter) == "" {
return fmt.Errorf("--drive-letter is required when using --body") // Проверка наличия буквы диска в Bodyfile
}
if c.FileList && !c.CSVOutput.Enabled() {
return fmt.Errorf("--file-list requires --csv") // Проверка CSV вывода для листинга файлов
}
if (c.DumpResidentFiles || c.IncludeResidentData) && !c.CSVOutput.Enabled() && !c.JSONOutput.Enabled() {
return fmt.Errorf("--dump-resident-files and --include-resident-data require --csv or --json") // Проверка CSV или JSON вывода для резидентных файлов
}
if c.ResidentMaxBytes <= 0 || c.ResidentMaxBytes > MaxResidentDataBytes {
return fmt.Errorf("--resident-max-bytes must be between 1 and %d", MaxResidentDataBytes) // Проверка максимального значения размера резидентных файлов
}
return nil
}
// Валидация флагов
// Принимает на вход указатель на экземпляр mftShowCmd и возвращает ошибку
func (c *MFTShowCmd) Validate() error {
return nil
}
// Валидация флагов
// Принимает на вход указатель на экземпляр mftExportRecordCmd и возвращает ошибку
func (c *MFTExportRecordCmd) Validate() error {
return nil
}
// Валидация флагов
// Принимает на вход указатель на экземпляр journalParseCmd и возвращает ошибку
func (c *JournalParseCmd) Validate() error {
if !c.CSVOutput.Enabled() && !c.JSONOutput.Enabled() {
return fmt.Errorf("j parse requires at least one output: --csv or --json") // Проверка вывода
}
return nil
}
// Валидация флагов
// Принимает на вход указатель на экземпляр bootParseCmd и возвращает ошибку
func (c *BootParseCmd) Validate() error {
return nil
}
// Валидация флагов
// Принимает на вход указатель на экземпляр sdsParseCmd и возвращает ошибку
func (c *SDSParseCmd) Validate() error {
if !c.CSVOutput.Enabled() {
return fmt.Errorf("sds parse requires --csv") // Проверка вывода в CSV
}
return nil
}
// Валидация флагов
// Принимает на вход указатель на экземпляр sdsShowCmd и возвращает ошибку
func (c *SDSShowCmd) Validate() error {
return nil
}
// Валидация флагов
// Принимает на вход указатель на экземпляр i30ParseCmd и возвращает ошибку
func (c *I30ParseCmd) Validate() error {
if !c.CSVOutput.Enabled() {
return fmt.Errorf("i30 parse requires --csv") // Проверка вывода в CSV
}
return nil
}
// Валидация флагов.
// Принимает на вход указатель на экземпляр logFileParseCmd и возвращает ошибку
func (c *LogFileParseCmd) Validate() error {
return nil
}
// Валидация команд.
// Принимает на вход объект и при наличии метода Validate производит валидацию
func ValidateLeaf(cmd any) error {
switch v := cmd.(type) {
case interface{ Validate() error }:
return v.Validate()
default:
return nil
}
}