| // Copyright 2022 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. |
| @available(platform="examples", added=1) |
| library fuchsia.examples.notificationhub; |
| |
| /// The name of the Application. |
| alias AppName = string:64; |
| /// Number of milliseconds since the unix epoch. |
| alias Timestamp = uint64; |
| /// A URL. |
| alias Url = string:60000; |
| |
| /// The settings for a Hub. |
| type Settings = flexible bits { |
| /// Set to true if you want incoming messages to a hub to be rate-limited. |
| SLOW_MODE = 0x1; |
| }; |
| |
| /// A message in the hub. |
| type Message = table { |
| /// A unique id for the message. |
| 1: id uint64; |
| /// The name of the Application that sent the message. |
| 2: from AppName; |
| /// The time the message was sent, in unix time. |
| 3: time Timestamp; |
| /// The contents of the message. |
| 4: content Content; |
| }; |
| |
| /// The contents of a message. |
| type Content = flexible union { |
| /// The text contents of a message. |
| 1: text string:140; |
| /// The contents of a banner message, supporting a banner image and text. |
| 2: banner table { |
| /// The URL to the banner image. |
| 1: image Url; |
| /// The text contents of the banner. |
| 2: text string:80; |
| }; |
| }; |
| |
| /// A representation of a single notification hub. |
| type Hub = table { |
| /// The settings for the hub. |
| 1: settings Settings; |
| /// The messages in the hub. |
| 2: messages vector<Message>:64; |
| }; |
| |
| /// All possible connection errors. |
| type ConnectionError = flexible enum { |
| /// An error when the user is already connected to a given hub. |
| ALREADY_CONNECTED = 1; |
| }; |
| |
| /// The NotificationHub protocol. Allows users to connect to a notification hub, |
| /// to recieve notifications. Supports multiple concurrent connections to |
| /// separate hubs. |
| protocol NotificationHub { |
| /// Connect to a given app's notification hub. |
| Connect(struct { |
| /// The name of the app to connect to. |
| app AppName; |
| }) -> (Hub) error ConnectionError; |
| /// Close all open connections to notification hubs. |
| // We return a table for future flexibility. We can update this in the |
| // future to return additional keyed data. |
| Close() -> (table {}); |
| }; |