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: BodyRepresents 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(),
    ]
);Trait Implementations§
source§impl From<BlockBuilder> for Block
 
impl From<BlockBuilder> for Block
source§fn from(builder: BlockBuilder) -> Self
 
fn from(builder: BlockBuilder) -> Self
impl Eq for Block
Auto Trait Implementations§
impl Freeze for Block
impl RefUnwindSafe for Block
impl Send for Block
impl Sync for Block
impl Unpin for Block
impl UnwindSafe for Block
Blanket Implementations§
source§impl<T> BorrowMut<T> for Twhere
    T: ?Sized,
 
impl<T> BorrowMut<T> for Twhere
    T: ?Sized,
source§fn borrow_mut(&mut self) -> &mut T
 
fn borrow_mut(&mut self) -> &mut T
source§impl<T> CloneToUninit for Twhere
    T: Clone,
 
impl<T> CloneToUninit for Twhere
    T: Clone,
source§unsafe fn clone_to_uninit(&self, dst: *mut T)
 
unsafe fn clone_to_uninit(&self, dst: *mut T)
clone_to_uninit)