Mapper

Simple library to convert maps to objects and objects to maps

import 'package:mapper/mapper.dart';

@Entity(fullMatch: true) // will map all fields
class Simple {
  String strProp;
  int intProp;
  bool boolProp;
  double doubleProp;
}

const Map<String, dynamic> simple = const {
  "strProp": "val",
  "intProp": 13,
  "boolProp": true,
  "doubleProp": 12.4,
};

main() {
    Simple obj = decode<Simple>(simple);

    obj.strProp; // val
    obj.intProp; // 13
    obj.boolProp; // true
    obj.doubleProp; 12,4

    Map<String, dynamic> simple2 = encode(obj);

    simple2['strProp'] == simple['strProp']; // true
    simple2['intProp'] == simple['intProp']; // true 
    simple2['boolProp'] == simple['boolProp']; // true
    simple2['doubleProp'] == simple['doubleProp']; // true
}

Basic features:

  • can convert simple types (String, int, boolean, double)
  • can convert Lists and Maps (only with simple types inside)
  • can be added external converters
  • mirror fields are cache after first use to increase speed
  • add meta to control convertation process

Roadmap:

  • add ability to convert complex Maps and Lists with included classes
  • add ability to convert classes with constructors with arguments

Custom converter example:

import 'package:mapper/mapper.dart';

class BoolParser extends Parser {
  bool decode(val) {
    if (val is int) {
      return val == 1;
    }
    return null;
  }

  int encode(val) {
    if (val is bool) {
      return val == true ? 1 : 0;
    }
    return null;
  }
}

@Entity(fullMatch: true)
class Simple {
  @Property(name: 'str') // change field name
  String strProp;
  bool boolProp;
  @Property(ignore: true) // ignore this field
  int intProp;
}

main() {

    addParser('bool', new BoolParser());

    Simple obj = new Simple();
    obj.strProp = "string";
    obj.boolProp = true;
    obj.intProp = 3;

    Map<String, dynamic> simple = encode(obj);

    simple['str'] == 'string'; // true
    simple.containsKey('strProp'); // false, key name was changed
    simple['boolProp'] == 1; // true
    simple.containsKey('intProp'); // false, field was ignored
}

Libraries

mapper