use endbasic_core::*;
use std::borrow::Cow;
use std::rc::Rc;
pub(super) struct IncrementRequiredIntCommand {
metadata: Rc<CallableMetadata>,
}
impl IncrementRequiredIntCommand {
pub(super) fn new() -> Rc<Self> {
Rc::from(Self {
metadata: CallableMetadataBuilder::new("INCREMENT_REQUIRED_INT")
.with_syntax(&[(
&[SingularArgSyntax::RequiredRef(
RequiredRefSyntax {
name: Cow::Borrowed("arg"),
require_array: false,
define_undefined: false,
},
ArgSepSyntax::End,
)],
None,
)])
.test_build(),
})
}
}
impl Callable for IncrementRequiredIntCommand {
fn metadata(&self) -> Rc<CallableMetadata> {
self.metadata.clone()
}
fn exec(&self, mut scope: Scope<'_>) -> CallResult<()> {
let mut typed_ptr = scope.get_mut_ref(0);
if typed_ptr.vtype != ExprType::Integer {
return Err(CallError::Argument("Invalid type in argument".to_owned()));
}
let mut i = typed_ptr.deref_integer();
i += 1;
typed_ptr.set_integer(i);
Ok(())
}
}