// Copyright 2016 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;

[Discoverable]
interface ContextWriter {
    // Creates and returns a ContextValueWriter for a future value of |type|,
    // allowing the client to set and update the contents at a later time.  The
    // value is removed from the Context service when |value_writer| is closed or
    // a connection error occurs.
    1: CreateValue(request<ContextValueWriter> value_writer, ContextValueType type);

    // This method is here to make transitioning from topic-based context
    // publishing to CreateValue() easier and will be removed eventually.
    // Internally, calls CreateValue() with type = ContextValueType.ENTITY,
    // and sets metadata.entity.topic = topic, unless WriteEntityTopic() was
    // called already on this instance with the same |topic| value. In that case,
    // performs an upate instead of adding a new value.
    //
    // Leaving |value| null removes the topic value from the Context service.
    //
    // TODO(thatguy): Remove this method and replace its behavior with
    // client-side library methods.
    2: WriteEntityTopic(string topic, string? value);
};

interface ContextValueWriter {
    // Like ContextWriter.CreateValue(), but creates the new value as a child to
    // this value.
    //
    // TODO(thatguy): What is the lifetime relationship between these two values?
    // Ie, does removing the parent remove all its children?
    1: CreateChildValue(request<ContextValueWriter> value_writer, ContextValueType type);

    // Updates the content and/or metadata of this value. If either |content| or
    // |metadata| are left null, the existing values will remain.
    2: Set(string? content, ContextMetadata? metadata);
};
