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    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            const NULLABLE: bool = false;
45
46            fn set_zval(self, zv: &mut Zval, _: bool) -> Result<()> {
47                let val: ZendLong = self.try_into().map_err(|_| Error::IntegerOverflow)?;
48                zv.set_long(val);
49                Ok(())
50            }
51        }
52    };
53}
54
55try_into_zval_int!(i64);
56try_into_zval_int!(u32);
57try_into_zval_int!(u64);
58
59try_into_zval_int!(isize);
60try_into_zval_int!(usize);
61
62try_from_zval!(i8, long, Long);
63try_from_zval!(i16, long, Long);
64try_from_zval!(i32, long, Long);
65try_from_zval!(i64, long, Long);
66
67try_from_zval!(u8, long, Long);
68try_from_zval!(u16, long, Long);
69try_from_zval!(u32, long, Long);
70try_from_zval!(u64, long, Long);
71
72try_from_zval!(usize, long, Long);
73try_from_zval!(isize, long, Long);