pub struct Block {
pub ident: Decorated<Ident>,
pub labels: Vec<BlockLabel>,
pub body: Body,
/* private fields */
}
Expand description
Represents an HCL block which consists of a block identifier, zero or more block labels and a block body.
In HCL syntax this is represented as:
block_identifier "block_label1" "block_label2" {
body
}
Fields§
§ident: Decorated<Ident>
The block identifier.
labels: Vec<BlockLabel>
Zero or more block labels.
body: Body
Represents the Block
’s body.
Implementations§
Source§impl Block
impl Block
Sourcepub fn new(ident: impl Into<Decorated<Ident>>) -> Block
pub fn new(ident: impl Into<Decorated<Ident>>) -> Block
Creates a new Block
from an identifier.
Sourcepub fn builder(ident: impl Into<Decorated<Ident>>) -> BlockBuilder
pub fn builder(ident: impl Into<Decorated<Ident>>) -> BlockBuilder
Creates a new BlockBuilder
to start building a new Block
with the provided
identifier.
Sourcepub fn is_labeled(&self) -> bool
pub fn is_labeled(&self) -> bool
Returns true
if the block has labels.
§Example
use hcl_edit::{structure::Block, Ident};
let block = Block::new(Ident::new("foo"));
assert!(!block.is_labeled());
let labeled_block = Block::builder(Ident::new("foo"))
.label("bar")
.build();
assert!(labeled_block.is_labeled());
Sourcepub fn has_ident(&self, ident: &str) -> bool
pub fn has_ident(&self, ident: &str) -> bool
Returns true
if the block has the given identifier.
§Example
use hcl_edit::{structure::Block, Ident};
let block = Block::new(Ident::new("foo"));
assert!(block.has_ident("foo"));
assert!(!block.has_ident("bar"));
Sourcepub fn has_labels<T>(&self, labels: &[T]) -> bool
pub fn has_labels<T>(&self, labels: &[T]) -> bool
Returns true
if the Block
’s labels and the provided ones share a common prefix.
For example, &["foo"]
will match blocks that fulfil either of these criteria:
- Single
"foo"
label. - Multiple labels, with
"foo"
being in first position.
For an alternative which matches labels exactly see Block::has_exact_labels
.
§Examples
use hcl_edit::{structure::Block, Ident};
let block = Block::builder(Ident::new("resource"))
.labels(["aws_s3_bucket", "mybucket"])
.build();
assert!(block.has_labels(&["aws_s3_bucket"]));
assert!(block.has_labels(&["aws_s3_bucket", "mybucket"]));
assert!(!block.has_labels(&["mybucket"]));
One use case for this method is to find blocks in a Body
that have a common label
prefix:
use hcl_edit::structure::{Attribute, Block, Body};
use hcl_edit::Ident;
let body = Body::builder()
.attribute(Attribute::new(Ident::new("foo"), "bar"))
.block(
Block::builder(Ident::new("resource"))
.labels(["aws_s3_bucket", "bucket1"])
)
.block(
Block::builder(Ident::new("resource"))
.labels(["aws_db_instance", "db_instance"])
)
.block(
Block::builder(Ident::new("resource"))
.labels(["aws_s3_bucket", "bucket2"])
)
.build();
let buckets: Vec<&Block> = body.get_blocks("resource")
.filter(|block| block.has_labels(&["aws_s3_bucket"]))
.collect();
assert_eq!(
buckets,
[
&Block::builder(Ident::new("resource"))
.labels(["aws_s3_bucket", "bucket1"])
.build(),
&Block::builder(Ident::new("resource"))
.labels(["aws_s3_bucket", "bucket2"])
.build()
]
);
Sourcepub fn has_exact_labels<T>(&self, labels: &[T]) -> bool
pub fn has_exact_labels<T>(&self, labels: &[T]) -> bool
Returns true
if the Block
’s labels match the provided ones exactly.
For an alternative which matches a common label prefix see Block::has_labels
.
§Examples
use hcl_edit::{structure::Block, Ident};
let block = Block::builder(Ident::new("resource"))
.labels(["aws_s3_bucket", "mybucket"])
.build();
assert!(!block.has_exact_labels(&["aws_s3_bucket"]));
assert!(block.has_exact_labels(&["aws_s3_bucket", "mybucket"]));
One use case for this method is to find blocks in a Body
that have an exact set of
labels:
use hcl_edit::structure::{Attribute, Block, Body};
use hcl_edit::Ident;
let body = Body::builder()
.block(
Block::builder(Ident::new("resource"))
.labels(["aws_s3_bucket", "bucket1"])
)
.block(
Block::builder(Ident::new("resource"))
.labels(["aws_s3_bucket", "bucket2"])
)
.build();
let buckets: Vec<&Block> = body.get_blocks("resource")
.filter(|block| block.has_exact_labels(&["aws_s3_bucket", "bucket1"]))
.collect();
assert_eq!(
buckets,
[
&Block::builder(Ident::new("resource"))
.labels(["aws_s3_bucket", "bucket1"])
.build(),
]
);