# Record for use in constants
constant_record = record {
    some_integer: i32;
    some_string: string;
}

# Record containing constants
constants = record {
    # bool_constant has documentation.
    const bool_constant: bool = true;
    const i8_constant: i8 = 1;
    const i16_constant: i16 = 2;
    const i32_constant: i32 = 3;
    const i64_constant: i64 = 4;
    const f32_constant: f32 = 5.0;
    # f64_constant has long documentation.
    # (Second line of multi-line documentation.
    #   Indented third line of multi-line documentation.)
    const f64_constant: f64 = 5.0;

    const opt_bool_constant: optional<bool> = true;
    const opt_i8_constant: optional<i8> = 1;
    # opt_i16_constant has documentation.
    const opt_i16_constant: optional<i16> = 2;
    const opt_i32_constant: optional<i32> = 3;
    const opt_i64_constant: optional<i64> = 4;
    # opt_f32_constant has long documentation.
    # (Second line of multi-line documentation.
    #   Indented third line of multi-line documentation.)
    const opt_f32_constant: optional<f32> = 5.0;
    const opt_f64_constant: optional<f64> = 5.0;

    const string_constant: string = "string-constant";
    const opt_string_constant: optional<string> = "string-constant";

    const object_constant: constant_record = {
        some_integer = i32_constant,
        some_string = string_constant
    };

    # No support for null optional constants
    # No support for optional constant records
    # No support for constant binary, list, set, map

    const dummy: bool = false;
}

# Interface containing constants
constants_interface = interface +c {
    const bool_constant: bool = true;
    const i8_constant: i8 = 1;
    const i16_constant: i16 = 2;
    # i32_constant has documentation.
    const i32_constant: i32 = 3;
    # i64_constant has long documentation.
    # (Second line of multi-line documentation.
    #   Indented third line of multi-line documentation.)
    const i64_constant: i64 = 4;
    const f32_constant: f32 = 5.0;
    const f64_constant: f64 = 5.0;

    const opt_bool_constant: optional<bool> = true;
    const opt_i8_constant: optional<i8> = 1;
    # opt_i16_constant has documentation.
    const opt_i16_constant: optional<i16> = 2;
    const opt_i32_constant: optional<i32> = 3;
    const opt_i64_constant: optional<i64> = 4;
    # opt_f32_constant has long documentation.
    # (Second line of multi-line documentation.
    #   Indented third line of multi-line documentation.)
    const opt_f32_constant: optional<f32> = 5.0;
    const opt_f64_constant: optional<f64> = 5.0;

    const string_constant: string = "string-constant";
    const opt_string_constant: optional<string> = "string-constant";

    const object_constant: constant_record = {
        some_integer = i32_constant,
        some_string = string_constant
    };

    # No support for null optional constants
    # No support for optional constant records
    # No support for constant binary, list, set, map

    dummy();
}
