The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
TYPEMAP

PostgresPollingStatusType   T_MY_ENUM
ConnStatusType              T_MY_ENUM
PGTransactionStatusType     T_MY_ENUM
ExecStatusType              T_MY_ENUM
PGVerbosity                 T_MY_ENUM

PGconn *                    T_PGCONN
PGresult *                  T_PGRESULT
PGcancel *                  T_PGCANCEL

Oid                         T_OID

char *                      T_UTF8

INPUT
T_PGCONN
        $var = INT2PTR($type, SvIV((SV*)SvRV($arg)));
        if (!$var) Perl_croak(aTHX_ \"Null pointer error\");

T_PGRESULT
        $var = INT2PTR($type, SvIV((SV*)SvRV($arg)));
        if (!$var) Perl_croak(aTHX_ \"Null pointer error\");

T_PGCANCEL
        $var = INT2PTR($type, SvIV((SV*)SvRV($arg)));
        if (!$var) Perl_croak(aTHX_ \"Null pointer error\");


T_MY_ENUM
        $var = SvIV($arg);        

T_UTF8
        $var = SvPVutf8_nolen($arg);

T_OID
        $var = (SvOK($arg) ? SvIV($arg) : InvalidOid);

OUTPUT
T_PGCONN
        if ($var)
            sv_setref_pv($arg, \"Pg::PQ::Conn\", (void*)$var);
        else
            sv_setsv($arg, &PL_sv_undef);

T_PGRESULT
        if ($var)
            sv_setref_pv($arg, \"Pg::PQ::Result\", (void*)$var);
        else
            sv_setsv($arg, &PL_sv_undef);

T_PGCANCEL
        if ($var)
            sv_setref_pv($arg, \"Pg::PQ::Cancel\", (void*)$var);
        else
            sv_setsv($arg, &PL_sv_undef);

T_MY_ENUM
        $arg = ${ntype}2sv($var);

T_UTF8
        $arg = my_newSVpv_utf8(aTHX_ ($var));

T_OID
        $arg = (($var == InvalidOid) ? &PL_sv_undef : newSViv($var));