| // 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.types"] |
| module mojo.bindings.types; |
| |
| import "mojom_types.mojom"; |
| |
| /* |
| * The structures in this file are intended to be used by the Mojom compiler |
| * and code generators. The front end of the compiler takes as input a |
| * .mojom file (or a list of .mojom files) and produces a MojomFileGraph struct. |
| * |
| * The backend of the compiler consumes a MojomFileGraph and invokes each of the |
| * code generators passing them data derived from the MojomFileGraph. |
| * |
| * A MojomFile represents the data parsed from a single .mojom file. Mojom |
| * files form a directed acyclic graph via the "imports" relation. |
| * That is, if file A imports file B then there is a directed edge in the |
| * graph from A to B. A MojomFileGraph represents the whole Graph. |
| |
| * The Mojom structures represented here have been fully resolved, meaning that |
| * the type references have been associated with their corresponding type |
| * definitions. This resolved type data is contained in the resolved_types data |
| * in MojomFileGraph. |
| */ |
| |
| // A MojomFile represents the data defined by a single .mojom file, when |
| // all of the type references to types declared in imported .mojom files |
| // have been resolved. |
| struct MojomFile { |
| // |file_name| is (derived from) the file name of the corresponding |
| // .mojom file. It is the unique identifier for this module within the |
| // MojomFileGraph |
| string file_name; |
| |
| // |specified_file_name| is used to record information about the request that |
| // triggered the construction of the |MojomFileGraph| of which this |
| // |MojomFile| is a part. This field is populated by some producers (such |
| // as the Mojom compiler) but not necessarily all producers of this structure. |
| // If this field is null it means it is not supported by the producer. |
| // |
| // If this field is non-null but empty it means that this |MojomFile| |
| // was not explicitly requested but rather is included in the |MojomFileGraph| |
| // because it is referenced in the |imports| field of another |MojomFile| |
| // in the graph. If this field is non-empty it means that the corresponding |
| // .mojom file was explicitly requested, using |specified_file_name|. Note |
| // that in this case it is still possible that this file is also referenced |
| // in the |imports| field of another |MojomFile|. |
| string? specified_file_name; |
| |
| // The namespace is the identifier declared via the "module" declaration |
| // in the .mojom file. |
| string? module_namespace; |
| |
| // Attributes declared in the Mojom file at the module level. |
| array<Attribute>? attributes; |
| |
| // The list of other MojomFiles imported by this one. The elements |
| // of the array are the |file_name|s and the associated module may |
| // be retrieved from the MojomFileGraph. |
| array<string>? imports; |
| |
| // resolved_types and resolved_values in MojomFileGraph contain |
| // respectively the types and constants declared in the union of all modules |
| // in the graph. This KeysByType selects the keys of the types and constants |
| // defined in this module |
| KeysByType declared_mojom_objects; |
| |
| // The bytes encoding a |RuntimeTypeInfo| struct for this Mojom file, |
| // using Mojo message serialization. Some implementations may not include |
| // this. This string contains the base64 encoding of the gzip-compressed |
| // bytes. |
| string? serialized_runtime_type_info; |
| }; |
| |
| // Represents a directed acyclic graph of MojomFiles. |
| struct MojomFileGraph { |
| // All the files in this graph. The keys are |file_name|s. |
| map<string, MojomFile> files; |
| |
| // All the resolved user-defined types in all the files in the graph. The keys are |
| // the |type_key|s. |
| map<string, UserDefinedType> resolved_types; |
| |
| // All the resolved DeclaredConstants in all the files in the graph. The keys are |
| // the |constant_key|s. |
| map<string, DeclaredConstant> resolved_constants; |
| }; |
| |
| // A KeysByType struct organizes by type the keys of all types and consants in |
| // a MojomFile |
| struct KeysByType { |
| // The type keys of the types in the MojomFile. |
| array<string>? interfaces; |
| array<string>? structs; |
| array<string>? unions; |
| array<string>? top_level_enums; |
| array<string>? embedded_enums; |
| |
| // The constant keys of the constants in the MojomFile. |
| array<string>? top_level_constants; |
| array<string>? embedded_constants; |
| }; |