| // 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 { | 
 |     /// (Required) The name of the collection. Instances created in the | 
 |     /// collection are scoped to this name. | 
 |     1: name name; | 
 |  | 
 |     /// (Required) The durability of instances in the collection. | 
 |     2: durability Durability; | 
 |  | 
 |     /// (Optional) The environment assigned to child instances in this | 
 |     /// collection. | 
 |     /// | 
 |     /// May be unset, in which case children in this collection will inherit the | 
 |     /// parent component's environment. If set, the name must reference an | 
 |     /// environment defined in the `ComponentDecl` and it must contain only the | 
 |     /// following characters: [a-z0-9-_.]. | 
 |     3: environment name; | 
 |  | 
 |     /// (Optional, defaults to `STATIC_ONLY`) The kinds of offers that can | 
 |     /// target the child instances in this collection. | 
 |     /// | 
 |     /// Only components using the `dynamic_offers` restricted feature may set | 
 |     /// this field. | 
 |     4: allowed_offers AllowedOffers; | 
 |  | 
 |     /// (Optional, defaults to `false`) 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; | 
 |  | 
 |     /// (Optional) 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; | 
 | }; |