// 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;

// [START attribute-one]
@doc(" MyType summary\n")
type MyType = struct {
        // [END attribute-one]
        };

// [START attribute-many]
@discoverable
@transport("Channel")
// [END attribute-many]
protocol MyProtocol {};

// [START doc-with-slashes]
/// Foo
type WithThreeSlashes = struct {
        // [END doc-with-slashes]
        };

// [START doc-with-attributes]
@doc("Foo")
type WithAttribute = struct {
        // [END doc-with-attributes]
        };

// [START layout-simple]
protocol SimpleProtocol {
    DynamicCountOfFixedArguments(struct {
        inputs vector<uint8>:1024;
    });
};
// [END layout-simple]

// [START selector-simple]
protocol Science {
    @selector("Investigate")
    Experiment();
};
// [END selector-simple]

// [START selector-fq-name]
protocol Org {
    @selector("purple.examples.docs/Area120.Discover")
    Productionize();
};
// [END selector-fq-name]
