fn serialize()

in src/serialize/per_type/int.rs [80:111]


    fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
    where
        S: Serializer,
    {
        unsafe {
            if crate::ffi::pylong_is_unsigned(self.ptr) {
                let val = ffi!(PyLong_AsUnsignedLongLong(self.ptr));
                if unlikely!(val == u64::MAX) && !ffi!(PyErr_Occurred()).is_null() {
                    ffi!(PyErr_Clear());
                    err!(SerializeError::Integer64Bits)
                } else if unlikely!(opt_enabled!(self.opts, STRICT_INTEGER))
                    && val > STRICT_INT_MAX as u64
                {
                    err!(SerializeError::Integer53Bits)
                } else {
                    serializer.serialize_u64(val)
                }
            } else {
                let val = ffi!(PyLong_AsLongLong(self.ptr));
                if unlikely!(val == -1) && !ffi!(PyErr_Occurred()).is_null() {
                    ffi!(PyErr_Clear());
                    err!(SerializeError::Integer64Bits)
                } else if unlikely!(opt_enabled!(self.opts, STRICT_INTEGER))
                    && !(STRICT_INT_MIN..=STRICT_INT_MAX).contains(&val)
                {
                    err!(SerializeError::Integer53Bits)
                } else {
                    serializer.serialize_i64(val)
                }
            }
        }
    }