// Copyright 2018 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 fidl.examples.types;

struct this_is_a_struct {
    string s;
};

union this_is_a_union {
    string s;
};

interface this_is_an_interface {
    23: Copy(string s, uint32 count) -> (string s);
};

struct interfaces_and_requests {
    this_is_an_interface nonnullable_interface;
    this_is_an_interface? nullable_interface;
    request<this_is_an_interface> nonnullable_request;
    request<this_is_an_interface>? nullable_request;
};

struct primitive_types {
    bool b;
    int8 i8;
    int16 i16;
    int32 i32;
    int64 i64;
    uint8 u8;
    uint16 u16;
    uint32 u32;
    uint64 u64;
    float32 f32;
    float64 f64;
};

struct default_values {
    bool b1 = true;
    bool b2 = false;
    int8 i8 = -23;
    int16 i16 = 34;
    int32 i32 = -34595;
    int64 i64 = 3948038;
    uint8 u8 = 0;
    uint16 u16 = 348;
    uint32 u32 = 9038;
    uint64 u64 = 19835;
    float32 f32 = 1.30;
    float64 f64 = 0.0000054;
    string s = "hello";
};

const uint32 arrays_size = 32;

struct arrays {
    array<bool>:1 b_0;
    array<int8>:1 i8_0;
    array<int16>:1 i16_0;
    array<int32>:1 i32_0;
    array<int64>:1 i64_0;
    array<uint8>:1 u8_0;
    array<uint16>:1 u16_0;
    array<uint32>:1 u32_0;
    array<uint64>:1 u64_0;
    array<float32>:1 f32_0;
    array<float64>:1 f64_0;
    array<handle>:1 handle_0;

    array<bool>:arrays_size b_1;
    array<int8>:arrays_size i8_1;
    array<int16>:arrays_size i16_1;
    array<int32>:arrays_size i32_1;
    array<int64>:arrays_size i64_1;
    array<uint8>:arrays_size u8_1;
    array<uint16>:arrays_size u16_1;
    array<uint32>:arrays_size u32_1;
    array<uint64>:arrays_size u64_1;
    array<float32>:arrays_size f32_1;
    array<float64>:arrays_size f64_1;
    array<handle>:arrays_size handle_1;

    array<array<bool>:4>:arrays_size b_2;
    array<array<int8>:4>:arrays_size i8_2;
    array<array<int16>:4>:arrays_size i16_2;
    array<array<int32>:4>:arrays_size i32_2;
    array<array<int64>:4>:arrays_size i64_2;
    array<array<uint8>:4>:arrays_size u8_2;
    array<array<uint16>:4>:arrays_size u16_2;
    array<array<uint32>:4>:arrays_size u32_2;
    array<array<uint64>:4>:arrays_size u64_2;
    array<array<float32>:4>:arrays_size f32_2;
    array<array<float64>:4>:arrays_size f64_2;
    array<array<handle>:4>:arrays_size handle_2;
};

const uint32 vectors_size = 32;

struct vectors {
    vector<bool> b_0;
    vector<int8> i8_0;
    vector<int16> i16_0;
    vector<int32> i32_0;
    vector<int64> i64_0;
    vector<uint8> u8_0;
    vector<uint16> u16_0;
    vector<uint32> u32_0;
    vector<uint64> u64_0;
    vector<float32> f32_0;
    vector<float64> f64_0;
    vector<handle> handle_0;

    vector<vector<bool>:4> b_1;
    vector<vector<int8>:4> i8_1;
    vector<vector<int16>:4> i16_1;
    vector<vector<int32>:4> i32_1;
    vector<vector<int64>:4> i64_1;
    vector<vector<uint8>:4> u8_1;
    vector<vector<uint16>:4> u16_1;
    vector<vector<uint32>:4> u32_1;
    vector<vector<uint64>:4> u64_1;
    vector<vector<float32>:4> f32_1;
    vector<vector<float64>:4> f64_1;
    vector<vector<handle>:4> handle_1;

    vector<bool>:1 b_sized_0;
    vector<int8>:1 i8_sized_0;
    vector<int16>:1 i16_sized_0;
    vector<int32>:1 i32_sized_0;
    vector<int64>:1 i64_sized_0;
    vector<uint8>:1 u8_sized_0;
    vector<uint16>:1 u16_sized_0;
    vector<uint32>:1 u32_sized_0;
    vector<uint64>:1 u64_sized_0;
    vector<float32>:1 f32_sized_0;
    vector<float64>:1 f64_sized_0;
    vector<handle>:1 handle_sized_0;

