1use 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]>);