• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

davidcole1340 / ext-php-rs / 16403230036

20 Jul 2025 07:03PM UTC coverage: 27.026% (-0.1%) from 27.144%
16403230036

Pull #535

github

web-flow
Merge 08bfe3962 into 6869625f4
Pull Request #535: feat(array): BTreeMap conversion

0 of 20 new or added lines in 2 files covered. (0.0%)

97 existing lines in 3 files now uncovered.

1127 of 4170 relevant lines covered (27.03%)

5.64 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

0.0
/src/types/array/conversions/btree_map.rs
1
use std::{collections::BTreeMap, convert::TryFrom};
2

3
use super::super::ZendHashTable;
4
use crate::types::ArrayKey;
5
use crate::{
6
    boxed::ZBox,
7
    convert::{FromZval, IntoZval},
8
    error::{Error, Result},
9
    flags::DataType,
10
    types::Zval,
11
};
12

13
impl<'a, K, V> TryFrom<&'a ZendHashTable> for BTreeMap<K, V>
14
where
15
    K: TryFrom<ArrayKey<'a>, Error = Error> + Ord,
16
    V: FromZval<'a>,
17
{
18
    type Error = Error;
19

NEW
20
    fn try_from(value: &'a ZendHashTable) -> Result<Self> {
×
NEW
21
        let mut hm = Self::new();
×
22

NEW
23
        for (key, val) in value {
×
NEW
24
            hm.insert(
×
NEW
25
                key.try_into()?,
×
NEW
26
                V::from_zval(val).ok_or_else(|| Error::ZvalConversion(val.get_type()))?,
×
27
            );
28
        }
29

NEW
30
        Ok(hm)
×
31
    }
32
}
33

34
impl<K, V> TryFrom<BTreeMap<K, V>> for ZBox<ZendHashTable>
35
where
36
    K: AsRef<str>,
37
    V: IntoZval,
38
{
39
    type Error = Error;
40

NEW
41
    fn try_from(value: BTreeMap<K, V>) -> Result<Self> {
×
42
        let mut ht = ZendHashTable::with_capacity(
NEW
43
            value.len().try_into().map_err(|_| Error::IntegerOverflow)?,
×
44
        );
45

NEW
46
        for (k, v) in value {
×
NEW
47
            ht.insert(k.as_ref(), v)?;
×
48
        }
49

NEW
50
        Ok(ht)
×
51
    }
52
}
53

54
impl<K, V> IntoZval for BTreeMap<K, V>
55
where
56
    K: AsRef<str>,
57
    V: IntoZval,
58
{
59
    const TYPE: DataType = DataType::Array;
60
    const NULLABLE: bool = false;
61

NEW
62
    fn set_zval(self, zv: &mut Zval, _: bool) -> Result<()> {
×
NEW
63
        let arr = self.try_into()?;
×
NEW
64
        zv.set_hashtable(arr);
×
NEW
65
        Ok(())
×
66
    }
67
}
68

69
impl<'a, T> FromZval<'a> for BTreeMap<String, T>
70
where
71
    T: FromZval<'a>,
72
{
73
    const TYPE: DataType = DataType::Array;
74

NEW
75
    fn from_zval(zval: &'a Zval) -> Option<Self> {
×
NEW
76
        zval.array().and_then(|arr| arr.try_into().ok())
×
77
    }
78
}
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc