terraform-parser 0.1.0

Strictly typed terraform plan and state files parser written in Rust.
Documentation
use crate::block_expressions_representation::*;
use crate::expression_representation::*;
use crate::values_representation::*;
use serde::{Deserialize, Serialize};
use std::collections::HashMap;

#[derive(Serialize, Deserialize)]
pub struct ConfigurationRepresentation {
    pub provider_configs: Option<HashMap<String, ProviderConfig>>,
    pub root_module: ModuleConfiguration,
}

#[derive(Serialize, Deserialize)]
pub struct ProviderConfig {
    pub name: String,
    pub alias: String,
    pub module_address: String,
    pub expressions: BlockExpressionRepresentation,
}

#[derive(Serialize, Deserialize)]
pub struct ModuleConfiguration {
    pub outputs: HashMap<String, Output>,
    pub resources: Vec<Resource>,
}

#[derive(Serialize, Deserialize)]
pub struct Output {
    pub expression: serde_json::Value,
    pub sensetive: Option<bool>,
}

#[derive(Serialize, Deserialize)]
pub struct Resource {
    pub address: String,
    pub mode: Mode,
    #[serde(rename = "type")]
    pub resource_type: String,
    pub name: String,
    pub provider_config_key: String,
    pub provisioners: Option<Vec<Provisioner>>,
    pub expressions: BlockExpressionRepresentation,
    pub schema_version: i8,
    pub count_expression: Option<ExpressionRepresentation>,
    pub for_each_expression: Option<ExpressionRepresentation>,
    pub module_calls: Option<HashMap<String, ModuleCall>>,
}

#[derive(Serialize, Deserialize)]
pub struct Provisioner {
    #[serde(rename = "type")]
    pub provisioner_type: String,
    pub expression: BlockExpressionRepresentation,
}

#[derive(Serialize, Deserialize)]
pub struct ModuleCall {
    pub resolved_source: String,
    pub expressions: BlockExpressionRepresentation,
    pub count_expression: Option<ExpressionRepresentation>,
    pub for_each_expression: Option<ExpressionRepresentation>,
    pub module: ModuleConfiguration,
}