use tracing::instrument;
use crate::error::{Error, ErrorKind, Result};
use crate::types::ExecuteAnonymousResult;
impl super::ToolingClient {
#[instrument(skip(self))]
pub async fn execute_anonymous(&self, apex_code: &str) -> Result<ExecuteAnonymousResult> {
let encoded = urlencoding::encode(apex_code);
let url = format!(
"{}/services/data/v{}/tooling/executeAnonymous/?anonymousBody={}",
self.client.instance_url(),
self.client.api_version(),
encoded
);
let result: ExecuteAnonymousResult = self.client.get_json(&url).await?;
if !result.compiled {
if let Some(ref problem) = result.compile_problem {
return Err(Error::new(ErrorKind::ApexCompilation(problem.clone())));
}
}
if !result.success {
if let Some(ref message) = result.exception_message {
return Err(Error::new(ErrorKind::ApexExecution(message.clone())));
}
}
Ok(result)
}
}