(&self, Parameters(InvokeDscResourceRequest { operation, resource_type, properties_json }): Parameters<InvokeDscResourceRequest>)
| 69 | ) |
| 70 | )] |
| 71 | pub async fn invoke_dsc_resource(&self, Parameters(InvokeDscResourceRequest { operation, resource_type, properties_json }): Parameters<InvokeDscResourceRequest>) -> Result<Json<InvokeDscResourceResponse>, McpError> { |
| 72 | let result = task::spawn_blocking(move || { |
| 73 | let mut dsc = DscManager::new(); |
| 74 | let Some(resource) = dsc.find_resource(&DiscoveryFilter::new(&resource_type, None, None)).unwrap_or(None) else { |
| 75 | return Err(McpError::invalid_request(t!("mcp.invoke_dsc_resource.resourceNotFound", resource = resource_type), None)); |
| 76 | }; |
| 77 | match operation { |
| 78 | DscOperation::Get => { |
| 79 | let result = match resource.get(&properties_json) { |
| 80 | Ok(res) => res, |
| 81 | Err(e) => return Err(McpError::internal_error(e.to_string(), None)), |
| 82 | }; |
| 83 | Ok(ResourceOperationResult::GetResult(result)) |
| 84 | }, |
| 85 | DscOperation::Set => { |
| 86 | let result = match resource.set(&properties_json, false, &ExecutionKind::Actual) { |
| 87 | Ok(res) => res, |
| 88 | Err(e) => return Err(McpError::internal_error(e.to_string(), None)), |
| 89 | }; |
| 90 | Ok(ResourceOperationResult::SetResult(result)) |
| 91 | }, |
| 92 | DscOperation::Test => { |
| 93 | let result = match resource.test(&properties_json) { |
| 94 | Ok(res) => res, |
| 95 | Err(e) => return Err(McpError::internal_error(e.to_string(), None)), |
| 96 | }; |
| 97 | Ok(ResourceOperationResult::TestResult(result)) |
| 98 | }, |
| 99 | DscOperation::Delete => { |
| 100 | match resource.delete(&properties_json, &ExecutionKind::Actual) { |
| 101 | Ok(_) => Ok(ResourceOperationResult::DeleteResult { success: true }), |
| 102 | Err(e) => Err(McpError::internal_error(e.to_string(), None)), |
| 103 | } |
| 104 | }, |
| 105 | DscOperation::Export => { |
| 106 | let result = match resource.export(&properties_json) { |
| 107 | Ok(res) => res, |
| 108 | Err(e) => return Err(McpError::internal_error(e.to_string(), None)), |
| 109 | }; |
| 110 | Ok(ResourceOperationResult::ExportResult(result)) |
| 111 | } |
| 112 | } |
| 113 | }).await.map_err(|e| McpError::internal_error(e.to_string(), None))??; |
| 114 | |
| 115 | Ok(Json(InvokeDscResourceResponse { result })) |
| 116 | } |
| 117 | } |
nothing calls this directly
no test coverage detected