cido 0.2.0

Core traits and implementations for indexing with cido
Documentation
use crate::helper_macros::{is_none, is_none_range};
use core::fmt::Display;

use super::{Filter, Operator};

impl_as_graphql_id_filter!(String);
impl_as_graphql_filter! {string(String)}
impl_as_graphql_filter! {option_string(String)}
impl_as_graphql_filter! {array(String)}
impl_as_graphql_filter! {optional_array(String)}
impl_as_db_filter! {string(String)}
impl_as_db_filter! {array(String)}
impl_as_db_filter! {optional_array(String)}
impl_as_db_filter! {option_string(String)}

filter!(StringFilter: [StringOperator; 20],
    extra_bounds: {Display},
    extra_binds: {
        Contains => bind_surround,
        ContainsNoCase => bind_surround,
        NotContains => bind_surround,
        NotContainsNoCase => bind_surround,
        StartsWith => bind_prefix,
        StartsWithNoCase => bind_prefix,
        EndsWith => bind_suffix,
        EndsWithNoCase => bind_suffix,
        NotStartsWith => bind_prefix,
        NotStartsWithNoCase => bind_prefix,
        NotEndsWith => bind_suffix,
        NotEndsWithNoCase => bind_suffix,
    },
    null { },
    primitive {
      0: Eq:eq:"",
      1: Not:not:"not",
      2: Gt:gt:"gt",
      3: Gte:gte:"gte",
      4: Lt:lt:"lt",
      5: Lte:lte:"lte",
      6: Contains:contains:"contains",
      7: ContainsNoCase:contains_nocase:"contains_nocase",
      8: NotContains:not_contains:"not_contains",
      9: NotContainsNoCase:not_contains_nocase:"not_contains_nocase",
      10: StartsWith:starts_with:"starts_with",
      11: StartsWithNoCase:starts_with_nocase:"starts_with_nocase",
      12: NotStartsWith:not_starts_with:"not_starts_with",
      13: NotStartsWithNoCase:not_starts_with_nocase:"not_starts_with_nocase",
      14: EndsWith:ends_with:"ends_with",
      15: EndsWithNoCase:ends_with_nocase:"ends_with_nocase",
      16: NotEndsWith:not_ends_with:"not_ends_with",
      17: NotEndsWithNoCase:not_ends_with_nocase:"not_ends_with_nocase"
    },
    primitives {
      18: In:in_:"in",
      19: NotIn:not_in:"not_in"
    }
);

filter!(OptionalStringFilter: [OptionalStringOperator; 21],
    extra_bounds: {Display},
    extra_binds: {
      Contains => bind_surround,
      ContainsNoCase => bind_surround,
      NotContains => bind_surround,
      NotContainsNoCase => bind_surround,
      StartsWith => bind_prefix,
      StartsWithNoCase => bind_prefix,
      EndsWith => bind_suffix,
      EndsWithNoCase => bind_suffix,
      NotStartsWith => bind_prefix,
      NotStartsWithNoCase => bind_prefix,
      NotEndsWith => bind_suffix,
      NotEndsWithNoCase => bind_suffix,
    },
    null { 20:Null:null:"null" },
    primitive {
      0: Eq:eq:"",
      1: Not:not:"not",
      2: Gt:gt:"gt",
      3: Gte:gte:"gte",
      4: Lt:lt:"lt",
      5: Lte:lte:"lte",
      6: Contains:contains:"contains",
      7: ContainsNoCase:contains_nocase:"contains_nocase",
      8: NotContains:not_contains:"not_contains",
      9: NotContainsNoCase:not_contains_nocase:"not_contains_nocase",
      10: StartsWith:starts_with:"starts_with",
      11: StartsWithNoCase:starts_with_nocase:"starts_with_nocase",
      12: NotStartsWith:not_starts_with:"not_starts_with",
      13: NotStartsWithNoCase:not_starts_with_nocase:"not_starts_with_nocase",
      14: EndsWith:ends_with:"ends_with",
      15: EndsWithNoCase:ends_with_nocase:"ends_with_nocase",
      16: NotEndsWith:not_ends_with:"not_ends_with",
      17: NotEndsWithNoCase:not_ends_with_nocase:"not_ends_with_nocase"
    },
    primitives {
      18: In:in_:"in",
      19: NotIn:not_in:"not_in"
    }
);