turbopack_dev_server/source/
query.rs1use std::{collections::BTreeMap, hash::Hash, ops::DerefMut};
2
3use bincode::{Decode, Encode};
4use serde::Deserialize;
5use turbo_tasks::{NonLocalValue, TaskInput};
6
7use crate::source::ContentSourceDataFilter;
8
9#[derive(
11 Clone, Debug, PartialEq, Eq, Default, Hash, Deserialize, NonLocalValue, Encode, Decode,
12)]
13pub struct Query(BTreeMap<String, QueryValue>);
14
15impl TaskInput for Query {
18 fn is_transient(&self) -> bool {
19 false
20 }
21}
22
23impl Query {
24 pub fn filter_with(&mut self, filter: &ContentSourceDataFilter) {
25 match filter {
26 ContentSourceDataFilter::All => {
27 }
29 _ => self.0.retain(|k, _| filter.contains(k)),
30 }
31 }
32}
33
34impl std::ops::Deref for Query {
35 type Target = BTreeMap<String, QueryValue>;
36 fn deref(&self) -> &Self::Target {
37 &self.0
38 }
39}
40
41impl DerefMut for Query {
42 fn deref_mut(&mut self) -> &mut Self::Target {
43 &mut self.0
44 }
45}
46
47#[derive(Clone, Debug, PartialEq, Eq, Hash, Deserialize, NonLocalValue, Encode, Decode)]
48#[serde(untagged)]
49pub enum QueryValue {
50 String(String),
52 Array(Vec<QueryValue>),
54 Nested(Query),
56}