navi_vm\script_info/
mod.rs1mod 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}