    vector<bool>:vectors_size b_sized_1;
    vector<int8>:vectors_size i8_sized_1;
    vector<int16>:vectors_size i16_sized_1;
    vector<int32>:vectors_size i32_sized_1;
    vector<int64>:vectors_size i64_sized_1;
    vector<uint8>:vectors_size u8_sized_1;
    vector<uint16>:vectors_size u16_sized_1;
    vector<uint32>:vectors_size u32_sized_1;
    vector<uint64>:vectors_size u64_sized_1;
    vector<float32>:vectors_size f32_sized_1;
    vector<float64>:vectors_size f64_sized_1;
    vector<handle>:vectors_size handle_sized_1;

    vector<vector<bool>:4>:vectors_size b_sized_2;
    vector<vector<int8>:4>:vectors_size i8_sized_2;
    vector<vector<int16>:4>:vectors_size i16_sized_2;
    vector<vector<int32>:4>:vectors_size i32_sized_2;
    vector<vector<int64>:4>:vectors_size i64_sized_2;
    vector<vector<uint8>:4>:vectors_size u8_sized_2;
    vector<vector<uint16>:4>:vectors_size u16_sized_2;
    vector<vector<uint32>:4>:vectors_size u32_sized_2;
    vector<vector<uint64>:4>:vectors_size u64_sized_2;
    vector<vector<float32>:4>:vectors_size f32_sized_2;
    vector<vector<float64>:4>:vectors_size f64_sized_2;
    vector<vector<handle>:4>:vectors_size handle_sized_2;

    vector<bool>:1? b_nullable_0;
    vector<int8>:1? i8_nullable_0;
    vector<int16>:1? i16_nullable_0;
    vector<int32>:1? i32_nullable_0;
    vector<int64>:1? i64_nullable_0;
    vector<uint8>:1? u8_nullable_0;
    vector<uint16>:1? u16_nullable_0;
    vector<uint32>:1? u32_nullable_0;
    vector<uint64>:1? u64_nullable_0;
    vector<float32>:1? f32_nullable_0;
    vector<float64>:1? f64_nullable_0;
    vector<handle>:1? handle_nullable_0;

    vector<vector<bool>:4>? b_nullable_1;
    vector<vector<int8>:4>? i8_nullable_1;
    vector<vector<int16>:4>? i16_nullable_1;
    vector<vector<int32>:4>? i32_nullable_1;
    vector<vector<int64>:4>? i64_nullable_1;
    vector<vector<uint8>:4>? u8_nullable_1;
    vector<vector<uint16>:4>? u16_nullable_1;
    vector<vector<uint32>:4>? u32_nullable_1;
    vector<vector<uint64>:4>? u64_nullable_1;
    vector<vector<float32>:4>? f32_nullable_1;
    vector<vector<float64>:4>? f64_nullable_1;
    vector<vector<handle>:4>? handle_nullable_1;

    vector<bool>:1? b_nullable_sized_0;
    vector<int8>:1? i8_nullable_sized_0;
    vector<int16>:1? i16_nullable_sized_0;
    vector<int32>:1? i32_nullable_sized_0;
    vector<int64>:1? i64_nullable_sized_0;
    vector<uint8>:1? u8_nullable_sized_0;
    vector<uint16>:1? u16_nullable_sized_0;
    vector<uint32>:1? u32_nullable_sized_0;
    vector<uint64>:1? u64_nullable_sized_0;
    vector<float32>:1? f32_nullable_sized_0;
    vector<float64>:1? f64_nullable_sized_0;
    vector<handle>:1? handle_nullable_sized_0;

