scratch_test_model/scopes/
target.rs1use super::target_data::{TargetLists, TargetVariables};
2use crate::aux::WithJsonContextExt as _;
3use crate::error::TargetError;
4use crate::scopes::TargetBlocks;
5use crate::scopes::target_procedures::TargetProcedures;
6
7#[derive(Debug, derive_getters::Getters, PartialEq)]
12pub struct Target {
13 is_stage: bool,
14 name: String,
15 variables: TargetVariables,
16 lists: TargetLists,
17 blocks: TargetBlocks,
20 procedures: TargetProcedures,
21}
22
23impl Target {
24 pub(crate) fn from_json(value: &serde_json::Value) -> Result<Self, TargetError<'_>> {
25 let is_stage = value
26 .get("isStage")
27 .and_then(|s| s.as_bool())
28 .ok_or(TargetError::MissingIsStage)?;
29 let name = value
30 .get("name")
31 .and_then(|s| s.as_str())
32 .ok_or(TargetError::MissingName)?
33 .into();
34 let variables = TargetVariables::from_json.with_ctx(&value["variables"])?;
35 let lists = TargetLists::from_json.with_ctx(&value["lists"])?;
36 let blocks = TargetBlocks::from_json(&value["blocks"])?;
37 let procedures = TargetProcedures::new(&blocks);
38
39 Ok(Self {
40 is_stage,
41 name,
42 variables,
43 lists,
44 blocks,
45 procedures,
46 })
47 }
48}