// Copyright 2023 The LightningBolt Authors // SPDX-License-Identifier: MIT //! Core types and includes #pragma once #include #include #include #include #include // these are in the global namespace since most libraries // won't try defining anything like this in the global namespace // (and I'd like these types to be used globally a lot more anyways) using u8 = std::uint8_t; using i8 = std::int8_t; using u16 = std::uint16_t; using i16 = std::int16_t; using u32 = std::uint32_t; using i32 = std::int32_t; using u64 = std::uint64_t; using i64 = std::int64_t; using usize = std::size_t; using isize = std::intptr_t; namespace lightningbolt { namespace fs = std::filesystem; template > using Unique = std::unique_ptr; template using Ref = std::shared_ptr; } // namespace lightningbolt namespace std { /// Custom formatter for std::error_code. As far as I know, this is /// Not going to be added in C++23, despite the fact fmt already has a specialization for it, /// so I have to implement one myself. At least it's not that awful to. template <> struct formatter : formatter { template inline constexpr auto format(const error_code& ec, FormatContext& ctx) const { return std::format_to(ctx.out(), "{} [{}.{}]", ec.message(), ec.category().name(), ec.value()); } }; } // namespace std