ldap_parser/
filter.rs

1//! Definition for types used in LDAP filters
2
3use crate::ldap::LdapString;
4use asn1_rs::ToStatic;
5use std::borrow::Cow;
6
7#[derive(Clone, Debug, Eq, PartialEq, ToStatic)]
8pub enum Filter<'a> {
9    And(Vec<Filter<'a>>),
10    Or(Vec<Filter<'a>>),
11    Not(Box<Filter<'a>>),
12    EqualityMatch(AttributeValueAssertion<'a>),
13    Substrings(SubstringFilter<'a>),
14    GreaterOrEqual(AttributeValueAssertion<'a>),
15    LessOrEqual(AttributeValueAssertion<'a>),
16    Present(LdapString<'a>),
17    ApproxMatch(AttributeValueAssertion<'a>),
18    ExtensibleMatch(MatchingRuleAssertion<'a>),
19}
20
21#[derive(Clone, Debug, Eq, PartialEq, ToStatic)]
22pub struct PartialAttribute<'a> {
23    pub attr_type: LdapString<'a>,
24    pub attr_vals: Vec<AttributeValue<'a>>,
25}
26
27#[derive(Clone, Debug, Eq, PartialEq, ToStatic)]
28pub struct Attribute<'a> {
29    pub attr_type: LdapString<'a>,
30    pub attr_vals: Vec<AttributeValue<'a>>,
31}
32
33#[derive(Clone, Debug, Eq, PartialEq, ToStatic)]
34pub struct AttributeValueAssertion<'a> {
35    pub attribute_desc: LdapString<'a>,
36    pub assertion_value: Cow<'a, [u8]>,
37}
38
39#[derive(Clone, Debug, Eq, PartialEq, ToStatic)]
40pub struct AttributeDescription<'a>(pub Cow<'a, str>);
41
42#[derive(Clone, Debug, Eq, PartialEq, ToStatic)]
43pub struct MatchingRuleAssertion<'a> {
44    pub matching_rule: Option<LdapString<'a>>,
45    pub rule_type: Option<AttributeDescription<'a>>,
46    pub assertion_value: AssertionValue<'a>,
47    pub dn_attributes: Option<bool>,
48}
49
50#[derive(Clone, Debug, Eq, PartialEq, ToStatic)]
51pub struct MatchingRuleId<'a>(pub Cow<'a, str>);
52
53#[derive(Clone, Debug, Eq, PartialEq, ToStatic)]
54pub struct SubstringFilter<'a> {
55    pub filter_type: LdapString<'a>,
56    pub substrings: Vec<Substring<'a>>,
57}
58
59#[derive(Clone, Debug, Eq, PartialEq, ToStatic)]
60pub enum Substring<'a> {
61    Initial(AssertionValue<'a>),
62    Any(AssertionValue<'a>),
63    Final(AssertionValue<'a>),
64}
65
66#[derive(Clone, Debug, Eq, PartialEq, ToStatic)]
67pub struct AssertionValue<'a>(pub Cow<'a, [u8]>);
68
69#[derive(Clone, Debug, Eq, PartialEq, ToStatic)]
70pub struct AttributeValue<'a>(pub Cow<'a, [u8]>);