/// library comment #1
///
/// library comment #2
library fidl.test.doccomments;

/// strict bits comment #1
///
/// strict bits comment #2
strict bits MyStrictBits : uint32 {
    /// MY_FIRST_BIT member comment #1
    ///
    /// MY_FIRST_BIT member comment #3
    MY_FIRST_BIT = 1;
    /// MY_OTHER_BIT member comment #1
    ///
    /// MY_OTHER_BIT member comment #3
    MY_OTHER_BIT = 2;
};

/// flexible bits comment #1
///
/// flexible bits comment #2
flexible bits MyFlexibleBits : uint32 {
    /// MY_FIRST_BIT member comment #1
    ///
    /// MY_FIRST_BIT member comment #3
    MY_FIRST_BIT = 1;
    /// MY_OTHER_BIT member comment #1
    ///
    /// MY_OTHER_BIT member comment #3
    MY_OTHER_BIT = 2;
};

/// const comment #1
///
/// const comment #3
const int32 C = 4;

/// strict enum comment #1.
///
/// strict enum comment #2.
strict enum MyStrictEnum : uint32 {
    /// FOO member comment #1
    ///
    /// FOO member comment #3
    FOO = 1;
    /// BAR member comment #1
    ///
    /// BAR member comment #3
    // Non doc-comment, should be ignored by FIDL toolchain.
    BAR = 2;
};

/// flexible enum comment #1.
///
/// flexible enum comment #2.
flexible enum MyFlexibleEnum : uint32 {
    /// FOO member comment #1
    ///
    /// FOO member comment #3
    FOO = 1;
    /// BAR member comment #1
    ///
    /// BAR member comment #3
    // Non doc-comment, should be ignored by FIDL toolchain.
    BAR = 2;
};

/// struct comment #1
///
/// struct comment #3
struct Struct {
    /// struct member comment #1
    ///
    /// struct member comment #3
    int32 Field;
};

/// strict union comment #1
///
/// strict union comment #3
strict union StrictUnion {
    /// union member comment #1
    ///
    /// union member comment #3
    1: int32 Field;
};

/// flexible union comment #1
///
/// flexible union comment #3
flexible union FlexibleUnion {
    /// union member comment #1
    ///
    /// union member comment #3
    1: int32 Field;
};

/// table comment #1
///
/// table comment #3
table Table {
    /// table field comment #1
    ///
    /// table field comment #3
    1: int32 Field;
};

/// interface comment #1
///
/// interface comment #3
protocol Interface {
    /// method comment #1
    ///
    /// method comment #3
    Method();

    /// event comment #1
    ///
    /// event comment #3
    -> OnEvent();
};

/// service comment #1
///
/// service comment #3
service Service {
    /// member comment #1
    ///
    /// member comment #3
    Interface interface;
};
