fn serialize()

in src/serialize/per_type/int.rs [29:76]


    fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
    where
        S: Serializer,
    {
        unsafe {
            if crate::ffi::pylong_is_zero(self.ptr) {
                return serializer.serialize_bytes(b"0");
            }
            let is_signed = !crate::ffi::pylong_is_unsigned(self.ptr) as i32;
            if crate::ffi::pylong_fits_in_i32(self.ptr) {
                if is_signed == 0 {
                    serializer.serialize_u64(crate::ffi::pylong_get_inline_value(self.ptr) as u64)
                } else {
                    serializer.serialize_i64(crate::ffi::pylong_get_inline_value(self.ptr))
                }
            } else {
                let mut buffer: [u8; 8] = [0; 8];
                let ret = pyo3_ffi::_PyLong_AsByteArray(
                    self.ptr as *mut pyo3_ffi::PyLongObject,
                    buffer.as_mut_ptr() as *mut core::ffi::c_uchar,
                    8,
                    1,
                    is_signed,
                );
                if unlikely!(ret == -1) {
                    ffi!(PyErr_Clear());
                    err!(SerializeError::Integer64Bits)
                }
                if is_signed == 0 {
                    let val = core::mem::transmute::<[u8; 8], u64>(buffer);
                    if unlikely!(opt_enabled!(self.opts, STRICT_INTEGER))
                        && val > STRICT_INT_MAX as u64
                    {
                        err!(SerializeError::Integer53Bits)
                    }
                    serializer.serialize_u64(val)
                } else {
                    let val = core::mem::transmute::<[u8; 8], i64>(buffer);
                    if unlikely!(opt_enabled!(self.opts, STRICT_INTEGER))
                        && !(STRICT_INT_MIN..=STRICT_INT_MAX).contains(&val)
                    {
                        err!(SerializeError::Integer53Bits)
                    }
                    serializer.serialize_i64(val)
                }
            }
        }
    }