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

davidcole1340 / ext-php-rs / 16431384382

22 Jul 2025 12:30AM UTC coverage: 27.022% (-0.1%) from 27.144%
16431384382

Pull #535

github

web-flow
Merge ccce30c62 into 6869625f4
Pull Request #535: feat(array): introducing BTreeMap conversion and refactoring HashMap conversion

7 of 36 new or added lines in 4 files covered. (19.44%)

78 existing lines in 1 file now uncovered.

1126 of 4167 relevant lines covered (27.02%)

5.75 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