Skip to main content

navi_vm\script_info/
mod.rs

1mod input;
2
3use std::collections::BTreeMap;
4
5pub use input::*;
6pub use navi_types::script_info::{
7    AlertCondition, BarColorDeclaration, Format, Indicator, Library, ScriptInfo, ScriptType,
8    SeriesDeclaration, Strategy,
9};
10
11use crate::Error;
12
13#[derive(Debug, Default)]
14pub(crate) struct PartialScriptInfo {
15    pub(crate) script_type: Option<ScriptType>,
16    pub(crate) inputs: BTreeMap<i64, Input>,
17    pub(crate) alert_conditions: BTreeMap<i64, AlertCondition>,
18    pub(crate) series_declarations: BTreeMap<u64, SeriesDeclaration>,
19    pub(crate) bar_color_declaration: Option<BarColorDeclaration>,
20    pub(crate) timezone: navi_types::Tz,
21}
22
23impl TryFrom<PartialScriptInfo> for ScriptInfo {
24    type Error = Error;
25
26    fn try_from(value: PartialScriptInfo) -> Result<Self, Self::Error> {
27        let script_type = value.script_type.ok_or(Error::MissingScriptType)?;
28        Ok(ScriptInfo {
29            script_type,
30            inputs: value.inputs.into_values().collect(),
31            alert_conditions: value.alert_conditions.into_values().collect(),
32            series_declarations: value.series_declarations.into_values().collect(),
33            bar_color_declaration: value.bar_color_declaration,
34            timezone: value.timezone,
35        })
36    }
37}