    vector<bool>:vectors_size? b_nullable_sized_1;
    vector<int8>:vectors_size? i8_nullable_sized_1;
    vector<int16>:vectors_size? i16_nullable_sized_1;
    vector<int32>:vectors_size? i32_nullable_sized_1;
    vector<int64>:vectors_size? i64_nullable_sized_1;
    vector<uint8>:vectors_size? u8_nullable_sized_1;
    vector<uint16>:vectors_size? u16_nullable_sized_1;
    vector<uint32>:vectors_size? u32_nullable_sized_1;
    vector<uint64>:vectors_size? u64_nullable_sized_1;
    vector<float32>:vectors_size? f32_nullable_sized_1;
    vector<float64>:vectors_size? f64_nullable_sized_1;
    vector<handle>:vectors_size? handle_nullable_sized_1;

    vector<vector<bool>:4>:vectors_size? b_nullable_sized_2;
    vector<vector<int8>:4>:vectors_size? i8_nullable_sized_2;
    vector<vector<int16>:4>:vectors_size? i16_nullable_sized_2;
    vector<vector<int32>:4>:vectors_size? i32_nullable_sized_2;
    vector<vector<int64>:4>:vectors_size? i64_nullable_sized_2;
    vector<vector<uint8>:4>:vectors_size? u8_nullable_sized_2;
    vector<vector<uint16>:4>:vectors_size? u16_nullable_sized_2;
    vector<vector<uint32>:4>:vectors_size? u32_nullable_sized_2;
    vector<vector<uint64>:4>:vectors_size? u64_nullable_sized_2;
    vector<vector<float32>:4>:vectors_size? f32_nullable_sized_2;
    vector<vector<float64>:4>:vectors_size? f64_nullable_sized_2;
    vector<vector<handle>:4>:vectors_size? handle_nullable_sized_2;
};

[Awesome]
struct handles {
    handle handle_handle;
    handle<process> process_handle;
    handle<thread> thread_handle;
    handle<vmo> vmo_handle;
    handle<channel> channel_handle;
    handle<event> event_handle;
    handle<port> port_handle;
    handle<interrupt> interrupt_handle;
    handle<debuglog> debuglog_handle;
    handle<socket> socket_handle;
    handle<resource> resource_handle;
    handle<eventpair> eventpair_handle;
    handle<job> job_handle;
    handle<vmar> vmar_handle;
    handle<fifo> fifo_handle;
    handle<guest> guest_handle;
    handle<timer> timer_handle;
    handle<bti> bti_handle;
    handle<profile> profile_handle;

    handle? nullable_handle_handle;
    handle<process>? nullable_process_handle;
    handle<thread>? nullable_thread_handle;
    handle<vmo>? nullable_vmo_handle;
    handle<channel>? nullable_channel_handle;
    handle<event>? nullable_event_handle;
    handle<port>? nullable_port_handle;
    handle<interrupt>? nullable_interrupt_handle;
    handle<debuglog>? nullable_debuglog_handle;
    handle<socket>? nullable_socket_handle;
    handle<resource>? nullable_resource_handle;
    handle<eventpair>? nullable_eventpair_handle;
    handle<job>? nullable_job_handle;
    handle<vmar>? nullable_vmar_handle;
    handle<fifo>? nullable_fifo_handle;
    handle<guest>? nullable_guest_handle;
    handle<timer>? nullable_timer_handle;
    handle<bti>? nullable_bti_handle;
    handle<profile>? nullable_profile_handle;
};

const uint32 strings_size = 32;

struct strings {
    string s;
    string? nullable_s;
    string:4 size_0_s;
    string:strings_size size_1_s;
    string:4? nullable_size_0_s;
    string:strings_size? nullable_size_1_s;
};

enum default_enum {
    x = 23;
};

enum i8_enum : int8 {
    x = 23;
};

enum i16_enum : int16 {
    x = 23;
};

enum i32_enum : int32 {
    x = 23;
};

enum i64_enum : int64 {
    x = 23;
};

enum u8_enum : uint8 {
    x = 23;
};

enum u16_enum : uint16 {
    x = 23;
};

enum u32_enum : uint32 {
    x = 23;
};

enum u64_enum : uint64 {
    x = 23;
};

struct structs {
    this_is_a_struct s;
    this_is_a_struct? nullable_s;
};

struct unions {
    this_is_a_union s;
    this_is_a_union? nullable_u;
};

struct interfaces {
    this_is_an_interface i;
    this_is_an_interface? nullable_i;
};

struct requests {
    request<this_is_an_interface> r;
    request<this_is_an_interface>? nullable_r;
};

xunion this_is_a_xunion {
    string s;
    int32 i;
};
