@@ -320,6 +320,8 @@ impl<T: InternalNodeIdFilterBuilderOps> InternalNodeIdFilterBuilderOps for Windo
320320}
321321
322322impl < T : InternalPropertyFilterBuilderOps > InternalPropertyFilterBuilderOps for Windowed < T > {
323+ type Filter = Windowed < T :: Filter > ;
324+ type Chained = Windowed < T :: Chained > ;
323325 type Marker = T :: Marker ;
324326
325327 fn property_ref ( & self ) -> PropertyRef {
@@ -333,6 +335,14 @@ impl<T: InternalPropertyFilterBuilderOps> InternalPropertyFilterBuilderOps for W
333335 fn entity ( & self ) -> Self :: Marker {
334336 self . inner . entity ( )
335337 }
338+
339+ fn filter ( & self , filter : PropertyFilter < Self :: Marker > ) -> Self :: Filter {
340+ self . wrap ( self . inner . filter ( filter) )
341+ }
342+
343+ fn chained ( & self , builder : OpChainBuilder < Self :: Marker > ) -> Self :: Chained {
344+ self . wrap ( self . inner . chained ( builder) )
345+ }
336346}
337347
338348impl < T : TryAsCompositeFilter > TryAsCompositeFilter for Windowed < T > {
@@ -478,105 +488,197 @@ impl<S: Wrap> Wrap for Arc<S> {
478488 }
479489}
480490
481- pub trait InternalPropertyFilterFactory : Wrap {
491+ pub trait InternalPropertyFilterFactory {
482492 type Entity : Clone + Send + Sync + ' static ;
493+ type PropertyBuilder : InternalPropertyFilterBuilderOps + TemporalPropertyFilterFactory ;
494+ type MetadataBuilder : InternalPropertyFilterBuilderOps ;
483495
484496 fn entity ( & self ) -> Self :: Entity ;
497+
498+ fn property_builder (
499+ & self ,
500+ builder : PropertyFilterBuilder < Self :: Entity > ,
501+ ) -> Self :: PropertyBuilder ;
502+
503+ fn metadata_builder (
504+ & self ,
505+ builder : MetadataFilterBuilder < Self :: Entity > ,
506+ ) -> Self :: MetadataBuilder ;
485507}
486508
487509pub trait PropertyFilterFactory : InternalPropertyFilterFactory {
488- fn property (
489- & self ,
490- name : impl Into < String > ,
491- ) -> Self :: Wrapped < PropertyFilterBuilder < Self :: Entity > > {
510+ fn property ( & self , name : impl Into < String > ) -> Self :: PropertyBuilder {
492511 let builder = PropertyFilterBuilder :: new ( name, self . entity ( ) ) ;
493- self . wrap ( builder)
512+ self . property_builder ( builder)
494513 }
495514
496- fn metadata (
497- & self ,
498- name : impl Into < String > ,
499- ) -> Self :: Wrapped < MetadataFilterBuilder < Self :: Entity > > {
515+ fn metadata ( & self , name : impl Into < String > ) -> Self :: MetadataBuilder {
500516 let builder = MetadataFilterBuilder :: new ( name, self . entity ( ) ) ;
501- self . wrap ( builder)
517+ self . metadata_builder ( builder)
502518 }
503519}
504520
505- impl < T : PropertyFilterFactory > PropertyFilterFactory for ExplodedEndpointWrapper < T > { }
521+ impl < T : InternalPropertyFilterFactory > PropertyFilterFactory for T { }
506522
507523pub trait TemporalPropertyFilterFactory : InternalPropertyFilterBuilderOps {
508- fn temporal ( & self ) -> Self :: Wrapped < OpChainBuilder < Self :: Marker > > {
524+ fn temporal ( & self ) -> Self :: Chained {
509525 let builder = OpChainBuilder {
510526 prop_ref : PropertyRef :: TemporalProperty ( self . property_ref ( ) . name ( ) . to_string ( ) ) ,
511527 ops : vec ! [ ] ,
512528 entity : self . entity ( ) ,
513529 } ;
514- self . wrap ( builder)
530+ self . chained ( builder)
515531 }
516532}
517533
518534impl InternalPropertyFilterFactory for NodeFilter {
519535 type Entity = NodeFilter ;
536+ type PropertyBuilder = PropertyFilterBuilder < NodeFilter > ;
537+ type MetadataBuilder = MetadataFilterBuilder < NodeFilter > ;
520538
521539 fn entity ( & self ) -> Self :: Entity {
522540 NodeFilter
523541 }
524- }
525542
526- impl PropertyFilterFactory for NodeFilter { }
543+ fn property_builder (
544+ & self ,
545+ builder : PropertyFilterBuilder < Self :: Entity > ,
546+ ) -> Self :: PropertyBuilder {
547+ builder
548+ }
549+
550+ fn metadata_builder (
551+ & self ,
552+ builder : MetadataFilterBuilder < Self :: Entity > ,
553+ ) -> Self :: MetadataBuilder {
554+ builder
555+ }
556+ }
527557
528558impl InternalPropertyFilterFactory for EdgeFilter {
529559 type Entity = EdgeFilter ;
560+ type PropertyBuilder = PropertyFilterBuilder < EdgeFilter > ;
561+ type MetadataBuilder = MetadataFilterBuilder < EdgeFilter > ;
530562
531563 fn entity ( & self ) -> Self :: Entity {
532564 EdgeFilter
533565 }
534- }
535566
536- impl PropertyFilterFactory for EdgeFilter { }
567+ fn property_builder (
568+ & self ,
569+ builder : PropertyFilterBuilder < Self :: Entity > ,
570+ ) -> Self :: PropertyBuilder {
571+ builder
572+ }
573+
574+ fn metadata_builder (
575+ & self ,
576+ builder : MetadataFilterBuilder < Self :: Entity > ,
577+ ) -> Self :: MetadataBuilder {
578+ builder
579+ }
580+ }
537581
538582impl InternalPropertyFilterFactory for ExplodedEdgeFilter {
539583 type Entity = ExplodedEdgeFilter ;
584+ type PropertyBuilder = PropertyFilterBuilder < ExplodedEdgeFilter > ;
585+ type MetadataBuilder = MetadataFilterBuilder < ExplodedEdgeFilter > ;
540586
541587 fn entity ( & self ) -> Self :: Entity {
542588 ExplodedEdgeFilter
543589 }
544- }
545590
546- impl PropertyFilterFactory for ExplodedEdgeFilter { }
591+ fn property_builder (
592+ & self ,
593+ builder : PropertyFilterBuilder < Self :: Entity > ,
594+ ) -> Self :: PropertyBuilder {
595+ builder
596+ }
597+
598+ fn metadata_builder (
599+ & self ,
600+ builder : MetadataFilterBuilder < Self :: Entity > ,
601+ ) -> Self :: MetadataBuilder {
602+ builder
603+ }
604+ }
547605
548606impl < T : InternalPropertyFilterFactory > InternalPropertyFilterFactory for Windowed < T > {
549607 type Entity = T :: Entity ;
608+ type PropertyBuilder = Windowed < T :: PropertyBuilder > ;
609+ type MetadataBuilder = Windowed < T :: MetadataBuilder > ;
550610
551611 fn entity ( & self ) -> Self :: Entity {
552612 self . inner . entity ( )
553613 }
614+
615+ fn property_builder (
616+ & self ,
617+ builder : PropertyFilterBuilder < Self :: Entity > ,
618+ ) -> Self :: PropertyBuilder {
619+ self . wrap ( self . inner . property_builder ( builder) )
620+ }
621+
622+ fn metadata_builder (
623+ & self ,
624+ builder : MetadataFilterBuilder < Self :: Entity > ,
625+ ) -> Self :: MetadataBuilder {
626+ self . wrap ( self . inner . metadata_builder ( builder) )
627+ }
554628}
555629
556630impl < T : TemporalPropertyFilterFactory > TemporalPropertyFilterFactory for Windowed < T > { }
557631
558- impl < T : PropertyFilterFactory > PropertyFilterFactory for Windowed < T > { }
559-
560632impl < T : InternalPropertyFilterFactory > InternalPropertyFilterFactory for EndpointWrapper < T > {
561633 type Entity = T :: Entity ;
634+ type PropertyBuilder = EndpointWrapper < T :: PropertyBuilder > ;
635+ type MetadataBuilder = EndpointWrapper < T :: MetadataBuilder > ;
562636
563637 fn entity ( & self ) -> Self :: Entity {
564638 self . inner . entity ( )
565639 }
640+
641+ fn property_builder (
642+ & self ,
643+ builder : PropertyFilterBuilder < Self :: Entity > ,
644+ ) -> Self :: PropertyBuilder {
645+ self . wrap ( self . inner . property_builder ( builder) )
646+ }
647+
648+ fn metadata_builder (
649+ & self ,
650+ builder : MetadataFilterBuilder < Self :: Entity > ,
651+ ) -> Self :: MetadataBuilder {
652+ self . wrap ( self . inner . metadata_builder ( builder) )
653+ }
566654}
567655
568656impl < T : TemporalPropertyFilterFactory > TemporalPropertyFilterFactory for EndpointWrapper < T > { }
569657
570- impl < T : PropertyFilterFactory > PropertyFilterFactory for EndpointWrapper < T > { }
571-
572658impl < T : InternalPropertyFilterFactory > InternalPropertyFilterFactory
573659 for ExplodedEndpointWrapper < T >
574660{
575661 type Entity = T :: Entity ;
662+ type PropertyBuilder = ExplodedEndpointWrapper < T :: PropertyBuilder > ;
663+ type MetadataBuilder = ExplodedEndpointWrapper < T :: MetadataBuilder > ;
576664
577665 fn entity ( & self ) -> Self :: Entity {
578666 self . inner . entity ( )
579667 }
668+
669+ fn property_builder (
670+ & self ,
671+ builder : PropertyFilterBuilder < Self :: Entity > ,
672+ ) -> Self :: PropertyBuilder {
673+ self . wrap ( self . inner . property_builder ( builder) )
674+ }
675+
676+ fn metadata_builder (
677+ & self ,
678+ builder : MetadataFilterBuilder < Self :: Entity > ,
679+ ) -> Self :: MetadataBuilder {
680+ self . wrap ( self . inner . metadata_builder ( builder) )
681+ }
580682}
581683
582684impl < T : TemporalPropertyFilterFactory > TemporalPropertyFilterFactory
0 commit comments