LCOV - code coverage report
Current view: top level - src/templates - maybe_map_extension_template.dart (source / functions) Hit Total Coverage
Test: lcov.info Lines: 0 35 0.0 %
Date: 2021-10-15 15:56:51 Functions: 0 0 -

          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 MaybeMapTemplate extends TemplateCoreSimple<_Item> {
       8             :   /// {@macro enum_assist.map_template}
       9           0 :   MaybeMapTemplate(String enumName, Iterable<String> fields)
      10           0 :       : super(enumName, fields);
      11             : 
      12           0 :   @override
      13             :   StringBuffer writeTemplate(StringBuffer buffer) {
      14             :     buffer
      15           0 :       ..writeln('''
      16             : /// Optionally map all values of the enum
      17             : ///
      18             : /// default value is provided when value has not been mapped''')
      19           0 :       ..writeobj(
      20             :         'T maybeMap<T extends Object?>',
      21             :         open: '({',
      22           0 :         body: (mapBuffer, tab) {
      23             :           mapBuffer
      24           0 :             ..writelnTab('required T orElse,', tab)
      25           0 :             ..writeln(map((i) => tabn(i.arg, tab)));
      26             :         },
      27             :         close: '})',
      28             :       )
      29           0 :       ..writeobj(
      30             :         '',
      31           0 :         body: (mapBuff, bodyTab) {
      32             :           mapBuff
      33           0 :             ..writelnTab('var isNullable = true;', bodyTab)
      34           0 :             ..writeln()
      35           0 :             ..writeobj('try', body: (tryBuff, tryTab) {
      36           0 :               tryBuff.writelnTab('final value = null as T;', tryTab);
      37             :             })
      38           0 :             ..writeobj('catch (_)', body: (catchBuff, catchTab) {
      39           0 :               catchBuff.writelnTab('isNullable = false;', catchTab);
      40             :             })
      41           0 :             ..writeln()
      42           0 :             ..writeobj(
      43             :               'switch(this)',
      44             :               tab: bodyTab,
      45           0 :               body: (switchBuff, switchTab) {
      46           0 :                 String caseItem(_Item item) {
      47           0 :                   String _tab([int n = 0]) => tabn('', switchTab + n);
      48             : 
      49           0 :                   return item.caseItem(_tab(), _tab(1));
      50             :                 }
      51             : 
      52           0 :                 switchBuff.writeln(map(caseItem));
      53             :               },
      54             :             );
      55             :         },
      56             :       ); // maybeMap
      57             : 
      58             :     return buffer;
      59             :   }
      60             : 
      61           0 :   @override
      62           0 :   _Item convert(String e) => _Item(enumName, e);
      63             : }
      64             : 
      65             : class _Item extends FieldTemplate<String> {
      66           0 :   const _Item(String enumName, String field) : super(enumName, field);
      67             : 
      68           0 :   String get orElseCheck => 'if ($field == null && !isNullable) return orElse;';
      69             : 
      70           0 :   String get arg => 'T? $field,';
      71             : 
      72           0 :   String get wholeEnum => '$enumName.$field';
      73             : 
      74           0 :   String get caseString => 'case $wholeEnum:';
      75             : 
      76           0 :   String get returnString => 'return $field as T;';
      77             : 
      78           0 :   String caseItem(String caseTab, String returnTab) => '''
      79           0 : $caseTab$caseString
      80           0 : $returnTab$orElseCheck
      81           0 : $returnTab$returnString''';
      82             : }

Generated by: LCOV version 1.15