1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
/// Template cache strategy for embedded template resources.
///
/// Caches template resources that are embedded in the binary. Since templates
/// are immutable, validation always returns true for better performance.
///
/// # Cache Characteristics
///
/// - **TTL**: 10 minutes
/// - **Max Size**: 50 entries
/// - **Key**: Template URI prefixed with "template:"
/// - **Validation**: Always valid (templates don't change)
///
/// # Examples
///
/// ```rust,no_run
/// use pmat::services::cache::TemplateCacheStrategy;
/// use pmat::services::cache::CacheStrategy;
/// use pmat::models::template::TemplateResource;
///
/// let strategy = TemplateCacheStrategy;
/// let template_uri = "template://makefile/rust.mk".to_string();
///
/// // Generate cache key
/// let key = strategy.cache_key(&template_uri);
/// assert_eq!(key, "template:template://makefile/rust.mk");
///
/// // Create a dummy template resource
/// let template = TemplateResource {
/// uri: template_uri.clone(),
/// name: "test".to_string(),
/// description: "test description".to_string(),
/// toolchain: pmat::models::template::Toolchain::RustCli { cargo_features: vec![] },
/// category: pmat::models::template::TemplateCategory::Makefile,
/// parameters: vec![],
/// s3_object_key: "test".to_string(),
/// content_hash: "test".to_string(),
/// semantic_version: semver::Version::parse("1.0.0").expect("valid semver"),
/// dependency_graph: vec![],
/// };
///
/// // Templates are always valid (embedded, immutable)
/// assert!(strategy.validate(&template_uri, &template));
///
/// // TTL should be 10 minutes
/// assert_eq!(strategy.ttl().expect("has ttl").as_secs(), 600);
/// assert_eq!(strategy.max_size(), 50);
/// ```