MODE: INLINE
#include <xs/typemap/expected.h>

MODULE = MyTest::Typemap                PACKAGE = MyTest::Expected
PROTOTYPES: DISABLE

TYPEMAP: << END
expected<void,std::error_code>   T_xs_expected
expected<string,std::error_code> T_xs_expected
END

void void_ok (...) {
    expected<void,std::error_code> ret = {};
    XSRETURN_EXPECTED(ret);
}

expected<void,std::error_code> void_err (...) {
    RETVAL = make_unexpected(make_error_code(std::errc::timed_out));
}

void ret_ok (...) {
    expected<string,std::error_code> ret = string("hi");
    XSRETURN_EXPECTED(ret);
}

expected<string,std::error_code> ret_err (...) {
    RETVAL = make_unexpected(make_error_code(std::errc::timed_out));
}


MODULE = MyTest::Typemap                PACKAGE = MyTest::Excepted
PROTOTYPES: DISABLE

TYPEMAP: << END
excepted<void,std::error_code>   T_xs_expected
excepted<string,std::error_code> T_xs_expected
END

void void_ok (...) {
    excepted<void,std::error_code> ret = {};
    XSRETURN_EXPECTED(ret);
}

excepted<void,std::error_code> void_err (...) {
    RETVAL = make_unexpected(make_error_code(std::errc::timed_out));
}

void ret_ok (...) {
    excepted<string,std::error_code> ret = string("hi");
    XSRETURN_EXPECTED(ret);
}

excepted<string,std::error_code> ret_err (...) {
    RETVAL = make_unexpected(make_error_code(std::errc::timed_out));
}