Deeply encode objects in `encode()` (#23)

This changes `encode()` to deeply encode the specified object
rather than performing a shallow encode. Previously, it relied
on `JSONEncoder` to do the work of walking the object graph and
calling `toEncodable` whenever it found a non-JSON type. Now,
callers can call `encode()` on the top-level object and get back
a deeply JSON-typed object that can be converted to JSON without
the need for a `toEncodable` callback.

This will be used during replay, when we'll compare an invocation
to the list of recorded invocations, each of which exists as a
JSON-type map.

Since we now control the encoding process entirely ourselves,
this also changes `encode()` to return `Future<dynamic>` rather than
`dynamic`, which in turn allows both `InvocationEvent.serialize()` and
`ResultReference.serializedValue` to return futures as well.
Doing so allows for more technical correctness when serializing
result references.

Part of #11
6 files changed
tree: 4e2e16fa9ee983fb5028bf7bc18279599c6136cb
  1. contrib/
  2. lib/
  3. test/
  4. tool/
  5. .analysis_options
  6. .gitignore
  7. .travis.yml
  8. CHANGELOG.md
  9. LICENSE
  10. pubspec.yaml
  11. README.md
README.md

Build Status Coverage Status

File

A generic file system abstraction for Dart.

Like dart:io, package:file supplies a rich Dart-idiomatic API for accessing a file system.

Unlike dart:io, package:file:

  • Can be used to implement custom file systems.
  • Comes with an in-memory implementation out-of-the-box, making it super-easy to test code that works with the file system.
  • Allows using multiple file systems simultaneously. A file system is a first-class object. Instantiate however many you want and use them all.

Usage

Implement your own custom file system:

import 'package:file/file.dart';

class FooBarFileSystem implements FileSystem { ... }

Use the in-memory file system:

import 'package:file/memory.dart';

var fs = new MemoryFileSystem();

Use the local file system (requires dart:io access):

import 'package:file/local.dart';

var fs = const LocalFileSystem();