blob: 489dc5810ee7bfbcd0bacb2da62712e42e9acee7 [file] [log] [blame]
// Copyright 2020 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.examples.docs;
using zx;
// [START structs]
struct CirclePoint {
float32 x;
float32 y;
};
struct Color {
float32 r;
float32 g;
float32 b;
};
// [END structs]
// [START structs-use]
struct Circle {
bool filled;
CirclePoint center; // CirclePoint will be stored in-line
float32 radius;
Color? color; // Color will be stored out-of-line
bool dashed;
};
// [END structs-use]
// [START comments]
// this is a comment
/// and this one is too, but it also ends up in the generated code
struct MyStruct { // plain comment
int32 f; // as is this one
}; // and this is the last one!
// [END comments]
// [START consts]
const bool ENABLED_FLAG = true;
const int8 OFFSET = -33;
const uint16 ANSWER = 42;
const uint16 ANSWER_IN_BINARY = 0b101010;
const uint32 POPULATION_USA_2018 = 330000000;
const uint64 DIAMOND = 0x183c7effff7e3c18;
const uint64 FUCHSIA = 4054509061583223046;
const string USERNAME = "squeenze";
const float32 MIN_TEMP = -273.15;
const float64 CONVERSION_FACTOR = 1.41421358;
const Beverage MY_DRINK = Beverage.WATER;
// [END consts]
// [START defaults]
struct Scene {
uint32 background_rgb = 0xFF77FF; // fuchsia is the default background
uint32 foreground_rgb; // there is no default foreground color
};
// [END defaults]
// [START primitives]
// A record which contains fields of a few primitive types.
struct Sprite {
float32 x;
float32 y;
uint32 index;
uint32 color;
bool visible;
};
// [END primitives]
// [START bits]
strict bits InfoFeatures : uint8 {
/// If present, this device represents WLAN hardware
WLAN = 0x01;
/// If present, this device is synthetic (not backed by h/w)
SYNTH = 0x02;
/// If present, this device receives all messages it sends
LOOPBACK = 0x04;
};
// Underlying type is assumed to be uint32.
flexible bits AllowableSegments {
TOLL_ROADS = 0b001;
HIGHWAYS = 0b010;
BIKE_PATHS = 0b100;
};
// [END bits]
// [START enums]
flexible enum Beverage : uint8 {
WATER = 0;
COFFEE = 1;
TEA = 2;
WHISKEY = 3;
};
// Underlying type is assumed to be uint32.
strict enum Vessel {
CUP = 0;
BOWL = 1;
TUREEN = 2;
JUG = 3;
};
// [END enums]
// [START enum-use]
// A record which contains two enum fields.
struct Order {
Beverage beverage;
Vessel vessel;
};
// [END enum-use]
// [START arrays]
// A record which contains some arrays.
struct Arrays {
// array of exactly 16 floating point numbers
array<float32>:16 matrix;
// array of exactly 10 arrays of 4 strings each
array<array<string>:4>:10 form;
};
// [END arrays]
// [START strings]
// A record which contains some strings.
struct Document {
// title string, maximum of 40 bytes long
string:40 title;
// description string, may be null, no upper bound on size
string? description;
};
// [END strings]
// [START vectors]
// A record which contains some vectors.
struct Vectors {
// a vector of up to 10 integers
vector<int32>:10 params;
// a vector of bytes, no upper bound on size
bytes blob;
// a nullable vector of up to 24 strings
vector<string>:24? nullable_vector_of_strings;
// a vector of nullable strings, no upper bound on size
vector<string?> vector_of_nullable_strings;
// a vector of vectors of 16-element arrays of floating point numbers
vector<vector<array<float32>:16>> complex;
};
// [END vectors]
// [START handles]
// A record which contains some handles.
resource struct Handles {
// a handle of unspecified type
zx.handle h;
// an optional channel
zx.handle:CHANNEL? c;
};
// [END handles]
// [START tables]
table Profile {
1: vector<string> locales;
2: vector<string> calendars;
3: vector<string> time_zones;
};
// [END tables]
struct Left {
};
struct Right {
};
// [START unions-use]
union Either {
1: Left left;
2: Right right;
};
// [END unions-use]
// [START strict-vs-flexible]
flexible union FlexibleEither {
1: Left left;
2: Right right;
};
// [END strict-vs-flexible]
protocol RealCalculator {
};
// [START endpoints]
// A record which contains protocol-bound channels.
resource struct Record {
// client endpoint of a channel bound to the Calculator protocol
Calculator c;
// server endpoint of a channel bound to the Science protocol
request<Science> s;
// optional client endpoint of a channel bound to the
// RealCalculator protocol
RealCalculator? r;
};
// [END endpoints]
// [START composition-base]
protocol SceneryController {
SetBackground(Color color);
SetForeground(Color color);
};
// [END composition-base]
// [START composition-inherit]
protocol Drawer {
compose SceneryController;
Circle(int32 x, int32 y, int32 radius);
Square(int32 x, int32 y, int32 diagonal);
};
protocol Writer {
compose SceneryController;
Text(int32 x, int32 y, string message);
};
// [END composition-inherit]
// [START composition-multiple-1]
protocol FontController {
SetPointSize(int32 points);
SetFontName(string fontname);
Italic(bool onoff);
Bold(bool onoff);
Underscore(bool onoff);
Strikethrough(bool onoff);
};
// [END composition-multiple-1]
struct Time {
};
// [START layering-clock]
protocol Clock {
Now() -> (Time time);
CurrentTimeZone() -> (string timezone);
};
// [END layering-clock]
// [START layering-horologist]
protocol Horologist {
SetTime(Time time);
SetCurrentTimeZone(string timezone);
};
// [END layering-horologist]
// [START layering-systemclock]
protocol SystemClock {
compose Clock;
compose Horologist;
};
// [END layering-systemclock]
// [START aliasing]
alias StoryID = string:MAX;
alias Chapters = vector<StoryID>:5;
// [END aliasing]
// [START aliasing-usage]
struct Message {
StoryID baseline;
Chapters chapters;
};
// [END aliasing-usage]
// [START builtin-aliases]
struct RawBytes {
byte head;
bytes rest;
};
// [END builtin-aliases]
// [START calculator]
enum DivisionError : uint32 {
DIVIDE_BY_ZERO = 1;
};
protocol Calculator {
Add(int32 a, int32 b) -> (int32 sum);
Divide(int32 dividend, int32 divisor)
-> (int32 quotient, int32 remainder) error DivisionError;
Clear();
-> OnError(uint32 status_code);
};
// [END calculator]
// [START maximum-recursion-depth]
struct InlineObject {
string content_a;
vector<OutOfLineStructAtLevel1> vector;
TableInlineAtLevel0 table;
};
struct OutOfLineStructAtLevel1 {
string content_b;
};
table TableInlineAtLevel0 {
1: string content_c;
};
// [END maximum-recursion-depth]