@@ -74,14 +74,14 @@ struct CollectionData {
7474pub struct RemoteSettingsClient < C = ViaductApiClient > {
7575 // This is immutable, so it can be outside the mutex
7676 collection_name : String ,
77- #[ cfg( feature = "jexl" ) ]
78- jexl_filter : JexlFilter ,
7977 inner : Mutex < RemoteSettingsClientInner < C > > ,
8078}
8179
8280struct RemoteSettingsClientInner < C > {
8381 storage : Storage ,
8482 api_client : C ,
83+ #[ cfg( feature = "jexl" ) ]
84+ jexl_filter : JexlFilter ,
8585}
8686
8787// Add your local packaged data you want to work with here
@@ -123,11 +123,11 @@ impl<C: ApiClient> RemoteSettingsClient<C> {
123123 ) -> Self {
124124 Self {
125125 collection_name,
126- #[ cfg( feature = "jexl" ) ]
127- jexl_filter,
128126 inner : Mutex :: new ( RemoteSettingsClientInner {
129127 storage,
130128 api_client,
129+ #[ cfg( feature = "jexl" ) ]
130+ jexl_filter,
131131 } ) ,
132132 }
133133 }
@@ -149,20 +149,28 @@ impl<C: ApiClient> RemoteSettingsClient<C> {
149149
150150 /// Filters records based on the presence and evaluation of `filter_expression`.
151151 #[ cfg( feature = "jexl" ) ]
152- fn filter_records ( & self , records : Vec < RemoteSettingsRecord > ) -> Vec < RemoteSettingsRecord > {
152+ fn filter_records (
153+ & self ,
154+ records : Vec < RemoteSettingsRecord > ,
155+ inner : & RemoteSettingsClientInner < C > ,
156+ ) -> Vec < RemoteSettingsRecord > {
153157 records
154158 . into_iter ( )
155159 . filter ( |record| match record. fields . get ( "filter_expression" ) {
156160 Some ( serde_json:: Value :: String ( filter_expr) ) => {
157- self . jexl_filter . evaluate ( filter_expr) . unwrap_or ( false )
161+ inner . jexl_filter . evaluate ( filter_expr) . unwrap_or ( false )
158162 }
159163 _ => true , // Include records without a valid filter expression by default
160164 } )
161165 . collect ( )
162166 }
163167
164168 #[ cfg( not( feature = "jexl" ) ) ]
165- fn filter_records ( & self , records : Vec < RemoteSettingsRecord > ) -> Vec < RemoteSettingsRecord > {
169+ fn filter_records (
170+ & self ,
171+ records : Vec < RemoteSettingsRecord > ,
172+ _inner : & RemoteSettingsClientInner < C > ,
173+ ) -> Vec < RemoteSettingsRecord > {
166174 records
167175 }
168176
@@ -199,7 +207,7 @@ impl<C: ApiClient> RemoteSettingsClient<C> {
199207 packaged_data. timestamp ,
200208 CollectionMetadata :: default ( ) ,
201209 ) ?;
202- return Ok ( Some ( self . filter_records ( packaged_data. data ) ) ) ;
210+ return Ok ( Some ( self . filter_records ( packaged_data. data , & inner ) ) ) ;
203211 }
204212 }
205213
@@ -210,7 +218,7 @@ impl<C: ApiClient> RemoteSettingsClient<C> {
210218 //
211219 // Note: we should return these even if it's an empty list and `sync_if_empty=true`.
212220 // The "if empty" part refers to the cache being empty, not the list.
213- ( Some ( cached_records) , _) => Some ( self . filter_records ( cached_records) ) ,
221+ ( Some ( cached_records) , _) => Some ( self . filter_records ( cached_records, & inner ) ) ,
214222 // Case 3: sync_if_empty=true
215223 ( None , true ) => {
216224 let changeset = inner. api_client . fetch_changeset ( None ) ?;
@@ -220,7 +228,7 @@ impl<C: ApiClient> RemoteSettingsClient<C> {
220228 changeset. timestamp ,
221229 changeset. metadata ,
222230 ) ?;
223- Some ( self . filter_records ( changeset. changes ) )
231+ Some ( self . filter_records ( changeset. changes , & inner ) )
224232 }
225233 // Case 4: Nothing to return
226234 ( None , false ) => None ,
0 commit comments