1use 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
15pub 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);