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