blob: 1f160b64964d9605324ef8dd4826e0602c748bed [file] [log] [blame]
// Copyright 2017 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.
library fuchsia.modular;
// This struct serves two purposes. It is:
// 1) Used to expose metadata along with each context node when interfacing
// with clients either publishing, or retieving, context values.
// 2) Used while getting or querying for context values from a ContextReader to
// restrict the set of values returned by partially specifying a
// ContextMetadata struct.
// TODO(thatguy): Consider splitting these two purposes into their own structs
// if the dual-responsibility becomes difficult to manage.
struct ContextMetadata {
StoryMetadata? story;
ModuleMetadata? mod; // Annoyingly, "module" is a reserved word in FIDL.
EntityMetadata? entity;
LinkMetadata? link;
// TODO(thatguy): Add Agent metadata.
struct StoryMetadata {
string? id;
FocusedState? focused;
// TODO(thatguy): Add modular.StoryState
// TODO(thatguy): Add visible state.
struct ModuleMetadata {
string? url;
vector<string>? path;
FocusedState? focused;
struct EntityMetadata {
string? topic;
vector<string>? type;
struct LinkMetadata {
// These fields are identical to those in modular.LinkPath. Can't use
// modular.LinkPath directly because depending on lib/modular/fidl:link_path
// causes issues with Dart bindings (they try to import the file from the
// wrong package name), and depending on lib/modular/fidl causes a dependency
// cycle (lib/context -> lib/module -> lib/user_intelligence -> lib/context).
// TODO(thatguy): Once we have FIDL2 (which will apparently fix the Dart
// bindings problem), use LinkPath.
vector<string>? module_path;
string? name;
// bool type cannot be made optional (in StoryMetadata above), so we cannot
// differentiate between an unspecified value and false. So we have to create a
// struct with an enum in it to represent the boolean states, so that we can
// allow it to be null.
struct FocusedState {
FocusedStateState state;
enum FocusedStateState {