openpine_vm/script_info/
mod.rs

1mod alert_condition;
2mod input;
3mod script_type;
4
5use std::collections::BTreeMap;
6
7pub use alert_condition::*;
8pub use input::*;
9pub use script_type::*;
10use serde::{Deserialize, Serialize};
11
12use crate::Error;
13
14#[derive(Debug, Default)]
15pub(crate) struct PartialScriptInfo {
16    pub(crate) script_type: Option<ScriptType>,
17    pub(crate) inputs: BTreeMap<i64, Input>,
18    pub(crate) alert_conditions: BTreeMap<i64, AlertCondition>,
19}
20
21/// Information about a script.
22#[derive(Debug, Clone, Serialize, Deserialize)]
23pub struct ScriptInfo {
24    /// Script type metadata (indicator/strategy/library).
25    pub script_type: ScriptType,
26    /// Declared user inputs.
27    pub inputs: Vec<Input>,
28    /// Declared alert conditions.
29    pub alert_conditions: Vec<AlertCondition>,
30}
31
32impl TryFrom<PartialScriptInfo> for ScriptInfo {
33    type Error = Error;
34
35    fn try_from(value: PartialScriptInfo) -> Result<Self, Self::Error> {
36        let script_type = value.script_type.ok_or(Error::MissingScriptType)?;
37        Ok(ScriptInfo {
38            script_type,
39            inputs: value.inputs.into_values().collect(),
40            alert_conditions: value.alert_conditions.into_values().collect(),
41        })
42    }
43}