use arora_types::value::{Type, Value};
use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct MethodParam {
pub name: String,
pub param_type: Type,
#[serde(default)]
pub required: bool,
#[serde(skip_serializing_if = "Option::is_none")]
pub default_value: Option<Value>,
#[serde(skip_serializing_if = "Option::is_none")]
pub description: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct MethodInfo {
pub path: String,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub params: Vec<MethodParam>,
#[serde(skip_serializing_if = "Option::is_none")]
pub return_type: Option<Type>,
#[serde(skip_serializing_if = "Option::is_none")]
pub description: Option<String>,
}
#[derive(Debug, Clone)]
pub struct InvokeResult {
pub success: bool,
pub value: Option<Value>,
pub message: Option<String>,
}
impl InvokeResult {
pub fn ok() -> Self {
Self {
success: true,
value: None,
message: None,
}
}
pub fn ok_with_value(value: Value) -> Self {
Self {
success: true,
value: Some(value),
message: None,
}
}
pub fn err(message: impl Into<String>) -> Self {
Self {
success: false,
value: None,
message: Some(message.into()),
}
}
}