tfschema-bindgen 0.1.5

Generate (de)serialization Rust code for Terraform Schema
Documentation
/*--- GENERATED START ---*/
#![allow(
    unused_imports,
    non_snake_case,
    non_camel_case_types,
    non_upper_case_globals
)]
use serde::{Deserialize, Serialize};
use serde_bytes::ByteBuf as Bytes;
use std::collections::BTreeMap as Map;

#[derive(Clone, Debug, PartialEq, PartialOrd, Serialize, Deserialize, Default)]
pub struct config {
    #[serde(skip_serializing_if = "Option::is_none")]
    pub data: Option<Vec<data_root>>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub provider: Option<Vec<provider_root>>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub resource: Option<Vec<resource_root>>,
}

#[derive(Clone, Debug, PartialEq, PartialOrd, Serialize, Deserialize)]
pub enum data_root {}

#[derive(Clone, Debug, PartialEq, PartialOrd, Serialize, Deserialize)]
pub enum provider_root {
    test_provider(Vec<test_provider_details>),
}

#[derive(Clone, Debug, PartialEq, PartialOrd, Serialize, Deserialize)]
pub enum resource_root {}

#[derive(Clone, Debug, PartialEq, PartialOrd, Serialize, Deserialize, Default)]
pub struct test_provider_details {
    #[serde(skip_serializing_if = "Option::is_none")]
    pub base_url: Option<String>,
}
/*--- GENERATED END ---*/

const TF_JSON_CONFIG: &str = r#"{
    "provider": [
      {
        "test_provider": [
          {
            "base_url": "https://acme.com/foo"
          }
        ]
      }
    ]
  }"#;

fn main() -> Result<(), std::io::Error> {
    let res: config = serde_json::from_str(TF_JSON_CONFIG).unwrap();

    assert_eq!(res.provider.as_ref().map(|x| x.is_empty()), Some(false));
    assert_eq!(
        res.provider.as_ref().map(|x| x.get(0).is_none()),
        Some(false)
    );
    let prv = res
        .provider
        .as_ref()
        .and_then(|x| x.get(0))
        .and_then(|x| match x {
            provider_root::test_provider(p) => p.get(0),
        });
    assert_eq!(prv.is_none(), false);
    assert_eq!(
        prv.and_then(|x| x.base_url.to_owned()),
        Some("https://acme.com/foo".to_owned())
    );
    print!("success!\n");
    Ok(())
}