# tf-bindgen
[](https://robert-oleynik.github.io/tf-bindgen/)
[](https://crates.io/crates/tf-bindgen)
`tf-bindgen` can be used to generate Rust bindings for [Terraform] providers and
to deploy your infrastructure.
This library will replicate most features of [CDK for Terraform] but written in Rust.
[Terraform]: https://www.terraform.io/
[CDK for Terraform]: https://developer.hashicorp.com/terraform/cdktf
## Requirements
Required tools:
- `cargo`
- `terraform`
## What is `tf-bindgen`?
`tf-bindgen` is a code generator which will generate Rust code to configure infrastructure using [Terraform](https://www.terraform.io/). The following example shows how to use `tf-bindgen` to configure a Kubernetes pod running nginx:
```rust
fn init() -> Stack {
let stack = Stack::new("nginx");
/// Configure Resources using a builder
let metadata = KubernetesNamespaceMetadata::builder()
.name("nginx")
.build();
let namespace = KubernetesNamespace::create(&stack, "nginx-namespace")
.metadata(metadata)
.build();
/// Configure Resources using the resource! macro
resource! {
&stack, resource "kubernetes_pod" "nginx" {
metadata {
namespace = &namespace.metadata[0].name
name = "nginx"
}
spec {
container {
name = "nginx"
image = "nginx"
port {
container_port = 80
}
}
}
}
};
stack
}
```
See [Documentation](https://robert-oleynik.github.io/tf-bindgen/introduction.html) for a full introduction into `tf-bindgen`.
## Issues
### Compile Performance
Some Providers like [tf-kubernetes](https://github.com/robert-oleynik/tf-kubernetes) will generate large bindings, resulting in long compile durations. If you have this issue, please see the [Improving Compile Duration](https://robert-oleynik.github.io/tf-bindgen/advanced/improving_compile_duration.html) section.
## Roadmap
**v0.1:**
- [x] generate Rust code for Terraform provider
- [x] implement data blocks
- [x] implement resource blocks
- [x] add support for variable references
- [x] generate Rust code from Terraform modules
- [x] add code generator `tf_bindgen::codegen::resource`
- [x] add Construct derive macro
- [x] create Markdown book
**v0.2:**
- [ ] Add support for Outputs in constructs
- [ ] Add Macro to generate CLI application
- [ ] Add `format!` for Value types
- [ ] Remove derive macros from generated source code
## Limitations
As mentioned above, this library will replicate features provided by [CDK for Terraform].
It is not a one to one replacement for Rust and will be different in some aspects
of the implementation:
1. `cdktf` (library and CLI application) are not needed to use this library
2. `tf-bindgen` constructs are not compatible with CDK constructs.
## Contributing
## License
This project is licensed under the [BSD-3-Clause](./LICENSE) license.