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 system
3//! it is 64-bits.
4
5use crate::{
6    convert::IntoZval,
7    error::{Error, Result},
8    ffi::zend_long,
9    flags::DataType,
10    macros::{into_zval, try_from_zval},
11    types::Zval,
12};
13
14use std::convert::{TryFrom, TryInto};
15
16/// A PHP long.
17///
18/// The type size depends on the system architecture. On 32-bit systems, it is
19/// 32-bits, while on a 64-bit system, it is 64-bits.
20pub type ZendLong = zend_long;
21
22into_zval!(i8, set_long, Long);
23into_zval!(i16, set_long, Long);
24into_zval!(i32, set_long, Long);
25
26into_zval!(u8, set_long, Long);
27into_zval!(u16, set_long, Long);
28
29macro_rules! try_into_zval_int {
30    ($type: ty) => {
31        impl TryFrom<$type> for Zval {
32            type Error = Error;
33
34            fn try_from(val: $type) -> Result<Self> {
35                let mut zv = Self::new();
36                let val: ZendLong = val.try_into().map_err(|_| Error::IntegerOverflow)?;
37                zv.set_long(val);
38                Ok(zv)
39            }
40        }
41
42        impl IntoZval for $type {
43            const TYPE: DataType = DataType::Long;
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);