| // 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.session; |
| |
| using fuchsia.mem; |
| |
| /// The value of a [`fuchsia.session/Entry`]. |
| /// |
| /// The actual field used depends on the type of annotation. |
| union Value { |
| 1: string:MAX text; |
| 2: fuchsia.mem.Buffer buffer; |
| }; |
| |
| /// An annotation defined dynamically by key/value pair. |
| /// |
| /// The `Key`, `Value` type, and legal values are not enforced by the Session Framework. Cooperating |
| /// components that exchange annotations must define and validate annotation entries based on their |
| /// own conventions. |
| struct Annotation { |
| /// An identfier for this annotation. |
| string:MAX key; |
| |
| /// The content of this annotation. |
| Value? value; |
| }; |
| |
| /// Error returned from calls to SetAnnotations() or GetAnnotations(). |
| enum AnnotationError { |
| /// The session rejected the annotations to add to the controlled element. |
| /// Reasons for rejection may be due to annotations that violate defined |
| /// type constraints, such as: |
| /// * The `Value` size exceeds the maximum length. |
| /// * The total number of annotations on an element exceeds `MAX` |
| REJECTED = 1; |
| |
| /// The element failed to return the annotations from a call to get_annotations()/ |
| /// Reasons for the failure may be due to inability to read buffer bytes. |
| NOT_FOUND = 2; |
| }; |
| |
| // NOTE: `Annotations` is a table (and not a type alias) to anticipate the possibility that |
| // `Annotations` may be extended with additional well-known annotations, using hard-coded |
| // table fields of any legal type. |
| /// Contains the annotations applied to an Element. |
| table Annotations { |
| /// A list of dynamically-defined annotations. |
| 1: vector<Annotation>:MAX custom_annotations; |
| }; |