grass/dev/strategy/api/
local.rs

1use crate::dev::strategy::{
2    alias::{LocalAliasStrategy, SupportsAlias},
3    discovery::LocalDiscoveryStrategy,
4    git::LocalGitStrategy,
5    path::LocalPathStrategy,
6};
7
8use super::{SupportsDiscovery, SupportsGit, SupportsPath};
9
10pub struct LocalApiStrategy<'a> {
11    alias_strategy: &'a LocalAliasStrategy<'a>,
12    discovery_strategy: &'a LocalDiscoveryStrategy<'a, LocalPathStrategy<'a>>,
13    git_strategy: &'a LocalGitStrategy<'a, LocalPathStrategy<'a>>,
14    path_strategy: &'a LocalPathStrategy<'a>,
15}
16
17impl<'a> LocalApiStrategy<'a> {
18    pub fn new(
19        api_strategy: &'a LocalAliasStrategy<'a>,
20        discovery_strategy: &'a LocalDiscoveryStrategy<'a, LocalPathStrategy<'a>>,
21        git_strategy: &'a LocalGitStrategy<'a, LocalPathStrategy<'a>>,
22        path_strategy: &'a LocalPathStrategy<'a>,
23    ) -> Self {
24        Self {
25            alias_strategy: api_strategy,
26            discovery_strategy,
27            git_strategy,
28            path_strategy,
29        }
30    }
31}
32
33impl<'a> SupportsDiscovery for LocalApiStrategy<'a> {
34    type Strategy = LocalDiscoveryStrategy<'a, LocalPathStrategy<'a>>;
35
36    fn get_discovery_strategy(&self) -> &Self::Strategy {
37        self.discovery_strategy
38    }
39}
40
41impl<'a> SupportsGit for LocalApiStrategy<'a> {
42    type Strategy = LocalGitStrategy<'a, LocalPathStrategy<'a>>;
43
44    fn get_git_strategy(&self) -> &Self::Strategy {
45        self.git_strategy
46    }
47}
48
49impl<'a> SupportsPath for LocalApiStrategy<'a> {
50    type Strategy = LocalPathStrategy<'a>;
51
52    fn get_path_strategy(&self) -> &Self::Strategy {
53        self.path_strategy
54    }
55}
56
57impl<'a> SupportsAlias for LocalApiStrategy<'a> {
58    type Strategy = LocalAliasStrategy<'a>;
59
60    fn get_alias_strategy(&self) -> &Self::Strategy {
61        self.alias_strategy
62    }
63}