List operation for getting available resources based on the filters. # Arguments `kind` - The kind of discovery (e.g., Resource). `type_name_filter` - The filter for the resource type name. `adapter_name_filter` - The filter for the adapter name. # Returns A vector of `DscResource` instances.
(
&mut self,
kind: &DiscoveryKind,
type_name_filter: &TypeNameFilter,
adapter_name_filter: Option<&TypeNameFilter>,
progress_format: ProgressFormat
)
| 58 | /// |
| 59 | /// A vector of `DscResource` instances. |
| 60 | pub fn list_available( |
| 61 | &mut self, |
| 62 | kind: &DiscoveryKind, |
| 63 | type_name_filter: &TypeNameFilter, |
| 64 | adapter_name_filter: Option<&TypeNameFilter>, |
| 65 | progress_format: ProgressFormat |
| 66 | ) -> Vec<ImportedManifest> { |
| 67 | let discovery_types: Vec<Box<dyn ResourceDiscovery>> = vec![ |
| 68 | Box::new(command_discovery::CommandDiscovery::new(progress_format)), |
| 69 | ]; |
| 70 | |
| 71 | let mut resources: BTreeMap<String, ImportedManifest> = BTreeMap::new(); |
| 72 | |
| 73 | for mut discovery_type in discovery_types { |
| 74 | |
| 75 | let discovered_resources = match discovery_type.list_available(kind, type_name_filter, adapter_name_filter) { |
| 76 | Ok(value) => value, |
| 77 | Err(err) => { |
| 78 | error!("{err}"); |
| 79 | continue; |
| 80 | } |
| 81 | }; |
| 82 | |
| 83 | for (_resource_name, found_resources) in discovered_resources { |
| 84 | for manifest in found_resources { |
| 85 | let key = match &manifest { |
| 86 | ImportedManifest::Resource(resource) => { |
| 87 | format!("{}@{}", resource.type_name.to_lowercase(), resource.version) |
| 88 | }, |
| 89 | ImportedManifest::Extension(extension) => { |
| 90 | format!("{}@{}", extension.type_name.to_lowercase(), extension.version) |
| 91 | } |
| 92 | }; |
| 93 | resources.insert(key, manifest); |
| 94 | } |
| 95 | }; |
| 96 | |
| 97 | if let Ok(extensions) = discovery_type.get_extensions() { |
| 98 | self.extensions.extend(extensions); |
| 99 | } |
| 100 | } |
| 101 | |
| 102 | resources.into_values().collect::<Vec<ImportedManifest>>() |
| 103 | } |
| 104 | |
| 105 | pub fn get_extensions(&mut self, capability: &Capability) -> Vec<DscExtension> { |
| 106 | if self.extensions.is_empty() { |
no test coverage detected