use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct KeywordInfo {
pub keyword: String,
pub description: String,
pub category: KeywordCategory,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub enum KeywordCategory {
Declaration, ControlFlow, Query, Module, Type, Literal, Operator, Temporal, Other,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct FunctionInfo {
pub name: String,
pub signature: String,
pub description: String,
pub category: FunctionCategory,
pub parameters: Vec<ParameterInfo>,
pub return_type: String,
pub example: Option<String>,
#[serde(default = "default_true")]
pub implemented: bool,
#[serde(default)]
pub comptime_only: bool,
}
fn default_true() -> bool {
true
}
impl Default for FunctionInfo {
fn default() -> Self {
Self {
name: String::new(),
signature: String::new(),
description: String::new(),
category: FunctionCategory::Utility,
parameters: Vec::new(),
return_type: String::new(),
example: None,
implemented: true,
comptime_only: false,
}
}
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub enum FunctionCategory {
Simulation, Math, Array, Column, Statistics, Data, Utility, }
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ParameterInfo {
pub name: String,
pub param_type: String,
pub optional: bool,
pub description: String,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub constraints: Option<ParameterConstraints>,
}
#[derive(Debug, Clone, Serialize, Deserialize, Default)]
pub struct ParameterConstraints {
#[serde(default)]
pub is_provider_name: bool,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub requires_annotation: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub allowed_values: Option<Vec<String>>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub object_properties: Option<Vec<PropertyConstraint>>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct PropertyConstraint {
pub name: String,
pub value_type: String,
pub required: bool,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub constraint: Option<ParameterConstraints>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct TypeInfo {
pub name: String,
pub description: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct PropertyInfo {
pub name: String,
pub property_type: String,
pub description: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct MethodInfo {
pub name: String,
pub signature: String,
pub description: String,
pub return_type: String,
#[serde(default = "default_true")]
pub implemented: bool,
}