/*
 * Copyright 2022 Rive
 */

#ifndef _RIVE_TYPE_CONVERSIONS_HPP_
#define _RIVE_TYPE_CONVERSIONS_HPP_

#include "rive/rive_types.hpp"
#include <limits>

namespace rive
{

template <typename T> bool fitsIn(intmax_t x)
{
    return x >= std::numeric_limits<T>::min() &&
           x <= std::numeric_limits<T>::max();
}

template <typename T> T castTo(intmax_t x)
{
    assert(sizeof(T) <= 4); // don't cast to 64bit types
    assert(fitsIn<T>(x));
    return static_cast<T>(x);
}

} // namespace rive

#endif
