codegraph_parser_api/
config.rs1use serde::{Deserialize, Serialize};
2use std::time::Duration;
3
4#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
6pub struct ParserConfig {
7 pub skip_private: bool,
9
10 pub skip_tests: bool,
12
13 pub max_file_size: usize,
16
17 #[serde(with = "duration_option")]
19 pub timeout_per_file: Option<Duration>,
20
21 pub parallel: bool,
23
24 pub parallel_workers: Option<usize>,
26
27 pub include_docs: bool,
29
30 pub extract_types: bool,
32}
33
34mod duration_option {
36 use serde::{Deserialize, Deserializer, Serialize, Serializer};
37 use std::time::Duration;
38
39 pub fn serialize<S>(duration: &Option<Duration>, serializer: S) -> Result<S::Ok, S::Error>
40 where
41 S: Serializer,
42 {
43 match duration {
44 Some(d) => d.as_secs().serialize(serializer),
45 None => serializer.serialize_none(),
46 }
47 }
48
49 pub fn deserialize<'de, D>(deserializer: D) -> Result<Option<Duration>, D::Error>
50 where
51 D: Deserializer<'de>,
52 {
53 let secs: Option<u64> = Option::deserialize(deserializer)?;
54 Ok(secs.map(Duration::from_secs))
55 }
56}
57
58impl Default for ParserConfig {
59 fn default() -> Self {
60 Self {
61 skip_private: false,
62 skip_tests: false,
63 max_file_size: 10 * 1024 * 1024, timeout_per_file: Some(Duration::from_secs(30)),
65 parallel: false,
66 parallel_workers: None,
67 include_docs: true,
68 extract_types: true,
69 }
70 }
71}
72
73impl ParserConfig {
74 pub fn fast() -> Self {
76 Self {
77 skip_tests: true,
78 include_docs: false,
79 extract_types: false,
80 ..Default::default()
81 }
82 }
83
84 pub fn comprehensive() -> Self {
86 Self {
87 skip_private: false,
88 skip_tests: false,
89 include_docs: true,
90 extract_types: true,
91 ..Default::default()
92 }
93 }
94
95 pub fn with_parallel(mut self, parallel: bool) -> Self {
97 self.parallel = parallel;
98 self
99 }
100
101 pub fn with_max_file_size(mut self, size: usize) -> Self {
103 self.max_file_size = size;
104 self
105 }
106}