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

extphprs / ext-php-rs / 20068696237

09 Dec 2025 03:22PM UTC coverage: 35.015% (-0.3%) from 35.308%
20068696237

Pull #598

github

web-flow
Merge be00b05c4 into 34035ed16
Pull Request #598: feat(types): Argument coercion into HashSet/BTreeSet #493

2 of 38 new or added lines in 3 files covered. (5.26%)

2 existing lines in 1 file now uncovered.

1603 of 4578 relevant lines covered (35.02%)

8.45 hits per line

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

0.0
/src/types/array/conversions/hash_set.rs
1
use super::super::ZendHashTable;
2
use crate::{
3
    boxed::ZBox,
4
    convert::{FromZval, IntoZval},
5
    error::{Error, Result},
6
    flags::DataType,
7
    types::Zval,
8
};
9
use std::collections::HashSet;
10
use std::convert::TryFrom;
11
use std::hash::{BuildHasher, Hash};
12

13
impl<'a, V, H> TryFrom<&'a ZendHashTable> for HashSet<V, H>
14
where
15
    V: FromZval<'a> + Eq + Hash,
16
    H: BuildHasher + Default,
17
{
18
    type Error = Error;
19

NEW
20
    fn try_from(value: &'a ZendHashTable) -> Result<Self> {
×
NEW
21
        let mut set = Self::with_capacity_and_hasher(value.len(), H::default());
×
22

NEW
23
        for (_key, val) in value {
×
NEW
24
            set.insert(V::from_zval(val).ok_or_else(|| Error::ZvalConversion(val.get_type()))?);
×
25
        }
26

NEW
27
        Ok(set)
×
28
    }
29
}
30

31
impl<V, H> TryFrom<HashSet<V, H>> for ZBox<ZendHashTable>
32
where
33
    V: IntoZval,
34
    H: BuildHasher,
35
{
36
    type Error = Error;
37

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

NEW
43
        for (k, v) in value.into_iter().enumerate() {
×
NEW
44
            ht.insert(k, v)?;
×
45
        }
46

NEW
47
        Ok(ht)
×
48
    }
49
}
50

51
impl<V, H> IntoZval for HashSet<V, H>
52
where
53
    V: IntoZval,
54
    H: BuildHasher,
55
{
56
    const TYPE: DataType = DataType::Array;
57
    const NULLABLE: bool = false;
58

NEW
59
    fn set_zval(self, zv: &mut Zval, _: bool) -> Result<()> {
×
NEW
60
        let arr = self.try_into()?;
×
NEW
61
        zv.set_hashtable(arr);
×
NEW
62
        Ok(())
×
63
    }
64
}
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