Find file Copy path
Fetching contributors…
Cannot retrieve contributors at this time
60 lines (49 sloc) 1.72 KB
// 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:async';
import 'package:meta/meta.dart';
import 'package:uuid/uuid.dart';
import 'entity_codec.dart';
import 'internal/_link_entity.dart';
/// An [Entity] provides a mechanism for communicating
/// data between compoonents.
/// Note: this is a preliminary API that is likely to change.
abstract class Entity<T> {
/// Creates an entity that will live for the scope of this story.
/// The entity that is created will be backed by the framework and
/// can be treated as if it was received from any other entity provider.
factory Entity({
@required EntityCodec<T> codec,
}) {
// This is temporary and go away when we remove link entities.
final linkName = Uuid().v4().toString();
return LinkEntity<T>(linkName: linkName, codec: codec);
/// Returns the data stored in the entity.
Future<T> getData();
/// Writes the object stored in value
Future<void> write(T object);
/// Watches the entity for updates.
/// An new value will be added to the stream whenever
/// the entity is updated.
/// The returned stream is a single subscription stream
/// which, when closed, will close the underlying fidl
/// connection.
Stream<T> watch();
/// An exception which is thrown when an Entity does not
/// support a given type.
class EntityTypeException implements Exception {
/// The unsuported type.
final String type;
/// Create a new [EntityTypeException].
String toString() =>
'EntityTypeError: type "$type" is not available for Entity';