fn after_hook()

in src/plugin/plugin_memcached.rs [308:341]


fn after_hook(
    _: Option<i64>, span: Box<dyn Any>, execute_data: &mut ExecuteData, return_value: &mut ZVal,
) -> crate::Result<()> {
    let mut span = span.downcast::<Span>().expect("Downcast to Span failed");

    if let Some(b) = return_value.as_bool() {
        if !b {
            span.span_object_mut().is_error = true;

            let this = get_this_mut(execute_data)?;
            let code = this.call(&"getResultCode".to_ascii_lowercase(), [])?;
            let code = code.as_long().context("ResultCode isn't int")?;
            debug!(code, "get memcached result code");

            if code != 0 {
                let message = this.call(&"getResultMessage".to_ascii_lowercase(), [])?;
                let message = message
                    .as_z_str()
                    .context("ResultMessage isn't string")?
                    .to_str()?;
                debug!(message, "get memcached result message");

                span.add_log([
                    ("ResultCode", code.to_string()),
                    ("ResultMessage", message.to_owned()),
                ]);
            }
        }
    }

    log_exception(&mut *span);

    Ok(())
}