// Copyright (C) 2023 WYATT GROUP // Please see the AUTHORS file for details. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . import 'package:brick_generator/core/reader.dart'; import 'package:brick_generator/models/brick_variable.dart'; import 'package:brick_generator/models/brickgen_config.dart'; import 'package:yaml/yaml.dart'; const _nameKey = 'name'; const _descriptionKey = 'description'; const _versionKey = 'version'; const _varsKey = 'vars'; const _brickgenKey = 'brickgen'; class BrickConfig { BrickConfig({ required this.name, required this.description, required this.version, required this.variables, required this.brickgenConfig, }); factory BrickConfig.parse(YamlMap? data) { if (data == null) { throw ArgumentError.notNull('data'); } final variables = (data[_varsKey] as YamlMap?) ?.entries .map( (e) => BrickVariable.fromYaml(e.key as String, e.value as YamlMap?), ) .toList(); final config = BrickConfig( name: data[_nameKey] as String? ?? '', description: data[_descriptionKey] as String? ?? '', version: data[_versionKey] as String? ?? '', variables: variables ?? [], brickgenConfig: BrickgenConfig.parse(data[_brickgenKey] as YamlMap?), ); return config; } factory BrickConfig.fromFile(String? path) { if (path == null) { throw ArgumentError.notNull('path'); } final config = YamlReader.read(path); return BrickConfig.parse(config); } String name; String description; String version; List> variables; BrickgenConfig brickgenConfig; String toMason() { final content = StringBuffer(''' name: $name description: $description version: $version '''); if (variables.isNotEmpty) { content.writeln('vars:'); for (final variable in variables) { content.writeln(variable.toMason()); } } return content.toString(); } @override String toString() => 'BrickConfig(name: $name, ' 'description: $description, version: $version, variables: $variables, ' 'brickgenConfig: $brickgenConfig)'; }