Skip to main content

openjd_model/template/
environment.rs

1// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
2// Copyright by contributors to this project.
3// SPDX-License-Identifier: (Apache-2.0 OR MIT)
4
5//! Environment types per spec §4.
6
7use super::actions::EnvironmentActions;
8use super::constrained_strings::Description;
9use crate::format_string::FormatString;
10use crate::types::{EndOfLine, FileType};
11use serde::Deserialize;
12use std::collections::HashMap;
13
14/// §4 Environment
15#[derive(Debug, Clone, Deserialize)]
16#[serde(rename_all = "camelCase", deny_unknown_fields)]
17pub struct Environment {
18    pub name: String,
19    pub description: Option<Description>,
20    pub script: Option<EnvironmentScript>,
21    pub variables: Option<HashMap<String, FormatString>>,
22}
23
24/// §4.1 EnvironmentScript
25#[derive(Debug, Clone, Deserialize)]
26#[serde(rename_all = "camelCase", deny_unknown_fields)]
27pub struct EnvironmentScript {
28    #[serde(rename = "let")]
29    pub let_bindings: Option<Vec<String>>,
30    pub actions: EnvironmentActions,
31    pub embedded_files: Option<Vec<EmbeddedFile>>,
32}
33
34/// §6 EmbeddedFile
35#[derive(Debug, Clone, Deserialize)]
36#[serde(rename_all = "camelCase", deny_unknown_fields)]
37pub struct EmbeddedFile {
38    pub name: String,
39    #[serde(rename = "type")]
40    pub file_type: FileType,
41    pub filename: Option<FormatString>,
42    pub data: Option<FormatString>,
43    pub runnable: Option<bool>,
44    #[serde(rename = "endOfLine")]
45    pub end_of_line: Option<EndOfLine>,
46}