(
&self,
request: Request<ResourceReference>,
)
| 160 | } |
| 161 | |
| 162 | async fn get( |
| 163 | &self, |
| 164 | request: Request<ResourceReference>, |
| 165 | ) -> Result<Response<LocalExtensibilityOperationResponse>, Status> { |
| 166 | let reference = request.into_inner(); |
| 167 | let resource_type = reference.r#type.clone(); |
| 168 | let version = reference.api_version.clone(); |
| 169 | let identifiers = reference.identifiers.clone(); |
| 170 | |
| 171 | tracing::debug!( |
| 172 | "{}", |
| 173 | t!( |
| 174 | "bicep.functionCalled", |
| 175 | function = "Get", |
| 176 | resourceType = resource_type, |
| 177 | version = format!("{version:?}"), |
| 178 | properties = identifiers |
| 179 | ) |
| 180 | ); |
| 181 | |
| 182 | let type_name = FullyQualifiedTypeName::parse(&resource_type) |
| 183 | .map_err(|e| Status::invalid_argument(e.to_string()))?; |
| 184 | let version_req = version.as_deref() |
| 185 | .map(|v| ResourceVersionReq::parse(&format!("={v}"))) |
| 186 | .transpose() |
| 187 | .map_err(|e| Status::invalid_argument(e.to_string()))?; |
| 188 | |
| 189 | let mut dsc = DscManager::new(); |
| 190 | let Some(resource) = dsc |
| 191 | .find_resource(&DiscoveryFilter::new( |
| 192 | &type_name, |
| 193 | version_req, |
| 194 | None, |
| 195 | )) |
| 196 | .unwrap_or(None) |
| 197 | else { |
| 198 | return Err(Status::not_found( |
| 199 | t!("dscerror.resourceNotFound").to_string(), |
| 200 | )); |
| 201 | }; |
| 202 | |
| 203 | let GetResult::Resource(result) = resource |
| 204 | .get(&identifiers) |
| 205 | .map_err(|e| Status::aborted(e.to_string()))? |
| 206 | else { |
| 207 | return Err(Status::unimplemented( |
| 208 | t!("dscerror.notSupported").to_string(), |
| 209 | )); |
| 210 | }; |
| 211 | |
| 212 | Ok(Response::new(LocalExtensibilityOperationResponse { |
| 213 | resource: Some(proto::Resource { |
| 214 | r#type: resource_type, |
| 215 | api_version: version, |
| 216 | identifiers, |
| 217 | properties: result.actual_state.to_string(), |
| 218 | status: None, |
| 219 | }), |
no test coverage detected