| // Copyright 2018 The Fuchsia Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| import 'dart:convert'; |
| |
| import 'package:lib.app.dart/logging.dart'; |
| import 'package:lib.schemas.dart/entity_codec.dart'; |
| |
| import 'filter_entity_data.dart'; |
| |
| /// The [EntityCodec] that translates [FilterEntityData] |
| class FilterEntityCodec extends EntityCodec<FilterEntityData> { |
| /// Creates an instance of the codec |
| FilterEntityCodec() |
| : super( |
| type: 'com.fuchsia.contact.filter', |
| encode: _encode, |
| decode: _decode, |
| ); |
| } |
| |
| String _encode(FilterEntityData entity) { |
| if (entity == null) { |
| return null; |
| } |
| |
| return json.encode(<String, String>{ |
| 'prefix': entity.prefix, |
| 'detailType': entity.detailType.toString() |
| }); |
| } |
| |
| FilterEntityData _decode(String data) { |
| if (data == null || data.isEmpty) { |
| return null; |
| } |
| |
| FilterEntityData filter = FilterEntityData(); |
| try { |
| Map<String, String> decoded = json.decode(data).cast<String, String>(); |
| filter.prefix = decoded['prefix']; |
| DetailType detailType; |
| switch (data) { |
| case 'email': |
| detailType = DetailType.email; |
| break; |
| |
| case 'phoneNumber': |
| detailType = DetailType.phoneNumber; |
| break; |
| |
| default: |
| detailType = DetailType.custom; |
| break; |
| } |
| filter.detailType = detailType; |
| } on Exception catch (err, stackTrace) { |
| log.warning('Error parsing FilterEntityData: $err\n$stackTrace'); |
| } |
| |
| return filter; |
| } |