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

davidcole1340 / ext-php-rs / 16401930518

20 Jul 2025 04:27PM UTC coverage: 26.829% (-0.1%) from 26.945%
16401930518

Pull #535

github

web-flow
Merge 9dbd1b190 into 25f508fc8
Pull Request #535: feat(array): BTreeMap conversion

0 of 18 new or added lines in 1 file covered. (0.0%)

97 existing lines in 3 files now uncovered.

1115 of 4156 relevant lines covered (26.83%)

5.62 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 crate::{
4
    boxed::ZBox,
5
    convert::{FromZval, IntoZval},
6
    error::{Error, Result},
7
    flags::DataType,
8
    types::Zval,
9
};
10

11
use super::super::ZendHashTable;
12

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

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

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

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

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

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

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

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

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

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

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

NEW
74
    fn from_zval(zval: &'a Zval) -> Option<Self> {
×
NEW
75
        zval.array().and_then(|arr| arr.try_into().ok())
×
76
    }
77
}
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