Line data Source code
1 : import 'package:enum_assist/src/templates/template_core.dart'; 2 : import 'package:enum_assist/src/util/util.dart'; 3 : 4 : /// {@template enum_assist.map_template} 5 : /// Returns the map extension template 6 : /// {@endtemplate} 7 : class MapTemplate extends TemplateCoreSimple<_Item> { 8 : /// {@macro enum_assist.map_template} 9 0 : MapTemplate(String enumName, Iterable<String> fields) 10 0 : : super(enumName, fields); 11 : 12 0 : @override 13 : StringBuffer writeTemplate(StringBuffer buffer) { 14 : buffer 15 0 : ..writeln('/// Map of all values of the enum') 16 0 : ..writeobj( 17 : 'T map<T extends Object?>', 18 : open: '({', 19 0 : body: (mapBuffer, tab) { 20 0 : mapBuffer.writeln(map((i) => tabn(i.arg, tab))); 21 : }, 22 : close: '})', 23 : ) 24 0 : ..writeobj( 25 : '', 26 0 : body: (bodyBuffer, bodyTab) { 27 0 : bodyBuffer.writeobj( 28 : 'switch(this)', 29 : tab: bodyTab, 30 0 : body: (switchBuffer, bodyTab) { 31 0 : String cases(_Item item) { 32 0 : String _tab([int n = 0]) => tabn('', bodyTab + n); 33 0 : return item.caseItem(_tab(), _tab(1)); 34 : } 35 : 36 0 : switchBuffer.writeln(map(cases)); 37 : }, 38 : ); 39 : }, 40 : ); 41 : 42 : return buffer; 43 : } 44 : 45 0 : @override 46 0 : _Item convert(String e) => _Item(enumName, e); 47 : } 48 : 49 : class _Item extends FieldTemplate<String> { 50 0 : const _Item(String enumName, String field) : super(enumName, field); 51 : 52 0 : String get arg => 'required T $field,'; 53 0 : String get wholeEnum => '$enumName.$field'; 54 0 : String get caseString => 'case $wholeEnum:'; 55 0 : String get returnString => 'return $field;'; 56 0 : String caseItem(String caseTab, String returnTab) => ''' 57 0 : $caseTab$caseString 58 0 : $returnTab$returnString'''; 59 : }