use crate::rpc::ActorId;
use carla_sys::carla_rust::client::FfiCommandResponse;
#[derive(Debug, Clone)]
pub struct CommandResponse {
error: Option<String>,
actor_id: ActorId,
}
impl CommandResponse {
pub(crate) fn success(actor_id: ActorId) -> Self {
Self {
error: None,
actor_id,
}
}
pub(crate) fn from_error(message: String, actor_id: ActorId) -> Self {
Self {
error: Some(message),
actor_id,
}
}
pub(crate) fn from_ffi(ffi_resp: &FfiCommandResponse) -> Self {
use carla_sys::carla_rust::client::FfiCommandResponse as FfiResp;
if FfiResp::HasError(ffi_resp) {
Self::from_error(
FfiResp::GetErrorMessage(ffi_resp).to_string(),
FfiResp::GetActorId(ffi_resp),
)
} else {
Self::success(FfiResp::GetActorId(ffi_resp))
}
}
pub fn is_success(&self) -> bool {
self.error.is_none()
}
pub fn has_error(&self) -> bool {
self.error.is_some()
}
pub fn error(&self) -> Option<&str> {
self.error.as_deref()
}
pub fn actor_id(&self) -> Option<ActorId> {
if self.actor_id == 0 {
None
} else {
Some(self.actor_id)
}
}
}