blob: 11d66f688b8078227e981641248698d68ba421d2 [file] [log] [blame]
import 'manifest.dart';
import 'replay_process_manager.dart';
/// An entry in the process invocation manifest.
///
/// Each entry in the [Manifest] represents a single recorded process
/// invocation.
abstract class ManifestEntry {
/// Whether this entry has been "invoked" by [ReplayProcessManager].
bool get invoked => _invoked;
bool _invoked = false;
/// Marks this entry as having been "invoked" by [ReplayProcessManager].
void setInvoked() {
_invoked = true;
}
/// The type of this [ManifestEntry].
String get type;
/// Returns a JSON-encodable representation of this manifest entry.
Map<String, dynamic> toJson();
}
/// A lightweight class that provides a means of building a manifest entry
/// JSON object.
class JsonBuilder {
/// The JSON-encodable object.
final Map<String, dynamic> entry = <String, dynamic>{};
/// Adds the specified key/value pair to the manifest entry iff the value
/// is non-null. If [jsonValue] is specified, its value will be used instead
/// of the raw value.
JsonBuilder add(String name, dynamic value, [dynamic jsonValue()]) {
if (value != null) {
entry[name] = jsonValue == null ? value : jsonValue();
}
return this;
}
}
/// Throws a [FormatException] if [data] does not contain [key].
void checkRequiredField(Map<String, dynamic> data, String key) {
if (!data.containsKey(key))
throw new FormatException('Required field missing: $key');
}