1use super::{LanguageFrameworkDetector, TechnologyRule, FrameworkDetectionUtils};
2use crate::analyzer::{DetectedTechnology, DetectedLanguage, TechnologyCategory, LibraryType};
3use crate::error::Result;
4
5pub struct RustFrameworkDetector;
6
7impl LanguageFrameworkDetector for RustFrameworkDetector {
8 fn detect_frameworks(&self, language: &DetectedLanguage) -> Result<Vec<DetectedTechnology>> {
9 let rules = get_rust_technology_rules();
10
11 let all_deps: Vec<String> = language.main_dependencies.iter()
13 .chain(language.dev_dependencies.iter())
14 .cloned()
15 .collect();
16
17 let technologies = FrameworkDetectionUtils::detect_technologies_by_dependencies(
18 &rules, &all_deps, language.confidence
19 );
20
21 Ok(technologies)
22 }
23
24 fn supported_languages(&self) -> Vec<&'static str> {
25 vec!["Rust"]
26 }
27}
28
29fn get_rust_technology_rules() -> Vec<TechnologyRule> {
31 vec![
32 TechnologyRule {
34 name: "Actix Web".to_string(),
35 category: TechnologyCategory::BackendFramework,
36 confidence: 0.95,
37 dependency_patterns: vec!["actix-web".to_string()],
38 requires: vec![],
39 conflicts_with: vec![],
40 is_primary_indicator: true,
41 alternative_names: vec!["actix".to_string()],
42 },
43 TechnologyRule {
44 name: "Axum".to_string(),
45 category: TechnologyCategory::BackendFramework,
46 confidence: 0.95,
47 dependency_patterns: vec!["axum".to_string()],
48 requires: vec!["Tokio".to_string()],
49 conflicts_with: vec![],
50 is_primary_indicator: true,
51 alternative_names: vec![],
52 },
53 TechnologyRule {
54 name: "Rocket".to_string(),
55 category: TechnologyCategory::BackendFramework,
56 confidence: 0.95,
57 dependency_patterns: vec!["rocket".to_string()],
58 requires: vec![],
59 conflicts_with: vec![],
60 is_primary_indicator: true,
61 alternative_names: vec![],
62 },
63 TechnologyRule {
64 name: "Warp".to_string(),
65 category: TechnologyCategory::BackendFramework,
66 confidence: 0.95,
67 dependency_patterns: vec!["warp".to_string()],
68 requires: vec!["Tokio".to_string()],
69 conflicts_with: vec![],
70 is_primary_indicator: true,
71 alternative_names: vec![],
72 },
73 TechnologyRule {
74 name: "Tide".to_string(),
75 category: TechnologyCategory::BackendFramework,
76 confidence: 0.95,
77 dependency_patterns: vec!["tide".to_string()],
78 requires: vec!["async-std".to_string()],
79 conflicts_with: vec![],
80 is_primary_indicator: true,
81 alternative_names: vec![],
82 },
83 TechnologyRule {
84 name: "Poem".to_string(),
85 category: TechnologyCategory::BackendFramework,
86 confidence: 0.95,
87 dependency_patterns: vec!["poem".to_string(), "poem-openapi".to_string()],
88 requires: vec![],
89 conflicts_with: vec![],
90 is_primary_indicator: true,
91 alternative_names: vec![],
92 },
93 TechnologyRule {
94 name: "Salvo".to_string(),
95 category: TechnologyCategory::BackendFramework,
96 confidence: 0.95,
97 dependency_patterns: vec!["salvo".to_string()],
98 requires: vec![],
99 conflicts_with: vec![],
100 is_primary_indicator: true,
101 alternative_names: vec![],
102 },
103 TechnologyRule {
104 name: "Gotham".to_string(),
105 category: TechnologyCategory::BackendFramework,
106 confidence: 0.95,
107 dependency_patterns: vec!["gotham".to_string()],
108 requires: vec![],
109 conflicts_with: vec![],
110 is_primary_indicator: true,
111 alternative_names: vec![],
112 },
113 TechnologyRule {
114 name: "Iron".to_string(),
115 category: TechnologyCategory::BackendFramework,
116 confidence: 0.95,
117 dependency_patterns: vec!["iron".to_string()],
118 requires: vec![],
119 conflicts_with: vec![],
120 is_primary_indicator: true,
121 alternative_names: vec![],
122 },
123 TechnologyRule {
124 name: "Nickel".to_string(),
125 category: TechnologyCategory::BackendFramework,
126 confidence: 0.95,
127 dependency_patterns: vec!["nickel".to_string()],
128 requires: vec![],
129 conflicts_with: vec![],
130 is_primary_indicator: true,
131 alternative_names: vec![],
132 },
133 TechnologyRule {
134 name: "Thruster".to_string(),
135 category: TechnologyCategory::BackendFramework,
136 confidence: 0.95,
137 dependency_patterns: vec!["thruster".to_string()],
138 requires: vec![],
139 conflicts_with: vec![],
140 is_primary_indicator: true,
141 alternative_names: vec![],
142 },
143 TechnologyRule {
144 name: "Rouille".to_string(),
145 category: TechnologyCategory::BackendFramework,
146 confidence: 0.95,
147 dependency_patterns: vec!["rouille".to_string()],
148 requires: vec![],
149 conflicts_with: vec![],
150 is_primary_indicator: true,
151 alternative_names: vec![],
152 },
153 TechnologyRule {
154 name: "Cot".to_string(),
155 category: TechnologyCategory::BackendFramework,
156 confidence: 0.95,
157 dependency_patterns: vec!["cot".to_string()],
158 requires: vec![],
159 conflicts_with: vec![],
160 is_primary_indicator: true,
161 alternative_names: vec![],
162 },
163 TechnologyRule {
164 name: "Tardis".to_string(),
165 category: TechnologyCategory::BackendFramework,
166 confidence: 0.95,
167 dependency_patterns: vec!["tardis".to_string()],
168 requires: vec![],
169 conflicts_with: vec![],
170 is_primary_indicator: true,
171 alternative_names: vec![],
172 },
173 TechnologyRule {
174 name: "Loco".to_string(),
175 category: TechnologyCategory::BackendFramework,
176 confidence: 0.95,
177 dependency_patterns: vec!["loco-rs".to_string()],
178 requires: vec![],
179 conflicts_with: vec![],
180 is_primary_indicator: true,
181 alternative_names: vec!["loco".to_string()],
182 },
183 TechnologyRule {
184 name: "Trillium".to_string(),
185 category: TechnologyCategory::BackendFramework,
186 confidence: 0.95,
187 dependency_patterns: vec!["trillium".to_string()],
188 requires: vec!["Tokio".to_string()],
189 conflicts_with: vec![],
190 is_primary_indicator: true,
191 alternative_names: vec![],
192 },
193
194 TechnologyRule {
196 name: "Tokio".to_string(),
197 category: TechnologyCategory::Runtime,
198 confidence: 0.90,
199 dependency_patterns: vec!["tokio".to_string()],
200 requires: vec![],
201 conflicts_with: vec!["async-std".to_string()],
202 is_primary_indicator: false,
203 alternative_names: vec![],
204 },
205 TechnologyRule {
206 name: "async-std".to_string(),
207 category: TechnologyCategory::Runtime,
208 confidence: 0.90,
209 dependency_patterns: vec!["async-std".to_string()],
210 requires: vec![],
211 conflicts_with: vec!["Tokio".to_string()],
212 is_primary_indicator: false,
213 alternative_names: vec![],
214 },
215 TechnologyRule {
216 name: "smol".to_string(),
217 category: TechnologyCategory::Runtime,
218 confidence: 0.90,
219 dependency_patterns: vec!["smol".to_string()],
220 requires: vec![],
221 conflicts_with: vec![],
222 is_primary_indicator: false,
223 alternative_names: vec![],
224 },
225
226 TechnologyRule {
228 name: "reqwest".to_string(),
229 category: TechnologyCategory::Library(LibraryType::Utility),
230 confidence: 0.90,
231 dependency_patterns: vec!["reqwest".to_string()],
232 requires: vec![],
233 conflicts_with: vec![],
234 is_primary_indicator: false,
235 alternative_names: vec![],
236 },
237 TechnologyRule {
238 name: "hyper".to_string(),
239 category: TechnologyCategory::Library(LibraryType::Utility),
240 confidence: 0.90,
241 dependency_patterns: vec!["hyper".to_string()],
242 requires: vec![],
243 conflicts_with: vec![],
244 is_primary_indicator: false,
245 alternative_names: vec![],
246 },
247 TechnologyRule {
248 name: "ureq".to_string(),
249 category: TechnologyCategory::Library(LibraryType::Utility),
250 confidence: 0.90,
251 dependency_patterns: vec!["ureq".to_string()],
252 requires: vec![],
253 conflicts_with: vec![],
254 is_primary_indicator: false,
255 alternative_names: vec![],
256 },
257
258 TechnologyRule {
260 name: "SeaORM".to_string(),
261 category: TechnologyCategory::Database,
262 confidence: 0.90,
263 dependency_patterns: vec!["sea-orm".to_string()],
264 requires: vec![],
265 conflicts_with: vec![],
266 is_primary_indicator: false,
267 alternative_names: vec!["sea_orm".to_string()],
268 },
269 TechnologyRule {
270 name: "Diesel".to_string(),
271 category: TechnologyCategory::Database,
272 confidence: 0.90,
273 dependency_patterns: vec!["diesel".to_string()],
274 requires: vec![],
275 conflicts_with: vec![],
276 is_primary_indicator: false,
277 alternative_names: vec![],
278 },
279 TechnologyRule {
280 name: "SQLx".to_string(),
281 category: TechnologyCategory::Database,
282 confidence: 0.90,
283 dependency_patterns: vec!["sqlx".to_string()],
284 requires: vec![],
285 conflicts_with: vec![],
286 is_primary_indicator: false,
287 alternative_names: vec![],
288 },
289 TechnologyRule {
290 name: "rusqlite".to_string(),
291 category: TechnologyCategory::Database,
292 confidence: 0.90,
293 dependency_patterns: vec!["rusqlite".to_string()],
294 requires: vec![],
295 conflicts_with: vec![],
296 is_primary_indicator: false,
297 alternative_names: vec![],
298 },
299 TechnologyRule {
300 name: "redis".to_string(),
301 category: TechnologyCategory::Database,
302 confidence: 0.90,
303 dependency_patterns: vec!["redis".to_string()],
304 requires: vec![],
305 conflicts_with: vec![],
306 is_primary_indicator: false,
307 alternative_names: vec![],
308 },
309 TechnologyRule {
310 name: "MongoDB".to_string(),
311 category: TechnologyCategory::Database,
312 confidence: 0.90,
313 dependency_patterns: vec!["mongodb".to_string()],
314 requires: vec![],
315 conflicts_with: vec![],
316 is_primary_indicator: false,
317 alternative_names: vec![],
318 },
319
320 TechnologyRule {
322 name: "anyhow".to_string(),
323 category: TechnologyCategory::Library(LibraryType::Utility),
324 confidence: 0.85,
325 dependency_patterns: vec!["anyhow".to_string()],
326 requires: vec![],
327 conflicts_with: vec![],
328 is_primary_indicator: false,
329 alternative_names: vec![],
330 },
331 TechnologyRule {
332 name: "thiserror".to_string(),
333 category: TechnologyCategory::Library(LibraryType::Utility),
334 confidence: 0.85,
335 dependency_patterns: vec!["thiserror".to_string()],
336 requires: vec![],
337 conflicts_with: vec![],
338 is_primary_indicator: false,
339 alternative_names: vec![],
340 },
341 TechnologyRule {
342 name: "eyre".to_string(),
343 category: TechnologyCategory::Library(LibraryType::Utility),
344 confidence: 0.85,
345 dependency_patterns: vec!["eyre".to_string()],
346 requires: vec![],
347 conflicts_with: vec![],
348 is_primary_indicator: false,
349 alternative_names: vec![],
350 },
351 TechnologyRule {
352 name: "color-eyre".to_string(),
353 category: TechnologyCategory::Library(LibraryType::Utility),
354 confidence: 0.85,
355 dependency_patterns: vec!["color-eyre".to_string()],
356 requires: vec![],
357 conflicts_with: vec![],
358 is_primary_indicator: false,
359 alternative_names: vec![],
360 },
361
362 TechnologyRule {
364 name: "Serde".to_string(),
365 category: TechnologyCategory::Library(LibraryType::Utility),
366 confidence: 0.85,
367 dependency_patterns: vec!["serde".to_string()],
368 requires: vec![],
369 conflicts_with: vec![],
370 is_primary_indicator: false,
371 alternative_names: vec![],
372 },
373 TechnologyRule {
374 name: "serde_json".to_string(),
375 category: TechnologyCategory::Library(LibraryType::Utility),
376 confidence: 0.85,
377 dependency_patterns: vec!["serde_json".to_string()],
378 requires: vec!["Serde".to_string()],
379 conflicts_with: vec![],
380 is_primary_indicator: false,
381 alternative_names: vec![],
382 },
383 TechnologyRule {
384 name: "bincode".to_string(),
385 category: TechnologyCategory::Library(LibraryType::Utility),
386 confidence: 0.85,
387 dependency_patterns: vec!["bincode".to_string()],
388 requires: vec![],
389 conflicts_with: vec![],
390 is_primary_indicator: false,
391 alternative_names: vec![],
392 },
393 TechnologyRule {
394 name: "toml".to_string(),
395 category: TechnologyCategory::Library(LibraryType::Utility),
396 confidence: 0.85,
397 dependency_patterns: vec!["toml".to_string()],
398 requires: vec![],
399 conflicts_with: vec![],
400 is_primary_indicator: false,
401 alternative_names: vec![],
402 },
403 TechnologyRule {
404 name: "ron".to_string(),
405 category: TechnologyCategory::Library(LibraryType::Utility),
406 confidence: 0.85,
407 dependency_patterns: vec!["ron".to_string()],
408 requires: vec![],
409 conflicts_with: vec![],
410 is_primary_indicator: false,
411 alternative_names: vec![],
412 },
413
414 TechnologyRule {
416 name: "clap".to_string(),
417 category: TechnologyCategory::Library(LibraryType::CLI),
418 confidence: 0.85,
419 dependency_patterns: vec!["clap".to_string()],
420 requires: vec![],
421 conflicts_with: vec![],
422 is_primary_indicator: true,
423 alternative_names: vec![],
424 },
425 TechnologyRule {
426 name: "structopt".to_string(),
427 category: TechnologyCategory::Library(LibraryType::CLI),
428 confidence: 0.85,
429 dependency_patterns: vec!["structopt".to_string()],
430 requires: vec![],
431 conflicts_with: vec![],
432 is_primary_indicator: true,
433 alternative_names: vec![],
434 },
435 TechnologyRule {
436 name: "argh".to_string(),
437 category: TechnologyCategory::Library(LibraryType::CLI),
438 confidence: 0.85,
439 dependency_patterns: vec!["argh".to_string()],
440 requires: vec![],
441 conflicts_with: vec![],
442 is_primary_indicator: true,
443 alternative_names: vec![],
444 },
445
446 TechnologyRule {
448 name: "tracing".to_string(),
449 category: TechnologyCategory::Library(LibraryType::Utility),
450 confidence: 0.85,
451 dependency_patterns: vec!["tracing".to_string()],
452 requires: vec![],
453 conflicts_with: vec![],
454 is_primary_indicator: false,
455 alternative_names: vec![],
456 },
457 TechnologyRule {
458 name: "log".to_string(),
459 category: TechnologyCategory::Library(LibraryType::Utility),
460 confidence: 0.85,
461 dependency_patterns: vec!["log".to_string()],
462 requires: vec![],
463 conflicts_with: vec![],
464 is_primary_indicator: false,
465 alternative_names: vec![],
466 },
467 TechnologyRule {
468 name: "env_logger".to_string(),
469 category: TechnologyCategory::Library(LibraryType::Utility),
470 confidence: 0.85,
471 dependency_patterns: vec!["env_logger".to_string()],
472 requires: vec![],
473 conflicts_with: vec![],
474 is_primary_indicator: false,
475 alternative_names: vec![],
476 },
477
478 TechnologyRule {
480 name: "rstest".to_string(),
481 category: TechnologyCategory::Testing,
482 confidence: 0.85,
483 dependency_patterns: vec!["rstest".to_string()],
484 requires: vec![],
485 conflicts_with: vec![],
486 is_primary_indicator: false,
487 alternative_names: vec![],
488 },
489 TechnologyRule {
490 name: "proptest".to_string(),
491 category: TechnologyCategory::Testing,
492 confidence: 0.85,
493 dependency_patterns: vec!["proptest".to_string()],
494 requires: vec![],
495 conflicts_with: vec![],
496 is_primary_indicator: false,
497 alternative_names: vec![],
498 },
499 TechnologyRule {
500 name: "quickcheck".to_string(),
501 category: TechnologyCategory::Testing,
502 confidence: 0.85,
503 dependency_patterns: vec!["quickcheck".to_string()],
504 requires: vec![],
505 conflicts_with: vec![],
506 is_primary_indicator: false,
507 alternative_names: vec![],
508 },
509 TechnologyRule {
510 name: "Criterion".to_string(),
511 category: TechnologyCategory::Testing,
512 confidence: 0.85,
513 dependency_patterns: vec!["criterion".to_string()],
514 requires: vec![],
515 conflicts_with: vec![],
516 is_primary_indicator: false,
517 alternative_names: vec![],
518 },
519
520 TechnologyRule {
522 name: "ring".to_string(),
523 category: TechnologyCategory::Library(LibraryType::Utility),
524 confidence: 0.85,
525 dependency_patterns: vec!["ring".to_string()],
526 requires: vec![],
527 conflicts_with: vec![],
528 is_primary_indicator: false,
529 alternative_names: vec![],
530 },
531 TechnologyRule {
532 name: "rustls".to_string(),
533 category: TechnologyCategory::Library(LibraryType::Utility),
534 confidence: 0.85,
535 dependency_patterns: vec!["rustls".to_string()],
536 requires: vec![],
537 conflicts_with: vec![],
538 is_primary_indicator: false,
539 alternative_names: vec![],
540 },
541 TechnologyRule {
542 name: "sha2".to_string(),
543 category: TechnologyCategory::Library(LibraryType::Utility),
544 confidence: 0.85,
545 dependency_patterns: vec!["sha2".to_string()],
546 requires: vec![],
547 conflicts_with: vec![],
548 is_primary_indicator: false,
549 alternative_names: vec![],
550 },
551
552 TechnologyRule {
554 name: "chrono".to_string(),
555 category: TechnologyCategory::Library(LibraryType::Utility),
556 confidence: 0.85,
557 dependency_patterns: vec!["chrono".to_string()],
558 requires: vec![],
559 conflicts_with: vec![],
560 is_primary_indicator: false,
561 alternative_names: vec![],
562 },
563 TechnologyRule {
564 name: "time".to_string(),
565 category: TechnologyCategory::Library(LibraryType::Utility),
566 confidence: 0.85,
567 dependency_patterns: vec!["time".to_string()],
568 requires: vec![],
569 conflicts_with: vec![],
570 is_primary_indicator: false,
571 alternative_names: vec![],
572 },
573
574 TechnologyRule {
576 name: "rayon".to_string(),
577 category: TechnologyCategory::Library(LibraryType::Utility),
578 confidence: 0.85,
579 dependency_patterns: vec!["rayon".to_string()],
580 requires: vec![],
581 conflicts_with: vec![],
582 is_primary_indicator: false,
583 alternative_names: vec![],
584 },
585 TechnologyRule {
586 name: "crossbeam".to_string(),
587 category: TechnologyCategory::Library(LibraryType::Utility),
588 confidence: 0.85,
589 dependency_patterns: vec!["crossbeam".to_string()],
590 requires: vec![],
591 conflicts_with: vec![],
592 is_primary_indicator: false,
593 alternative_names: vec![],
594 },
595 TechnologyRule {
596 name: "dashmap".to_string(),
597 category: TechnologyCategory::Library(LibraryType::Utility),
598 confidence: 0.85,
599 dependency_patterns: vec!["dashmap".to_string()],
600 requires: vec![],
601 conflicts_with: vec![],
602 is_primary_indicator: false,
603 alternative_names: vec![],
604 },
605
606 TechnologyRule {
608 name: "Leptos".to_string(),
609 category: TechnologyCategory::FrontendFramework,
610 confidence: 0.95,
611 dependency_patterns: vec!["leptos".to_string()],
612 requires: vec![],
613 conflicts_with: vec!["Yew".to_string(), "Dioxus".to_string()],
614 is_primary_indicator: true,
615 alternative_names: vec![],
616 },
617 TechnologyRule {
618 name: "Yew".to_string(),
619 category: TechnologyCategory::FrontendFramework,
620 confidence: 0.95,
621 dependency_patterns: vec!["yew".to_string()],
622 requires: vec![],
623 conflicts_with: vec!["Leptos".to_string(), "Dioxus".to_string()],
624 is_primary_indicator: true,
625 alternative_names: vec![],
626 },
627 TechnologyRule {
628 name: "Dioxus".to_string(),
629 category: TechnologyCategory::FrontendFramework,
630 confidence: 0.95,
631 dependency_patterns: vec!["dioxus".to_string()],
632 requires: vec![],
633 conflicts_with: vec!["Leptos".to_string(), "Yew".to_string()],
634 is_primary_indicator: true,
635 alternative_names: vec![],
636 },
637 TechnologyRule {
638 name: "Tauri".to_string(),
639 category: TechnologyCategory::Library(LibraryType::UI),
640 confidence: 0.95,
641 dependency_patterns: vec!["tauri".to_string()],
642 requires: vec![],
643 conflicts_with: vec![],
644 is_primary_indicator: true,
645 alternative_names: vec![],
646 },
647 TechnologyRule {
648 name: "egui".to_string(),
649 category: TechnologyCategory::Library(LibraryType::UI),
650 confidence: 0.95,
651 dependency_patterns: vec!["egui".to_string()],
652 requires: vec![],
653 conflicts_with: vec![],
654 is_primary_indicator: false,
655 alternative_names: vec![],
656 },
657 TechnologyRule {
658 name: "iced".to_string(),
659 category: TechnologyCategory::Library(LibraryType::UI),
660 confidence: 0.95,
661 dependency_patterns: vec!["iced".to_string()],
662 requires: vec![],
663 conflicts_with: vec![],
664 is_primary_indicator: false,
665 alternative_names: vec![],
666 },
667
668 TechnologyRule {
670 name: "wasm-bindgen".to_string(),
671 category: TechnologyCategory::Library(LibraryType::Utility),
672 confidence: 0.85,
673 dependency_patterns: vec!["wasm-bindgen".to_string()],
674 requires: vec![],
675 conflicts_with: vec![],
676 is_primary_indicator: false,
677 alternative_names: vec![],
678 },
679 TechnologyRule {
680 name: "js-sys".to_string(),
681 category: TechnologyCategory::Library(LibraryType::Utility),
682 confidence: 0.85,
683 dependency_patterns: vec!["js-sys".to_string()],
684 requires: vec![],
685 conflicts_with: vec![],
686 is_primary_indicator: false,
687 alternative_names: vec![],
688 },
689 TechnologyRule {
690 name: "web-sys".to_string(),
691 category: TechnologyCategory::Library(LibraryType::Utility),
692 confidence: 0.85,
693 dependency_patterns: vec!["web-sys".to_string()],
694 requires: vec![],
695 conflicts_with: vec![],
696 is_primary_indicator: false,
697 alternative_names: vec![],
698 },
699
700 TechnologyRule {
702 name: "Bevy".to_string(),
703 category: TechnologyCategory::Library(LibraryType::Utility),
704 confidence: 0.95,
705 dependency_patterns: vec!["bevy".to_string()],
706 requires: vec![],
707 conflicts_with: vec![],
708 is_primary_indicator: true,
709 alternative_names: vec![],
710 },
711 TechnologyRule {
712 name: "ggez".to_string(),
713 category: TechnologyCategory::Library(LibraryType::Utility),
714 confidence: 0.95,
715 dependency_patterns: vec!["ggez".to_string()],
716 requires: vec![],
717 conflicts_with: vec![],
718 is_primary_indicator: true,
719 alternative_names: vec![],
720 },
721
722 TechnologyRule {
724 name: "ndarray".to_string(),
725 category: TechnologyCategory::Library(LibraryType::Utility),
726 confidence: 0.85,
727 dependency_patterns: vec!["ndarray".to_string()],
728 requires: vec![],
729 conflicts_with: vec![],
730 is_primary_indicator: false,
731 alternative_names: vec![],
732 },
733 TechnologyRule {
734 name: "nalgebra".to_string(),
735 category: TechnologyCategory::Library(LibraryType::Utility),
736 confidence: 0.85,
737 dependency_patterns: vec!["nalgebra".to_string()],
738 requires: vec![],
739 conflicts_with: vec![],
740 is_primary_indicator: false,
741 alternative_names: vec![],
742 },
743
744 TechnologyRule {
746 name: "image".to_string(),
747 category: TechnologyCategory::Library(LibraryType::Utility),
748 confidence: 0.85,
749 dependency_patterns: vec!["image".to_string()],
750 requires: vec![],
751 conflicts_with: vec![],
752 is_primary_indicator: false,
753 alternative_names: vec![],
754 },
755
756 TechnologyRule {
758 name: "handlebars".to_string(),
759 category: TechnologyCategory::Library(LibraryType::Utility),
760 confidence: 0.85,
761 dependency_patterns: vec!["handlebars".to_string()],
762 requires: vec![],
763 conflicts_with: vec![],
764 is_primary_indicator: false,
765 alternative_names: vec![],
766 },
767 TechnologyRule {
768 name: "tera".to_string(),
769 category: TechnologyCategory::Library(LibraryType::Utility),
770 confidence: 0.85,
771 dependency_patterns: vec!["tera".to_string()],
772 requires: vec![],
773 conflicts_with: vec![],
774 is_primary_indicator: false,
775 alternative_names: vec![],
776 },
777 TechnologyRule {
778 name: "askama".to_string(),
779 category: TechnologyCategory::Library(LibraryType::Utility),
780 confidence: 0.85,
781 dependency_patterns: vec!["askama".to_string()],
782 requires: vec![],
783 conflicts_with: vec![],
784 is_primary_indicator: false,
785 alternative_names: vec![],
786 },
787
788 TechnologyRule {
790 name: "nom".to_string(),
791 category: TechnologyCategory::Library(LibraryType::Utility),
792 confidence: 0.85,
793 dependency_patterns: vec!["nom".to_string()],
794 requires: vec![],
795 conflicts_with: vec![],
796 is_primary_indicator: false,
797 alternative_names: vec![],
798 },
799 TechnologyRule {
800 name: "pest".to_string(),
801 category: TechnologyCategory::Library(LibraryType::Utility),
802 confidence: 0.85,
803 dependency_patterns: vec!["pest".to_string()],
804 requires: vec![],
805 conflicts_with: vec![],
806 is_primary_indicator: false,
807 alternative_names: vec![],
808 },
809
810 TechnologyRule {
812 name: "flate2".to_string(),
813 category: TechnologyCategory::Library(LibraryType::Utility),
814 confidence: 0.85,
815 dependency_patterns: vec!["flate2".to_string()],
816 requires: vec![],
817 conflicts_with: vec![],
818 is_primary_indicator: false,
819 alternative_names: vec![],
820 },
821 TechnologyRule {
822 name: "zstd".to_string(),
823 category: TechnologyCategory::Library(LibraryType::Utility),
824 confidence: 0.85,
825 dependency_patterns: vec!["zstd".to_string()],
826 requires: vec![],
827 conflicts_with: vec![],
828 is_primary_indicator: false,
829 alternative_names: vec![],
830 },
831 ]
832}