busbar_sf_tooling/client/
execute.rs1use tracing::instrument;
2
3use crate::error::{Error, ErrorKind, Result};
4use crate::types::ExecuteAnonymousResult;
5
6impl super::ToolingClient {
7 #[instrument(skip(self))]
20 pub async fn execute_anonymous(&self, apex_code: &str) -> Result<ExecuteAnonymousResult> {
21 let encoded = urlencoding::encode(apex_code);
22 let url = format!(
23 "{}/services/data/v{}/tooling/executeAnonymous/?anonymousBody={}",
24 self.client.instance_url(),
25 self.client.api_version(),
26 encoded
27 );
28
29 let result: ExecuteAnonymousResult = self.client.get_json(&url).await?;
30
31 if !result.compiled {
33 if let Some(ref problem) = result.compile_problem {
34 return Err(Error::new(ErrorKind::ApexCompilation(problem.clone())));
35 }
36 }
37
38 if !result.success {
39 if let Some(ref message) = result.exception_message {
40 return Err(Error::new(ErrorKind::ApexExecution(message.clone())));
41 }
42 }
43
44 Ok(result)
45 }
46}