Skip to main content

Backend

Trait Backend 

Source
pub trait Backend {
    // Required methods
    fn platform(&self) -> &str;
    fn generate_resource(
        &self,
        resource: &IacResource,
        provider: &IacProvider,
    ) -> Result<Vec<GeneratedArtifact>, IacForgeError>;
    fn generate_data_source(
        &self,
        ds: &IacDataSource,
        provider: &IacProvider,
    ) -> Result<Vec<GeneratedArtifact>, IacForgeError>;
    fn generate_provider(
        &self,
        provider: &IacProvider,
        resources: &[IacResource],
        data_sources: &[IacDataSource],
    ) -> Result<Vec<GeneratedArtifact>, IacForgeError>;
    fn generate_test(
        &self,
        resource: &IacResource,
        provider: &IacProvider,
    ) -> Result<Vec<GeneratedArtifact>, IacForgeError>;
    fn naming(&self) -> &dyn NamingConvention;

    // Provided methods
    fn generate_action(
        &self,
        _action: &IacAction,
        _provider: &IacProvider,
    ) -> Result<Vec<GeneratedArtifact>, IacForgeError> { ... }
    fn validate_resource(
        &self,
        _resource: &IacResource,
        _provider: &IacProvider,
    ) -> Vec<String> { ... }
    fn generate_all(
        &self,
        provider: &IacProvider,
        resources: &[IacResource],
        data_sources: &[IacDataSource],
    ) -> Result<Vec<GeneratedArtifact>, IacForgeError> { ... }
}
Expand description

Backend trait – each IaC platform implements this.

The trait operates on platform-independent IR types, producing platform-specific code as GeneratedArtifact values.

Required Methods§

Source

fn platform(&self) -> &str

Platform identifier (e.g., “terraform”, “pulumi”, “crossplane”).

Source

fn generate_resource( &self, resource: &IacResource, provider: &IacProvider, ) -> Result<Vec<GeneratedArtifact>, IacForgeError>

Generate artifacts for a single resource.

§Errors

Returns an error if code generation fails.

Source

fn generate_data_source( &self, ds: &IacDataSource, provider: &IacProvider, ) -> Result<Vec<GeneratedArtifact>, IacForgeError>

Generate artifacts for a single data source.

§Errors

Returns an error if code generation fails.

Source

fn generate_provider( &self, provider: &IacProvider, resources: &[IacResource], data_sources: &[IacDataSource], ) -> Result<Vec<GeneratedArtifact>, IacForgeError>

Generate provider-level artifacts (registration, configuration).

§Errors

Returns an error if code generation fails.

Source

fn generate_test( &self, resource: &IacResource, provider: &IacProvider, ) -> Result<Vec<GeneratedArtifact>, IacForgeError>

Generate test artifacts for a resource.

§Errors

Returns an error if code generation fails.

Source

fn naming(&self) -> &dyn NamingConvention

Get the naming convention for this platform.

Provided Methods§

Source

fn generate_action( &self, _action: &IacAction, _provider: &IacProvider, ) -> Result<Vec<GeneratedArtifact>, IacForgeError>

Generate artifacts for a single RPC-style action.

Defaults to an empty Ok(vec![]) so backends that don’t model actions (Terraform, Pulumi, Crossplane today) can opt out by simply inheriting. Backends that do support actions (Ansible) override.

§Errors

Returns an error if code generation fails.

Source

fn validate_resource( &self, _resource: &IacResource, _provider: &IacProvider, ) -> Vec<String>

Validate an IacResource before generation.

Returns a list of human-readable validation messages. An empty list means the resource is valid for this backend.

Source

fn generate_all( &self, provider: &IacProvider, resources: &[IacResource], data_sources: &[IacDataSource], ) -> Result<Vec<GeneratedArtifact>, IacForgeError>

Generate all artifacts for a complete provider in one batch.

Default implementation loops over resources and data sources, then generates provider-level artifacts. Backends can override for optimized batch generation (e.g., Pulumi generates a single schema.json).

§Errors

Returns an error if any generation step fails.

Dyn Compatibility§

This trait is dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety".

Implementors§