| // Copyright 2019 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; |
| |
| using fuchsia.mem; |
| |
| /// A user-defined annotation for a story or module. |
| type Annotation = resource struct { |
| /// An identfier for this annotation. |
| key AnnotationKey; |
| |
| /// The contents of this annotation. |
| value AnnotationValue:optional; |
| }; |
| |
| /// Maximum number of annotations on a single story. |
| const MAX_ANNOTATIONS_PER_STORY uint32 = 100; |
| |
| /// Maximum number of annotations on a single module. |
| const MAX_ANNOTATIONS_PER_MODULE uint32 = 100; |
| |
| /// Maximum number of annotations that can be passed to either method |
| /// Annotate() AnnotateModule() in fuchsia.modular protocols that support |
| /// annotations. |
| const MAX_ANNOTATIONS_PER_UPDATE uint32 = 50; |
| |
| /// Maximum length of [`fuchsia.modular/AnnotationKey`]. |
| const MAX_ANNOTATION_KEY_LENGTH uint32 = 256; |
| |
| /// Maximum length of [`fuchsia.modular/AnnotationValue`] fields: |
| /// `text` and `bytes`. |
| const MAX_ANNOTATION_VALUE_LENGTH uint32 = 1024; |
| |
| /// Maximum length of the [`fuchsia.modular/AnnotationValue.buffer`] field, in |
| /// bytes. |
| /// |
| /// Does not apply to other fields; see [`MAX_ANNOTATION_VALUE_LENGTH`]. |
| const MAX_ANNOTATION_VALUE_BUFFER_LENGTH_BYTES uint32 = 102400; |
| |
| /// An identifier for an [`fuchsia.modular/Annotation`]. |
| alias AnnotationKey = string:MAX_ANNOTATION_KEY_LENGTH; |
| |
| /// The value of a [`fuchsia.modular/Annotation`]. |
| /// |
| /// The actual field used depends on the type of annotation, which is |
| /// user-defined, and not enforced by the framework. |
| /// |
| /// The size of `buffer` is limited to |
| /// `MAX_ANNOTATION_VALUE_BUFFER_LENGTH_BYTES` bytes. |
| type AnnotationValue = flexible resource union { |
| 1: text string:MAX_ANNOTATION_VALUE_LENGTH; |
| 2: bytes vector<uint8>:MAX_ANNOTATION_VALUE_LENGTH; |
| 3: buffer fuchsia.mem.Buffer; |
| }; |
| |
| /// Error returned from calls to Annotate(). |
| type AnnotationError = strict enum { |
| /// The `AnnotationValue.buffer` size exceeds the maximum length, |
| /// `MAX_ANNOTATION_VALUE_BUFFER_LENGTH_BYTES`. |
| VALUE_TOO_BIG = 1; |
| |
| /// The total number of annotations on the story or module being annotated |
| /// exceeds `MAX_ANNOTATIONS_PER_STORY` or `MAX_ANNOTATIONS_PER_MODULE`. |
| TOO_MANY_ANNOTATIONS = 2; |
| |
| /// The resource to be annotated was not found and could not be resolved |
| /// by, for example, waiting, or creating the missing resource automatically. |
| /// This error may be returned by StoryPuppetMaster.AnnotateModule(), which |
| /// can wait for a missing Module, but requires the Module's Story exist. |
| NOT_FOUND = 3; |
| }; |