// Copyright 2019 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 zx;

// These are all aliases that will be subsumed by the future implementation of
// templating, constraints, etc. in fidlc.
//
// The right hand side is completely ignored by kazoo, that is, only the name of
// the alias is significant. Generally the right hand side is set so that if
// there were no handling of the alias (and the alias was "expanded" as is the
// default behaviour), it would result in something sensible.

// TODO(fidlc): (mutable) char*
using charptr = uint64;

// TODO(fidl)
using const_futexptr = int32;

// TODO(fidlc): const void*
using const_voidptr = uint64;

// TODO(fidlc): mutable<string>
using mutable_string = string;

// TODO(fidlc): mutable<uint32>
using mutable_uint32 = uint32;

// TODO(fidlc): mutable<usize>
using mutable_usize = usize;

// TODO(fidlc): uint32 size
// TODO(fidlc): mutable<vector<HandleDisposition>
using mutable_vector_HandleDisposition_u32size = vector<HandleDisposition>;

// TODO(fidlc): uint32 size
// TODO(fidlc): vector<HandleInfo>
using mutable_vector_HandleInfo_u32size = vector<HandleInfo>;

// TODO(fidlc): mutable<ChannelCallEtcArgs>
using mutable_ChannelCallEtcArgs = ChannelCallEtcArgs;

// TODO(fidlc): mutable<vector<WaitItem>>
using mutable_vector_WaitItem = vector<WaitItem>;

// TODO(fidlc): uint32 size
// TODO(fidlc): mutable<vector<handle>
using mutable_vector_handle_u32size = vector<handle>;

// TODO(fidlc): mutable<vector<void>>
using mutable_vector_void = vector<byte>;

// TODO(fidlc): uint32 size
// TODO(fidlc): mutable<vector<void>>
using mutable_vector_void_u32size = vector<byte>;

// TODO(fidlc): optional<PciBar>
using optional_PciBar = PciBar;

// TODO(fidlc): optional<PortPacket>
using optional_PortPacket = PortPacket;

// TODO(fidlc): optional<koid>
using optional_koid = koid;

// TODO(fidlc): optional<signals>
using optional_signals = signals;

// TODO(fidlc): optional<time>
using optional_time = time;

// TODO(fidlc): optional<uint32>
using optional_uint32 = uint32;

// TODO(fidlc): optional<usize>
using optional_usize = usize;

// TODO(fidlc): optional<usize>
using optional_off = off;

// TODO(fidlc): uint32 size
// TODO(fidlc): vector<HandleInfo>
using vector_HandleInfo_u32size = vector<HandleInfo>;

// TODO(fidlc): vector<handle> uint32 size
using vector_handle_u32size = vector<handle>;

// TODO(fidlc): vector<paddr>>
using vector_paddr = vector<paddr>;

// TODO(fidlc): vector<void>
using vector_void = vector<byte>;

// TODO(fidlc): vector<iovec>
using vector_iovec = vector<byte>;

// TODO(fidlc): uint32 size
// TODO(fidlc): vector<void>
using vector_void_u32size = vector<byte>;

// TODO(fidlc): (mutable) void*
using voidptr = uint64;

// This is <zircon/string_view.h>'s zx_string_view_t in C/C++.
using string_view = uint64;
