// Copyright 2015 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

[DartPackage="mojo", JavaPackage="org.chromium.mojo.bindings"]
// TODO(rudominer) Move this file into the module mojo.bindings when
// https://github.com/domokit/mojo/issues/435 is fixed.
module mojo.bindings.types;

import "mojom_types.mojom";

// This is a companion interface to ServiceProvider. An implementation of
// ServiceProvider may optionally offer descriptions of the services it
// provides by making this interface available. A client obtains access
// to a ServiceDescriber service by invoking
// ServiceProvider.ConnectToService(SERVICE_DESCRIBER_INTERFACE_NAME, pipe).
[ServiceName="mojo::bindings::types::ServiceDescriber"]
interface ServiceDescriber {
  // Requests access to a ServiceDescription for the service with the
  // given name. The |interface_name| is the same string that would be passed
  // to ServiceProvider.ConnectToService() in order to request the service
  // with the given name. If the host is not willing or able to describe the
  // service with the given name it will close the |description_request| pipe.
  DescribeService(string interface_name,
      ServiceDescription& description_request);
};

// A ServiceDescription allows a client to request information about the Mojom
// types used to implement a particular Mojo service.
//
// A Mojo service has a *top-level* interface: the interface that is bound to
// the message pipe |pipe| as a result of calling
// ServiceProvider.ConnectToService().
//
// The *complete type set* of a Mojo service is the closure of this top-level
// interface under type reference. That is, the complete type set includes all
// of the types referenced directly in the definition of the top-level interface
// and the types referenced by those types etc. The complete type set of a Mojo
// service may include other interfaces besides the top-level interface.
//
// An implementation of ServiceDescription contains information about all
// of the types in the complete type set of the service.
interface ServiceDescription {
  // Returns a MojomInterface for the top-level interface of this service.
  GetTopLevelInterface() => (MojomInterface mojomInterface);

  // Returns the |UserDefinedType| for the given |type_key|. Valid keys are
  // those that are embedded in the structures returned from earlier queries
  // of this ServiceDescription. If the key is invalid then |type| will be null.
  GetTypeDefinition(string type_key) =>
      (mojo.bindings.types.UserDefinedType? type);

  // Returns all the data queryable via GetTypeDefinition in a single
  // structure, or null if the implementation is not willing or not able to
  // provide all of the data at once.
  GetAllTypeDefinitions() => (map<string, UserDefinedType>? definitions);
};
