|  | // Copyright 2021 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.component.decl; | 
|  |  | 
|  | /// Statically declares a component instance collection. | 
|  | type Collection = table { | 
|  | /// The name of the collection. Instances created in the collection are | 
|  | /// scoped to this name. | 
|  | 1: name name; | 
|  |  | 
|  | /// The durability of instances in the collection. | 
|  | 2: durability Durability; | 
|  |  | 
|  | /// The environment assigned to child instances in this collection. | 
|  | /// | 
|  | /// Must be non-empty, reference an environment defined in the containing | 
|  | /// `ComponentDecl`, and contain only the following characters: | 
|  | /// [a-z0-9-_.]. | 
|  | 3: environment name; | 
|  |  | 
|  | /// The kinds of offers that can target the child instances in this | 
|  | /// collection. The default value is `STATIC_ONLY`. | 
|  | /// | 
|  | /// Only components using the `dynamic_offers` restricted feature may set | 
|  | /// this field. | 
|  | 4: allowed_offers AllowedOffers; | 
|  |  | 
|  | /// Whether child instances in this collection can have names longer than | 
|  | /// the default length limit of 100. | 
|  | /// | 
|  | /// Only components using the `allow_long_names` restricted feature may set | 
|  | /// this field. | 
|  | 5: allow_long_names bool; | 
|  |  | 
|  | /// Whether the data in isolated storage used by dynamic child instances and | 
|  | /// their descendants will persist after the instances are destroyed. New | 
|  | /// dynamic instances inherit the previous instances' data stores. | 
|  | /// | 
|  | /// This setting can be overridden by a lower-level collection that is a | 
|  | /// descendant of a collection that enables/disables this setting. | 
|  | /// | 
|  | /// This setting applies to all storage capabilities consumed by the | 
|  | /// collection components and their descendants. | 
|  | /// | 
|  | /// The default is the value inherited from an ancestral collection if set, | 
|  | /// otherwise `false`. | 
|  | 6: persistent_storage bool; | 
|  | }; | 
|  |  | 
|  | /// The durability of component instances created in a collection. | 
|  | type Durability = strict enum { | 
|  | // Durability::Persistent is removed because it is unsupported. | 
|  | @available(removed=9) | 
|  | PERSISTENT = 1; | 
|  | /// An instance exists until either its parent instance is stopped | 
|  | /// or it is explicitly destroyed. | 
|  | TRANSIENT = 2; | 
|  | /// An instance is started upon creation and is immediately destroyed when | 
|  | /// it stops. | 
|  | SINGLE_RUN = 3; | 
|  | }; | 
|  |  | 
|  | /// The kinds of offers that can target the children in a collection. | 
|  | type AllowedOffers = strict enum { | 
|  | /// Only static offers may target components in the collection. "Static | 
|  | /// offers" are the offers in the `ComponentDecl` that target the collection | 
|  | /// itself. | 
|  | /// | 
|  | /// This is the default behavior. | 
|  | STATIC_ONLY = 1; | 
|  |  | 
|  | /// Both static offers and dynamic offers may target components in the | 
|  | /// collection. "Static offers" are the offers in the `ComponentDecl` that | 
|  | /// target the collection itself. "Dynamic offers" are additional offers | 
|  | /// that are passed to `CreateChild` at runtime. | 
|  | STATIC_AND_DYNAMIC = 2; | 
|  | }; |