use super::super::super::ast::CSharpType;
use super::async_call::CSharpAsyncCallPlan;
use super::return_kind::{CSharpReturnKind, native_return_type};
pub trait CSharpCallablePlan {
fn async_call(&self) -> Option<&CSharpAsyncCallPlan>;
fn return_type(&self) -> &CSharpType;
fn return_kind(&self) -> &CSharpReturnKind;
fn is_async(&self) -> bool {
self.async_call().is_some()
}
fn returns_task_value(&self) -> bool {
!self.return_type().is_void()
}
fn task_return_type(&self) -> String {
if self.returns_task_value() {
format!(
"global::System.Threading.Tasks.Task<{}>",
self.return_type()
)
} else {
"global::System.Threading.Tasks.Task".to_string()
}
}
fn native_return_type(&self) -> String {
native_return_type(self.return_type(), self.return_kind())
}
}