ext_php_rs/types/
long.rs

1//! Represents an integer introduced in PHP. Note that the size of this integer
2//! differs. On a 32-bit system, a [`ZendLong`] is 32-bits, while on a 64-bit
3//! system it is 64-bits.
4
5use crate::{
6    convert::IntoZval,
7    error::{Error, Result},
8    ffi::zend_long,
9    flags::DataType,
10    types::Zval,
11};
12
13use std::convert::{TryFrom, TryInto};
14
15/// A PHP long.
16///
17/// The type size depends on the system architecture. On 32-bit systems, it is
18/// 32-bits, while on a 64-bit system, it is 64-bits.
19pub type ZendLong = zend_long;
20
21into_zval!(i8, set_long, Long);
22into_zval!(i16, set_long, Long);
23into_zval!(i32, set_long, Long);
24
25into_zval!(u8, set_long, Long);
26into_zval!(u16, set_long, Long);
27
28macro_rules! try_into_zval_int {
29    ($type: ty) => {
30        impl TryFrom<$type> for Zval {
31            type Error = Error;
32
33            fn try_from(val: $type) -> Result<Self> {
34                let mut zv = Self::new();
35                let val: ZendLong = val.try_into().map_err(|_| Error::IntegerOverflow)?;
36                zv.set_long(val);
37                Ok(zv)
38            }
39        }
40
41        impl IntoZval for $type {
42            const TYPE: DataType = DataType::Long;
43            const NULLABLE: bool = false;
44
45            fn set_zval(self, zv: &mut Zval, _: bool) -> Result<()> {
46                let val: ZendLong = self.try_into().map_err(|_| Error::IntegerOverflow)?;
47                zv.set_long(val);
48                Ok(())
49            }
50        }
51    };
52}
53
54try_into_zval_int!(i64);
55try_into_zval_int!(u32);
56try_into_zval_int!(u64);
57
58try_into_zval_int!(isize);
59try_into_zval_int!(usize);
60
61try_from_zval!(i8, long, Long);
62try_from_zval!(i16, long, Long);
63try_from_zval!(i32, long, Long);
64try_from_zval!(i64, long, Long);
65
66try_from_zval!(u8, long, Long);
67try_from_zval!(u16, long, Long);
68try_from_zval!(u32, long, Long);
69try_from_zval!(u64, long, Long);
70
71try_from_zval!(usize, long, Long);
72try_from_zval!(isize, long, Long);